日本語の文章をクラスタリングします。
インストール
pip install -U sentence-transformers
コード
下記の文章を5つに分類する。
'男はご飯を食べた。', '男はパンを食べた', '女はスープを飲んだ', '女子はスマホでメールを送る。', '私は時計を彼女に送る。', '男は車に乗る', '小学生が自転車に乗る', 'サルがドラムを演奏する', 'カンガルーがタンバリンを叩く', 'チーターが獲物の後ろを走っている。', 'チーターが獲物を追いかける'
from sentence_transformers import SentenceTransformer
from sklearn.cluster import KMeans
import random
embedder = SentenceTransformer('distiluse-base-multilingual-cased')
# Corpus with example sentences
corpus = ['男はご飯を食べた。',
'男はパンを食べた',
'女はスープを飲んだ',
'女子はスマホでメールを送る。',
'私は時計を彼女に送る。',
'男は車に乗る',
'小学生が自転車に乗る',
'サルがドラムを演奏する',
'カンガルーがタンバリンを叩く',
'チーターが獲物の後ろを走っている。',
'チーターが獲物を追いかける'
]
random.shuffle(corpus)
corpus_embeddings = embedder.encode(corpus)
# Perform kmean clustering
num_clusters = 5
clustering_model = KMeans(n_clusters=num_clusters)
clustering_model.fit(corpus_embeddings)
cluster_assignment = clustering_model.labels_
clustered_sentences = [[] for i in range(num_clusters)]
for sentence_id, cluster_id in enumerate(cluster_assignment):
clustered_sentences[cluster_id].append(corpus[sentence_id])
for i, cluster in enumerate(clustered_sentences):
print("Cluster ", i+1)
print(cluster)
print("")
結果
Cluster 1
['女子はスマホでメールを送る。', '私は時計を彼女に送る。']
Cluster 2
['小学生が自転車に乗る', '男は車に乗る']
Cluster 3
['サルがドラムを演奏する', 'カンガルーがタンバリンを叩く']
Cluster 4
['男はパンを食べた', '男はご飯を食べた。', '女はスープを飲んだ']
Cluster 5
['チーターが獲物を追いかける', 'チーターが獲物の後ろを走っている。']