今回はGensimで言語の分析をしてみたい.
これは言語データをembeddingして分析する際に非常に便利なライブラリである.例えば,コーパスから学習を回して単語の分散表現を下記のように学習できる.
import gensim.downloader as api
from gensim.models import Word2Vec
# "text8" コーパスのロード
# dataset は各文がトークン化されたリストとして順次返すジェネレーターです
dataset = api.load("text8")
# 必要に応じて全体をリスト化(大規模なコーパスの場合はジェネレーターのまま学習させるのが望ましい)
sentences = list(dataset)
# Word2Vec モデルの学習
model = Word2Vec(sentences, vector_size=100, window=5, min_count=5, workers=4)
# モデルの語彙数を確認
print("Vocabulary size:", len(model.wv.index_to_key))
# 例: 単語 "king" のベクトルを表示
print("Vector for 'king':", model.wv['king'])
# 'king' に類似した単語を探索
similar_words = model.wv.most_similar('king')
print(similar_words)
Vocabulary size: 71290
Vector for ‘king’: -1.40022373e+00 3.87524843e-01 2.77636194e+00 1.32735562e+00
-9.24052000e-01 2.66494155e-01 1.56175697e+00 1.01277709e+00
6.91688061e-01 2.61563897e+00 -1.35741532e+00 -2.46408916e+00
1.54095292e-01 3.77410746e+00 -1.13374650e+00 -1.83525944e+00
-1.10971332e+00 1.75624862e-02 3.64231133e+00 1.13254994e-01
-1.95500445e+00 1.33008587e+00 -2.52539802e+00 -8.90057862e-01
1.59635782e+00 -2.57542551e-01 -3.78294706e-01 -1.50552583e+00
9.04640853e-01 4.26173359e-01 -1.87384582e+00 1.35238218e+00
1.02551711e+00 4.05671090e-01 3.15576744e+00 -3.72577161e-01
-2.00494468e-01 -5.16166687e-01 -3.18955064e-01 -2.40782118e+00
3.65876585e-01 1.11689639e+00 1.09998083e+00 1.18768319e-01
-1.34638250e+00 -1.95833755e+00 -1.78710806e+00 1.50652990e-01
1.99266195e+00 -2.04074264e+00 3.12442803e+00 3.94430310e-01
-1.09330833e+00 2.18462372e+00 9.89748657e-01 -1.54847479e+00
-8.72489452e-01 -3.34259272e-02 -1.18532026e+00 -1.02175486e+00
6.91572130e-01 -1.06667161e+00 2.03506780e+00 -1.90401065e+00
-1.93672693e+00 -8.10822129e-01 -2.50981212e+00 1.11374438e+00
2.50099444e+00 -1.05433846e+00 4.04345915e-02 8.54350448e-01
-4.76705027e+00 -1.61131990e+00 -1.09484804e+00 -2.30183554e+00
6.08713627e-01 -1.29240143e+00 -9.71304893e-01 2.35009527e+00
-3.78833461e+00 -1.65722263e+00 -1.12937665e+00 1.06876105e-01
-1.43580592e+00 2.80714321e+00 1.15638387e+00 -1.11737990e+00
-4.65689510e-01 -3.33689991e-03 -5.88901460e-01 -1.01883423e+00
-3.54521811e-01 -1.28444755e+00 3.42088604e+00 2.02888918e+00
1.90022147e+00 4.11276197e+00 1.02729666e+00 4.28371370e-01