gensimのWord2Vecによる元素記事に含まれる単語の数値ベクトル化

本技術記事の目的

こんにちは。DATUM STUDIOの岩城です。今回の技術ブログではWikipediaの元素に関する記事をWord2Vecによって学習し、得られた分散表現から単語ベクトル同士が意味的な類似性を示すか確認します。前回の技術ブログ(1)では、自然言語処理の材料開発への応用を目指し、元素に関する記事からDoc2Vecを用いて元素の特徴量抽出に挑戦しました。計算結果を低次元変換して可視化すると、元素の記事に対応するベクトルが意味のありそうな配置を示す例を見出せました。このようにDoc2Vecは任意の文章を数値ベクトル化し文章同士の類似性を評価可能です。対してこれから利用するWord2VecはDoc2Vecと非常によく似た技術で単語の数値ベクトル化を通して単語同士の意味的な比較を行うことができます。題材とする単語は私の独断と偏見が多いに含まれますが、元素の記事をWord2Vecに学習させた結果が単語ベクトルとしてどう反映されるか観察してみましょう。

計算方法

計算はPythonで実装し下記のようなファイルの配置としました。

┣ main.py
┣ extract_atoms_data.csv
┣ ATOM.db
┣ w2vm.pickle
┣ libs/
┃ ┣ wakati.py
┃ ┣ traindb.py
┃ ┗ modelw2v.py
┗ figs/
  ┗ output.png

extract_atoms_data.csvはWikipediaの元素に関する記事を抽出してcsvファイルにまとめもので、元素番号(NUMBER), 元素記号(SYMBOL), 元素名(NAME), 記事内容(TEXT)が含まれます。main.pyによる処理の流れは、

1. csvデータ読み込み
2. 記事の「わかちがき」とDB登録
3. Word2Vecによる単語分散表現を得るためのモデル学習
4. 対象単語に類似度の高かった単語と類似度を抽出
5. 結果をグラフ化して保存

です。libsディレクトリのスクリプトは自作モジュールで、自分への忘備録という意味を込めて公開すると、

wakati.py(わかちがき処理用)

traindb.py(DB処理用)

modelw2v.py(Word2Vec処理用)

です。3. Word2Vecによる単語分散表現を得るためのモデル学習ではモデルに関して設定すべきパラメータがいくつか存在します。基本的にはgensim.models.word2vecライブラリの説明(2)にあるデフォルト設定で上手くいくことが多いですが、今回は学習データ量の少なさを考慮し計算回数を多めに変更しました(iter=5 —> iter=25)。4. 対象単語に類似度の高い単語とスコアを抽出 は、Word2Vecの model.most_similar()メソッドを利用しています。メソッドで計算される類似度は単語ベクトル同士のコサイン類似度が採用されているようです。ちなみに対象単語の分散表現である数値化された単語ベクトルは model.wv[targetword]を適用して取り出せます。最後に1. ~ 5.の一連の流れを実行するmain.pyは

main.py(一連の処理を行う)

となります。最終出力は対象単語に類似度が高い単語とスコアを棒グラフ化したもので、png画像がfigsディレクトリに保存されます。

 

対象単語と類似度が高かった上位20単語の例

今回は対象単語として自分の古きドメイン知識を活かせる「半導体」、「ガリウム」、「ヒ化ガリウム」を取り上げてみました。Wikipediaの元素記事を元にWord2Vecで構成した単語ベクトルが本当に意味のある妥当な類似性を示したか、対象単語ごとに確認します。

対象単語 = 「半導体」の例

対象単語 = 「半導体」の単語ベクトルと類似度が高かった上位20単語およびそのスコアは下図のようになりました。

特筆すべき関連単語を列挙すると、

  • バンドギャップ(1位):半導体物性で最も重要な材料のエネルギー構造に関わる言葉です。
  • 欠陥(7位):半導体材料の質に関係します。
  • トランジスタ(9位):半導体デバイスの例です。
  • レーザー(13位):半導体レーザーとして身近なところで利用されています。
  • 発光ダイオード(16位):いわゆるLEDです。これも半導体が利用されています。
  • シリコン(18位):現代テクノロジーを基盤を支える半導体です。
  • ヒ化ガリウム(19位):化合物半導体の代表例です。
  • ドーパント(20位):添加される不純物です。半導体の物性に大きく影響します。

