はじめに
4本立ての記事、3本目です。
- データ取得&前処理編
- モデル作成編
- モデル利用編 ★本稿
- モデル応用編
本稿で紹介すること
- word2vecモデルの利用
word2vec
Word2vec Tutorial
Deep learning with word2vec and gensim
米googleの研究者が開発したWord2Vecで自然言語処理(独自データ)
本稿で紹介しないこと
- word2vecの仕組み
- Pythonライブラリの使い方
- gensim ※単語の分散表現(単語ベクトル)を実現するPythonライブラリ
- word2vecモデルの作成
【まとめ】自然言語処理における単語分散表現(単語ベクトル)と文書分散表現(文書ベクトル)
word2vec(Skip-Gram Model)の仕組みを恐らく日本一簡潔にまとめてみたつもり
【Python】Word2Vecの使い方
gensim/word2vec.py
gensim: models.word2vec – Word2vec embeddings
モデル利用編
モデル作成に続き、Windowsで進めます。
word2vecモデルの利用
まず、事前に作成(学習)したword2vecモデルを読み込みます。
from gensim.models import Word2Vec
model = Word2Vec.load(r'..\result\jawiki_word2vec_sz200_wndw10.model')
wv = model.wv
以下、モデル利用のCodeを紹介。
類義語の探索
”日本”に最も似ているのは”大日本帝国”なのですね。”地球”と”火星”も惑星としての性質ではなく、文脈として同じような使われ方をするケースが多いのでしょうかね。
$ wv.similar_by_word('日本')
[('大日本帝国', 0.5008862018585205),
('韓国', 0.4892416000366211),
('アメリカ合衆国', 0.4772924780845642),
('中国', 0.4675092399120331),
('大韓民国', 0.4430246949195862),
('全日本', 0.4379886984825134),
('ちら', 0.42691436409950256),
('台湾', 0.41929417848587036),
('ムスリム・ウラマー', 0.41900634765625),
('米国', 0.41775089502334595)]
$ wv.similar_by_word('地球')
[('火星', 0.7551407814025879),
('惑星', 0.7512051463127136),
('宇宙', 0.7085860967636108),
('銀河系', 0.669750452041626),
('ガニメデ', 0.6601986885070801),
('太陽系', 0.6598026752471924),
('人類', 0.6427561044692993),
('木星', 0.6242889165878296),
('宇宙船', 0.6086498498916626),
('月面', 0.6085003018379211)]
2つの単語の類似度
”チンパンジー”とより似ているのは、”ゴリラ”なのですね。
$ wv.similarity('チンパンジー', '猿')
0.37958744
$ wv.similarity('チンパンジー', 'ゴリラ')
0.64872086
単語の足し算と引き算
これが一番強力な使い方ですね。
1つ目の例は、まぁなんとなく分かりますね。
2つ目および3つ目の例は、いかがでしょう。2つ目の例では”トヨタ自動車”と”日産自動車”という車関係の日本のメーカーが出現していますね。一方で、3つ目の例では”ダイムラー”と”ハノマーグ”という車関係のドイツのメーカーが出現していますね。
$ wv.most_similar(positive=['王子', '女'], negative=['男'])
[('王女', 0.6660595536231995),
('女王', 0.6010779738426208),
('王妃', 0.5653730630874634),
('姫君', 0.5344032049179077),
('アル・ワリード', 0.5340311527252197),
('ローレシア', 0.5333681106567383),
('ベースメントモンスター', 0.5282386541366577),
('お姫様', 0.5203766822814941),
('ヴィドゥーダバ', 0.5136663913726807),
('マナフィ', 0.5090745687484741)]
$ wv.most_similar(positive=['自動車', '日本'])
[('軽自動車', 0.5139060616493225),
('二輪車', 0.48638927936553955),
('乗用車', 0.4817807674407959),
('オートバイ', 0.48034173250198364),
('トヨタ自動車', 0.4653428792953491),
('陸運', 0.45928823947906494),
('日産自動車', 0.4492081105709076),
('運輸', 0.4431821405887604),
('工業', 0.432481974363327),
('自転車', 0.4301576614379883)]
$ wv.most_similar(positive=['自動車', 'ドイツ'], negative=['日本'])
[('GmbH', 0.5056157112121582),
('自転車', 0.4951740801334381),
('ダイムラー', 0.47622862458229065),
('ルートヴィヒスハーフェン', 0.4695303440093994),
('乗用車', 0.46864038705825806),
('ベンツ', 0.4634667634963989),
('車', 0.46102428436279297),
('車両', 0.4482493996620178),
('オートバイ', 0.4431225061416626),
('ハノマーグ', 0.4428933262825012)]
まとめ
ウィキペディアの前処理済みデータから作成済みの、word2vecモデルを利用する方法を紹介。