0
0

More than 3 years have passed since last update.

【自然言語処理】日本語の教師なし学習をやってみた

Posted at

日本語の文章をクラスタリングします。

インストール

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
['チーターが獲物を追いかける', 'チーターが獲物の後ろを走っている。']

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0