となります。一般的な関連単語(媒質、部品、素材 …)などを含めると、上位20のほとんどが半導体に関係性の強いもので
した。学習データ量が少なくユニークな単語は高々12018語ですが、トップ20の大部分を違和感ない結果で占められたと言えるでしょう。

対象単語 = 「ガリウム」の例

対象単語 = 「ガリウム」の単語ベクトルと類似度が高かった上位20単語およびそのスコアは下図のようになりました。

同様に自分の思い入れの強い単語を列挙すると、

  • 有機金属気相成長法(1位):半導体結晶成長方法の一つです。
  • 青色発光ダイオード(18位):窒化ガリウム(GaN)が材料です。原料にガリウムが含まれます。
  • ヒ化ガリウム(19位):ヒ素とガリウムの化合物(GaAs)です。

です。一般的に耳慣れない言葉ですが、1位の「有機金属気相成長法」(Metal Organic Chemical Vapor Deposition)
は化合物半導体である窒化ガリウムやヒ化ガリウムの有力な結晶成長法です。基板に原料ガスを吹き付けて薄膜結晶を成長させます。対象単語「ガリウム」に対して多数ある単語の中からこれほど専門的なものが関連度1位になるとは思ってもみませんでした。自分の想像以上の結果を目の当たりにするとAI(機械学習)への愛着が増します。自分は半導体分野への知識に偏っているので、上位20に含まれた他の単語に言及できませんが、別のドメイン知識を有する人が見ればまた違った解釈もできるでしょう。

対象単語 = 「ヒ化ガリウム」の例

対象単語 = 「ヒ化ガリウム」の単語ベクトルと類似度が高かった上位20単語およびそのスコアは下図のようになりました。

恣意的に特筆すべき関連語を列挙すると、

  • リン化ガリウム(7位):GaPでヒ化ガリウム(GaAs)の仲間です。
  • 化合物半導体(9位):ヒ化ガリウムは化合物半導体です。
  • 青色発光ダイオード(10位):ヒ化ガリウムと仲間の窒化ガリウム(GaN)が材料です。
  • 中村修二(11位):青色発光ダイオード開発に従事されたノーベル物理学賞受賞者です。
  • DOPE(12位):不純物を添加することです。半導体の物性に極めて重要です。
  • 蛍光体(13位):発光ダイオードの発光特性を変化させるために用いられます。
  • 半導体(15位):ヒ化ガリウムは半導体です。
  • 分子線エピタキシー法(18位):有機金属気相成法とは別の半導体結晶成長方法です。
  • 発光ダイオード(19位):ヒ化ガリウムも発光ダイオードに使用されます。
  • ドーパント(20位):半導体に添加される不純物のことです。

となります。「青色発光ダイオード」と「中村修二」は窒化ガリウム(GaN)に関連した単語なので、対象単語の「ヒ化ガリウム」と直接関連するわけではありませんが、関連知識として重要な位置付けであることに変わりありません。ちなみに窒化ガリウム(Gallium Nitride)のGaNと深層学習で頻出のGAN(Generative Adversarial Network)とは別物です。

言語の意味としての粒度は「半導体」>「ガリウム」>「ヒ化ガリウム」でしょうが、上記例に示した通り、どの対象単語についても適切な関連語が上位に提示され、学習された言語空間が意味のある単語ベクトルで構成されていると推測されます。

まとめ

Word2Vecを用いてWikipediaの元素に関するテキストデータを学習させ、数値化した単語ベクトルを構築しました。自分のドメイン知識のある単語を選択し、対象単語と関連の高い単語を列挙すると納得がいく結果が得られました。これによりWord2Doc2Vecを通じた分散表現が妥当な意味空間を形成していると類推されます。個人的には Neural Networkアルゴリズムに基づくWord2VecやDoc2Vecなどの自然言語処理技術をマテリアルズ・インフォマティクス(materials informatics)へ展開すれば、興味深い新たな知見が得られるだろうと期待しています。

参考URL

  1.  https://datumstudio.jp/blog/doc2vecを用いたテキストデータからの元素の特徴量抽
  2.  https://radimrehurek.com/gensim/models/word2vec.html

このページをシェアする: