Word2vecとchiVeで数値化した言葉から類似語を探す
chiVeはWord2vecで使うことができる学習済み日本語モデルです。これを利用することで自分で学習させることなく日本語をベクトル化(数値化)することができます。今回はWindowsパソコンでGensimライブラリを使ってWord2vecをchiVeモデルで使いたいと思います。
(1) 設定に必要な環境
chiVeモデル
Pythonの実行環境
プログラムエディター
(2) chiVeの設定手順
1. chiveのダウンロードと配置
chiVeの公開サイトからGensim用のモデルをダウンロードします。表内の拡張子をクリックしますとダウンロードが開始します。今回は一番上のv1.2mc5を使いました。
ダウンロードしたtar.gzファイルを解凍しますと、4つのファイルが展開されます。これらのファイルを適当なパスに配置してください。後で動作確認で作成するPythonファイルと同じ場所に置くとコードを書く際に楽になります。またWindowsでtar.gzファイルを解凍するときは7-zipをインストールしておくと良いと思います。
2. Python実行環境
Python言語で書かれたプログラムを動作するときに必要な環境です。
2022/10/13時点の最新版はv3.10.8です。自身はPython v3.9.8を使っています。
ダウンロードしたインストーラーをダブルクリックしてInstall Nowを押せば良いのですが、以下の部分だけチェックを入れて環境変数PATHを自動登録しておきます。
今回のプログラムでは以下のPythonライブラリーを追加で導入します。Python実行環境をインストールした後にコマンドプロンプトかWindows Power Shellから以下のコマンドを順番に実行してください。
pip install gensim
3. プログラム・エディター
プログラムの記述はメモ帳で行えますが、動作確認することを考えますとプログラム・エディターを使用した方が良いと思います。PythonであればPyScripter / Visual Studio / Visual Studio Code / Atomがあります。自身は使い慣れているPyScripterを使っています。
(3) chiVeによるWord2vecの動作確認
簡単なPythonコードで動くか確認します。テスト用にw2v_test.pyを用意しました。このPythonコードをchiVeのファイルと同じ場所に配置します。
Pythonコードは以下のように記載しております。Gensimをインポートし、chiveを読み込んだ後に’USJ’に類似した10種類の言葉を出力します。またchiveに登録されてない言葉をmost_similarで実行するとエラーとなるため、kwがvectorsの中にあるか判定してから実行するようにしています。
import gensim
kw = 'USJ'
vectors = gensim.models.KeyedVectors.load('chive-1.2-mc5.kv')
if kw in vectors:
item = vectors.most_similar(kw, topn=10)
print(item)
else:
print(kw + 'はchiVeに登録されていません')
以下がprint文で表示された変数「item」の内容です。USJの単語ベクトルと類似が高い順番に言葉が並んでいます。
[('ユニバーサル・スタジオ', 0.8287520408630371),
('ユニバーサルスタジオジャパン', 0.7980976104736328),
('TDL', 0.73465496301651),
('ディズニーランド', 0.7245601415634155),
('ディズニーシー', 0.6772289276123047),
('ズニーランド', 0.6668463945388794),
('東京ディズニーランド', 0.6568112969398499),
('海遊', 0.6480761766433716),
('TDR', 0.6378751397132874),
('アトラクション', 0.6205006241798401)]
他にも単語ベクトルの加減算することで新たな単語ベクトルが生成できますが、今回は類似言語を求めることが目的となりますので、ここで終了とさせていただきます。