0
1

More than 3 years have passed since last update.

Pythonプログラミング:ウィキペディアのデータを使ってword2vecをしてみる{3. モデル利用編}

Last updated at Posted at 2020-08-08

はじめに

4本立ての記事、3本目です。

  1. データ取得&前処理編
  2. モデル作成編
  3. モデル利用編 ★本稿
  4. モデル応用編

本稿で紹介すること

  • 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モデルを読み込みます。

analyzeWiki_Word2Vec2
from gensim.models import Word2Vec

model = Word2Vec.load(r'..\result\jawiki_word2vec_sz200_wndw10.model')
wv = model.wv

以下、モデル利用のCodeを紹介。

類義語の探索

”日本”に最も似ているのは”大日本帝国”なのですね。”地球”と”火星”も惑星としての性質ではなく、文脈として同じような使われ方をするケースが多いのでしょうかね。

analyzeWiki_Word2Vec2
$ 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つの単語の類似度

”チンパンジー”とより似ているのは、”ゴリラ”なのですね。

analyzeWiki_Word2Vec2
$ wv.similarity('チンパンジー', '猿')
0.37958744

$ wv.similarity('チンパンジー', 'ゴリラ')
0.64872086

単語の足し算と引き算

これが一番強力な使い方ですね。
1つ目の例は、まぁなんとなく分かりますね。
2つ目および3つ目の例は、いかがでしょう。2つ目の例では”トヨタ自動車”と”日産自動車”という車関係の日本のメーカーが出現していますね。一方で、3つ目の例では”ダイムラー”と”ハノマーグ”という車関係のドイツのメーカーが出現していますね。

analyzeWiki_Word2Vec2
$ 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モデルを利用する方法を紹介。

0
1
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
1