Word2Vec(1)オリジナルの実装

Original implementation of Word2Vec


2021/01/20
藤田昭人


BookBotの対話機能には欠かせない word2vecに取り組んでます。

この不思議なアルゴリズムの解説は ブログ等で多数見つけられるのですが、 実装を紹介する記事に関しては Python ライブライブラリの gensim ほぼ一択で困惑してました。 さらに僕が探した範囲では JavaScript の word2vec のパッケージは、 いずれもオリジナルのCプログラムの ラッパーしか見当たりませんでした。

そこでオリジナルの実装を調べてみたのですが…
オリジナルの実装は 案外おじさんにも優しい古き良きプログラムでした。
本稿ではそのあたりを紹介します。


開発者のトマス・ミコロフと彼の論文について

回りくどくならないようにサクッと…

word2vec の開発者のトマス・ミコロフはWikipediaのページで紹介されています。

en.wikipedia.org

冒頭部分を抜粋すると…

Tomáš Mikolov is a Czech computer scientist working in the field of machine learning. He is currently a Research Scientist at Czech Institute of Informatics, Robotics and Cybernetics.

Mikolov has made several contributions to the field of deep learning and natural language processing. He is mostly known as the inventor of the famous Word2vec method of word embedding.

トマス・ミコロフは、機械学習の分野で活躍するチェコのコンピュータ科学者である。 現在、チェコ情報・ロボット・サイバネティクス研究所の研究員を務めています。

ミコロフは、ディープラーニング自然言語処理の分野でいくつかの貢献をしてきました。 彼は、有名な単語埋め込みのWord2Vecの発明者として知られています。

オリジナルの Word2Vec は ミコロフが Google 在籍時(?)に発表されましたが、 現在ではミコロフは Google を離れているようです*1

彼の Word2Vec の論文に関しては 次のような紹介記事があります。

hytae.hatenablog.com

この技術も 単語の埋め込みWord embedding) と呼ばれる「自然言語処理における一連の言語モデリングおよび特徴学習手法」に分類されるそうですが、 ここでいう「埋め込み」とは 数学的な埋め込み のことらしい。 気にしていると先に進めないのでひとまずは棚上げってことで進めます。


オリジナルの実装について

ミコロフが Google から離れたこともあってか、 現在オリジナルのword2vecの実装は Google Code Archive に追いやられています。またミコロフ自身も Githubソースコード を公開しています。

その他、npm にも オリジナルコードを含むパッケージが 多数存在してるので2〜3試してみたのですが、 一番クセが無いのは Googleアーカイブコードでした。 ソースをざっと見てみましたが… 意外にも古き良き (そして悪しき) Cプログラムでした。 macOS Big Sur/Xcode 12.3でコンパイルするための diffを末尾に掲載します。 (make を実行した時に妙なメッセージが出なくなるおまじない程度の修正ですが…)

この word2vecのソースコードには マニュアルが見当たりません。 (man page ぐらい書いてくれよ) が、Googleアーカイブには Word2Vec の実装に関する メモ があり、収録されている コマンドやデモ・スクリプトについて 簡単に説明されています。 オリジナル実装の貴重な情報源です。 翻訳 を用意しましたので参考にしてください。


学習のためのコマンド:word2vec

word2vecのソースコードには 都合5つのコマンドが収録されていますが、 一番重要なのは word2vec コマンドです。 オプションは次のとおり。

$ ./word2vec
ワードベクトル推定ツールキット v 0.1c

オプション: 
トレーニングのためのパラメータ: 
-train <file>
    モデルを訓練するために <file> のテキストデータを使用する
-output <file>
    結果の単語ベクトル/単語クラスタを保存するに <file> を使用する
-size <int>
    単語ベクトルのサイズを設定する。デフォルトは100。
-window <int>
    単語間の最大スキップ長を設定する。デフォルトは100。
-sample <float>
    単語の出現のしきい値を設定する。
    学習データ中に出現頻度の高い単語はランダムにダウンサンプリングされる。
    デフォルトは1e-3, 有効範囲は(0, 1e-5)
-hs <int>
    階層型ソフトマックスを使用する。デフォルトは0(使用しない)
-negative <int>
    ネガティブサンプリング値。
    デフォルトは5、一般的な値は 3 - 10です。(0 = 使用しない)
-threads <int>
    スレッドを使用する(デフォルトは12)
-iter <int>
   トレーニングのイテレーションを増やす。(デフォルトは5)
-min-count <int>
    指定された回数よりも少ない単語を破棄する。(デフォルトは5)
-alpha <float>
    学習率の初期値を設定する。
    デフォルトはスキップグラムの場合は0.025、CBOWの場合は0.05。
-classes <int>
    ワードベクトルではなく、ワードクラスを出力する。
    デフォルトのクラス数は 0 (ベクトルが書き込まれる)
-debug <int>
    デバッグモードを設定する。 
    デフォルトは 2。(トレーニング中の詳細情報を表示)
-binary <int>
    結果として得られるベクトルをバイナリモードで保存する。デフォルトは0(オフ)。
-save-vocab <file>
    ボキャブラリを <file> に保存する。
-read-vocab <file>
    ボキャブラリを <file> から読み込む。
    学習データから構築されない。
-cbow <int>
    連続 bag of words モデルを使用する。
    デフォルトは 1 (0 はskip-gram モデル)。

Examples:
./word2vec -train data.txt -output vec.txt -size 200 -window 5 -sample 1e-4 -negative 5 -hs 0 -binary 0 -cbow 1 -iter 3

$ 

word2vec コマンドは 入力のコーパスを学習して 単語毎のベクトルを生成します*2。 ここで言うコーパスとは普通の文章なのですが、このコマンドは わかち書き されていることを仮定しているので、 日本語文の場合は形態素解析機などを使って わかち書きした上でコマンドの入力とします*3


その他のコマンド

word2phrase コマンドは word2vec コマンドのプリプロセッサです。 単語ベクトルを生成する際に単語よりフレーズとして扱った方が良い場合、 例えば 'san francisco' を表現するためのベクトルは単語2つではなく、 'san_francisco' といった1つフレーズとして扱うために使用されます*4

distanceコマンドは 単語ベクトルの間の意味的距離を図るコマンドです。 下記のように "Enter word or sentence" のプロンプトで単語を入力すると その他の単語ベクトルとのコサイン距離を求め降順(意味的に近い順)に40個表示されます。

$ ./distance vectors.bin
Enter word or sentence (EXIT to break): france

Word: france  Position in vocabulary: 303

                                              Word       Cosine distance
------------------------------------------------------------------------
                                             spain      0.648269
                                             italy      0.621321
                                            french      0.614999
                                           germany      0.577397
                                          provence      0.565016
                                          ・・・
                                          philippe      0.486715
                                          brittany      0.484123
                                           austria      0.481296
                                           etienne      0.481071
                                          baudouin      0.480878
Enter word or sentence (EXIT to break): EXIT
$ 

コサイン類似度は2つのベクトルの角度を表す指標で 1から−1までの値を取ります。 ベクトルの角度がない(単語が一致する)場合は1、 ベクトルの角度が直角の場合は0になります。

word-analogyコマンドは 単語ベクトルの演算により意味的な類数をするコマンドです。 例えば vector(‘paris’) - vector('french’) + vector('berlin’) の演算は 次のような結果になります。

$ ./word-analogy vectors.bin
Enter three words (EXIT to break): paris france berlin

Word: paris  Position in vocabulary: 1055

Word: france  Position in vocabulary: 303

Word: berlin  Position in vocabulary: 1360

                                              Word              Distance
------------------------------------------------------------------------
                                           germany      0.705529
                                         reunified      0.579637
                                               gdr      0.552582
                                            russia      0.491140
                                         germanies      0.487093
                                          ・・・
                                           denmark      0.403809
                                   gleichschaltung      0.403377
                                               kpd      0.401438
                                       mecklenburg      0.399376
                                       sudetenland      0.399369
Enter three words (EXIT to break): EXIT
$ 

このコマンドは word2vec の紹介でよく語られる ベクトル演算による単語の類推をデモなのですが、 元のコーパスが十分に大きくないと期待通りの結果は出てくれないようです。 オリジナル実装に収録されているスクリプトを使うと論文で紹介されている vector(‘king’) - vector('man’) + vector('woman’) の演算結果はvector('queen’)にはなりません(vector('girl’)になります。

compute-accuracyコマンドは 単語ベクトルの品質を測るためのコマンドなんだそうですが、 この単語ベクトルの品質評価は様々な方法が提案されているそうなので、 本稿では割愛します*5

ちなみにオリジナル実装には コーパスの取得を含めたコマンドの実行環境を整えるデモ・スクリプトが付属しています。 各コマンドとスクリプトの対応は次のとおりです。

コマンド スクリプト
distance demo-word.sh, demo-phrases.sh
word-analogy demo-analogy.sh
compute-accuracy demo-word-accuracy.sh, demo-phrase-accuracy.sh
(クラスタリング) demo-classes.sh

ちなみに(クラスタリング)はword2vecコマンドを 単語のクラスタリングに使用しています。詳細はスクリプトメモ の「Word clustering(単語クラスタリング)」の項を参考にしてください。


学習済み日本語 word2vec データ

オリジナル実装に付属するデモスクリプトを使って、 英語文でのデモンストレーションばかりを見ても word2vec の効用は今ひとつピンと来ません。 ここは日本語文でも word2vec を試してみたいところですが、日本語コーパスわかち書き は悩ましいところ。そこで学習済み日本語 word2vec データを活用させてもらいます。

東北大学 乾・岡崎研究室ではWikipedia日本語版の全文を学習した日本語 word2vec データを公開しています。

www.cl.ecei.tohoku.ac.jp

20170201.tar.bz2 (2017年2月1日版, 1.3GB, 解凍後 2.6GB)をダウンロード・解凍してみたところ 以下のとおりバイナリとテキストの2種類のモデルデータが納められてました。

$ ls -l entity_vector/
total 5475416
-rw-r--r--@ 1 fujita  staff   830354941  2 17  2017 entity_vector.model.bin
-rw-r--r--@ 1 fujita  staff  1951880197  2 17  2017 entity_vector.model.txt
$ 

ミコロフの論文でも「学習精度を確保するためには億単位の単語数が必要」と書いてありましたが、 このデータはバイナリ・テキストともにGB単位の非常に大きなデータです。 オリジナル実装でもこのまま利用することができます。

$ ./distance entity_vector/entity_vector.model.bin
Enter word or sentence (EXIT to break): [アラン・チューリング]
・・・
Enter word or sentence (EXIT to break): EXIT
$ 

なお、Wikipediaの各ページのタイトルに関しては '[' と ']' で囲まれ、 空白は '_' に置き換えられていますので、ご注意ください。

大河ドラマ真田丸」を調べる

では word2vec がどんな単語が「類似性あり」と判断するか調べてみましょう。 元データが 20170201 のバックアップですので、 2016年の大河ドラマの「真田丸」に関連するキーワードについて、固有表現 (固有表現抽出を参照) に着目してリストアップしてみました。

まずドラマページ [真田丸_(NHK大河ドラマ)] ではドラマタイトル、 特に他の大河ドラマのタイトルが類似性が高いとされています。 また、大坂城の出城であった[真田丸]は、城郭と認識されたのか [熊本城]、[小谷城]、[姫路城]が類似性が高いとされています。

人物の方では、主役の[真田信繁]、兄の[真田信之]、さらに父の[真田昌幸] いずれも戦国時代の武将の名前がリストアップされていますが、 注意深く見ると[真田信繁]は豊臣方の、[真田信之]は徳川方の武将が多いように見えます。 また[真田昌幸]では織田信長家中の武将…と各々が活躍した時代が反映されているように感じますね。 次に役者の方をみると、 [真田信繁]役の[堺雅人]の場合は[佐藤隆太]と[藤原竜也]といった「基本は2枚目だがコメディもできる俳優」に見えます。 反対に[真田信之]役の[大泉洋]の場合は[ユースケ・サンタマリア]や[山口智充]といった 「基本はコメディだがシリアスもやる俳優」といったところでしょうか? [真田昌幸]役の[草刈正雄]は[京本政樹]、[多岐川裕美]、[田中麗奈]、[勝野洋] 、[阿部寛]と パッと見イメージしにくいのですが、無理矢理こじつけると「モデル上がりの俳優」ってことなのでしょうかね?

キーワードが人物である時に着目するべきことは、人物しかリストアップされないことと、 それから役名の中に俳優の名前が現れない、例えば[真田信繁]のリストに[堺雅人]は現れないことです。 この性質は脚本の[三谷幸喜]のリストを見れば一目瞭然で、 [宮藤官九郎]、[倉本聰]、[橋田壽賀子]、[北川悦吏子]、[ジェームス三木]、 [山田太一_(脚本家)]、[堤幸彦]、[菊田一夫]、[押井守]、[佐々木守]と 歴代の人気脚本家がリストアップされています。

次に真田一族の居城があった[上田市]を調べてみると、 [佐久市]、[伊那市]、[小諸市]、[千曲市]、[東御市]と 長野県下の近隣の市がリストアップされます。 居城の[上田城]で調べてみると、 [鳥取城]、[岐阜城]、[三木城]、[高遠城]、[浜松城]と 戦国史によく登場するお城がリストアップされます。 でも[大坂城]とか[江戸城]が登場しないのは何故なんでしょうか?

[真田丸_(NHK大河ドラマ)] では、 前半の見せ場だった[上田合戦]を調べると合戦のリストになり、 有名な[大坂冬の陣]、[賤ヶ岳の戦い]、[大坂夏の陣]、[山崎の戦い]を抑えて [小豆坂の戦い]、[姉川の戦い]、[月山富田城の戦い]といった地味な合戦が上位に来ています。

最後に分かりづらい年号ですが、 本能寺の変が起きた[1582年]に一番近いのは武田氏が滅亡した[1567年]です。 関ヶ原の戦いが起きた[1600年]に一番近いのは小田原征伐が起きた[1590年]です。 さらに大坂冬の陣が起きた[1614年]と大坂夏の陣が起きた[1615年]は 相互にもっとも類似していると出ています。(ちょっとこじつけ過ぎか?)

もちろん word2vec コマンドは各キーワードが出現するパターンを調べているだけで、 各キーワードが持つ意味を理解している訳ではないですが、 このような「ついついキーワード間の関係の意味づけ」を追いかけてしまうような特性、 これがミコロフの言う「単語ベクトルの面白い性質」ということなのでしょう。

以上


付録1.macOS Big Sur/Xcode 12.3でコンパイルするためのdiff
diff -ru word2vec/trunk/compute-accuracy.c word2vec-mac/compute-accuracy.c
--- word2vec/trunk/compute-accuracy.c 2016-03-18 13:03:48.000000000 +0900
+++ word2vec-mac/compute-accuracy.c   2021-01-11 10:43:11.000000000 +0900
@@ -16,7 +16,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <math.h>
-#include <malloc.h>
+#include <stdlib.h>
 #include <ctype.h>
 
 const long long max_size = 2000;         // max length of strings
@@ -26,7 +26,7 @@
 int main(int argc, char **argv)
 {
   FILE *f;
-  char st1[max_size], st2[max_size], st3[max_size], st4[max_size], bestw[N][max_size], file_name[max_size], ch;
+  char st1[max_size], st2[max_size], st3[max_size], st4[max_size], bestw[N][max_size], file_name[max_size]; //, ch;
   float dist, len, bestd[N], vec[max_size];
   long long words, size, a, b, c, d, b1, b2, b3, threshold = 0;
   float *M;
diff -ru word2vec/trunk/distance.c word2vec-mac/distance.c
--- word2vec/trunk/distance.c 2016-03-18 13:03:48.000000000 +0900
+++ word2vec-mac/distance.c   2021-01-11 10:41:43.000000000 +0900
@@ -15,7 +15,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <math.h>
-#include <malloc.h>
+#include <stdlib.h>
 
 const long long max_size = 2000;         // max length of strings
 const long long N = 40;                  // number of closest words that will be shown
@@ -28,7 +28,7 @@
   char file_name[max_size], st[100][max_size];
   float dist, len, bestd[N], vec[max_size];
   long long words, size, a, b, c, d, cn, bi[100];
-  char ch;
+  //char ch;
   float *M;
   char *vocab;
   if (argc < 2) {
diff -ru word2vec/trunk/word-analogy.c word2vec-mac/word-analogy.c
--- word2vec/trunk/word-analogy.c 2016-03-18 13:03:48.000000000 +0900
+++ word2vec-mac/word-analogy.c   2021-01-11 10:42:03.000000000 +0900
@@ -15,7 +15,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <math.h>
-#include <malloc.h>
+#include <stdlib.h>
 
 const long long max_size = 2000;         // max length of strings
 const long long N = 40;                  // number of closest words that will be shown
@@ -28,7 +28,7 @@
   char file_name[max_size], st[100][max_size];
   float dist, len, bestd[N], vec[max_size];
   long long words, size, a, b, c, d, cn, bi[100];
-  char ch;
+  //char ch;
   float *M;
   char *vocab;
   if (argc < 2) {


付録2.大河ドラマ「真田丸」関連キーワードのdistance
$ ./distance entity_vector/entity_vector.model.bin
Enter word or sentence (EXIT to break): [真田丸_(NHK大河ドラマ)]

Word: [真田丸_(NHK大河ドラマ)]  Position in vocabulary: 208717

                                              Word       Cosine distance
------------------------------------------------------------------------
                                    [八重の桜]      0.850641
                                 [軍師官兵衛]      0.827400
                  [平清盛_(NHK大河ドラマ)]      0.825276
                                       [花燃ゆ]      0.819338
               [風林火山_(NHK大河ドラマ)]      0.791861
                  [天地人_(NHK大河ドラマ)]      0.780095
                                       [龍馬伝]      0.768709
                                    [マッサン]      0.767875
               [功名が辻_(NHK大河ドラマ)]      0.739119
                                 [あさが来た]      0.729785
         [フルスイング_(テレビドラマ)]      0.722142
                                 [花子とアン]      0.720576
                                    [鈴木先生]      0.717524
               [おひさま_(テレビドラマ)]      0.714102
      [カーネーション_(テレビドラマ)]      0.708059
                     [篤姫_(NHK大河ドラマ)]      0.705406
            [動物戦隊ジュウオウジャー]      0.700339
                     [Mother_(テレビドラマ)]      0.697521
                                      [新選組!]      0.696299
        [つばさ_(2009年のテレビドラマ)]     0.694637
                                    [てっぱん]      0.693992
                                 [最高の離婚]      0.686887
                                 [TOUCH/タッチ]      0.683295
[ドラえもん_新・のび太と鉄人兵団_�Jiří     0.682352
                                 [ナカイの窓]      0.681161
                        [NHK連続テレビ小説]      0.679608
        [水野真紀の魔法のレストランR]      0.679500
                              [NHK大河ドラマ]      0.678539
               [逃げるは恥だが役に立つ]      0.677009
     [ドラえもん_のび太の宇宙英雄記]      0.676890
                        [にほんごであそぼ]      0.676332
                              [お台場新大陸]      0.675701
                              [梅ちゃん先生]      0.675567
[花ざかりの君たちへ_(テレビドラマ)][ピルトダウン人]     0.675254
                     [爆報!_THE_フライデー]        0.674606
  [ドラえもん_新・のび太の日本誕生]      0.674550
                      [67回NHK紅白歌合戦]     0.674473
                                   テレビ大阪      0.674378
            [坂の上の雲_(テレビドラマ)]      0.673822
Enter word or sentence (EXIT to break): [真田丸]

Word: [真田丸]  Position in vocabulary: 130833

                                              Word       Cosine distance
------------------------------------------------------------------------
                                            出城      0.740320
                                       [熊本城]      0.728834
                                       [小谷城]      0.724149
                                       [姫路城]      0.714244
                                         二ノ丸      0.714124
                                       [松本城]      0.708700
                                       [彦根城]      0.708108
                           [Category:豊臣秀吉]      0.707795
                                    [岸和田城]      0.706999
                           [福山城_(備後国)]      0.705762
                                       [二の丸]      0.701598
                                            出丸      0.700790
                                    [勝竜寺城]      0.700491
                                       [金沢城]      0.700444
                                       [玉縄城]      0.700341
                                       [滝山城]      0.697077
                                            本丸      0.696883
                                         三の丸      0.694887
                                         平山城      0.691086
                                    [名古屋城]      0.688279
                                       [川越城]      0.685610
                                          [淀城]      0.685132
                                         古戦場      0.685010
                                            山砦      0.683218
                                       [丸根砦]      0.682380
                                       [福岡城]      0.682332
                                       [鷲津砦]      0.681645
                                       [府内城]      0.681402
                                       [茨木城]      0.680548
                                       [仙台城]      0.677954
                           [高松城_(讃岐国)]      0.675755
                                         二の丸      0.675349
                                       [安土城]      0.675332
                                          [忍城]      0.675065
                                         天守閣      0.674914
                                       [岐阜城]      0.673553
                                          [本丸]      0.673221
                                            清洲      0.673103
                                       [掛川城]      0.671609
                                          [水城]      0.671606
Enter word or sentence (EXIT to break): [真田信繁]

Word: [真田信繁]  Position in vocabulary: 53057

                                              Word       Cosine distance
------------------------------------------------------------------------
                                            幸村      0.862280
                                            信繁      0.853500
                                    [黒田孝高]      0.851998
                                    [前田利家]      0.845007
                                    [後藤基次]      0.841422
                                    [大谷吉継]      0.833924
                                 [宇喜多秀家]      0.831085
                                    [真田昌幸]      0.830969
                                    [本多忠勝]      0.830236
                                    [浅井長政]      0.829288
                                    [竹中重治]      0.827986
                                    [丹羽長秀]      0.827290
                                       [堀秀政]      0.824391
                                    [石田三成]      0.824265
                                    [井伊直政]      0.823248
                                    [明智光秀]      0.821230
                                 [佐久間信盛]      0.820919
                                    [馬場信春]      0.820386
                                    [池田恒興]      0.819985
                                    [鳥居元忠]      0.817749
                                    [藤堂高虎]      0.816229
                                    [木村重成]      0.813626
                                    [直江兼続]      0.812626
                                 [小早川秀秋]      0.812217
                                    [長束正家]      0.811567
                                    [浅野長政]      0.810507
                                    [酒井忠次]      0.809801
                                    [細川幽斎]      0.809242
                                    [山県昌景]      0.807876
                              [長宗我部盛親]      0.806687
                                 [佐久間盛政]      0.806065
                                    [立花宗茂]      0.802603
                                    [織田信忠]      0.802597
                                    [黒田長政]      0.802305
                                       [森可成]      0.800703
                                    [織田信孝]      0.799144
                                    [柴田勝家]      0.798669
                                    [立花道雪]      0.798262
                                    [毛利勝永]      0.796287
                                    [水野勝成]      0.795799
Enter word or sentence (EXIT to break): [堺雅人]

Word: [堺雅人]  Position in vocabulary: 168294

                                              Word       Cosine distance
------------------------------------------------------------------------
                                    [佐藤隆太]      0.829818
                                    [藤原竜也]      0.823819
                              [佐藤健_(俳優)]      0.817278
                                       [向井理]      0.810610
                                    [萩原聖人]      0.808793
                                       [石黒賢]      0.804831
                                    [山田孝之]      0.803835
                                    [田中麗奈]      0.801961
                                    [市原隼人]      0.799150
                                    [栗山千明]      0.798809
                                 [松嶋菜々子]      0.794591
                                    [中谷美紀]      0.794233
                                 [石原さとみ]      0.790625
                                    [仲里依紗]      0.789875
                                    [本木雅弘]      0.789623
                                    [堀北真希]      0.789125
                                    [岡田将生]      0.786672
                                    [陣内孝則]      0.786410
                                    [唐沢寿明]      0.786037
                                       [山崎努]      0.785783
                                 [石田ゆり子]      0.785428
                                    [岡田准一]      0.784751
                                    [織田裕二]      0.784626
                                    [高橋克典]      0.784127
                                    [杏_(女優)]      0.783930
                                    [前田亜季]      0.783606
                                 [かたせ梨乃]      0.783165
                                    [谷村美月]      0.783153
                                       [橋爪功]      0.782846
                                    [小林稔侍]      0.782647
                                    [北川景子]      0.782442
                                    [溝端淳平]      0.781518
                                 [稲森いずみ]      0.781370
                                 [加藤ローサ]      0.780886
                                    [塚本高史]      0.780642
                                    [上野樹里]      0.780136
                          [中村獅童_(2代目)]     0.779944
                                    [真矢みき]      0.779365
                                    [生瀬勝久]      0.778443
                                    [成海璃子]      0.778381
Enter word or sentence (EXIT to break): [真田信之]

Word: [真田信之]  Position in vocabulary: 71834

                                              Word       Cosine distance
------------------------------------------------------------------------
                                    [結城秀康]      0.864722
                                    [細川忠興]      0.854418
                                    [松平忠直]      0.853225
                                    [前田利長]      0.849034
                                    [真田昌幸]      0.846276
                                    [松平信康]      0.843927
                                    [豊臣秀長]      0.839133
                                    [松平忠輝]      0.838586
                                    [浅野長政]      0.838264
                                    [徳川忠長]      0.836924
                                 [小笠原秀政]      0.836570
                                    [本多忠政]      0.836416
                                            忠政      0.835936
                                       [堀秀政]      0.834228
                                    [立花宗茂]      0.831016
                                    [北条氏照]      0.830443
                                    [松平広忠]      0.829907
                                    [黒田長政]      0.829375
                                    [吉川広家]      0.827719
                                    [池田輝政]      0.827295
                                    [前田利家]      0.826828
                                    [京極高次]      0.826813
                                            隆景      0.826811
                                    [羽柴秀勝]      0.823404
                                            輝元      0.822894
                                            信政      0.822387
                                    [織田信孝]      0.821835
                                    [織田信雄]      0.820363
                                            秀康      0.819313
                                    [本多正信]      0.818753
                                            信繁      0.818476
                                    [伊達輝宗]      0.818328
                                            藤孝      0.818125
                                    [毛利隆元]      0.817783
                                    [平岩親吉]      0.817510
                                    [浅野幸長]      0.817215
                                       [堀秀治]      0.817149
                                    [松平忠昌]      0.815690
                                    [黒田職隆]      0.814530
                                    [蒲生氏郷]      0.814355
Enter word or sentence (EXIT to break): [大泉洋]

Word: [大泉洋]  Position in vocabulary: 95697

                                              Word       Cosine distance
------------------------------------------------------------------------
               [ユースケ・サンタマリア]      0.847172
                                    [山口智充]      0.842746
                                 [佐藤江梨子]      0.839287
                                    [西田敏行]      0.828026
                                       [小栗旬]      0.822958
                                       [藤井隆]      0.822931
                                 [長澤まさみ]      0.822114
                                    [伊東四朗]      0.821836
                              [ラサール石井]      0.821569
                                    [内村光良]      0.817735
                                    [高田純次]      0.817491
                                    [広末涼子]      0.816757
                                    [久本雅美]      0.814944
                                       [安田顕]      0.812524
                                    [陣内智則]      0.811957
                                    [中村玉緒]      0.811861
                                    [香取慎吾]      0.811576
                                    [木村拓哉]      0.810266
                                    [板尾創路]      0.809218
                                    [石坂浩二]      0.809071
                                 [バカリズム]      0.806382
                                    [小池栄子]      0.805978
                                    [山田邦子]      0.805532
                                    [武田鉄矢]      0.805505
                                    [江口洋介]      0.805399
                                    [小倉優子]      0.805051
                                    [坂上二郎]      0.804709
                                 [松嶋菜々子]      0.804488
                                       [坂上忍]      0.803884
                                 [片岡鶴太郎]      0.802868
                                       [堺正章]      0.802248
                                    [織田裕二]      0.802003
                                          [優香]      0.801509
                                    [松村邦洋]      0.801336
                                       [関根勤]      0.801172
                                 [劇団ひとり]      0.800607
                                    [陣内孝則]      0.800257
                              [せんだみつお]      0.799715
                                    [舘ひろし]      0.799632
                     [宮川大輔_(タレント)]      0.799621
Enter word or sentence (EXIT to break): [真田昌幸]

Word: [真田昌幸]  Position in vocabulary: 52729

                                              Word       Cosine distance
------------------------------------------------------------------------
                                    [浅井長政]      0.889628
                                       [森長可]      0.888692
                                    [柴田勝家]      0.887071
                                    [吉川元春]      0.885952
                                    [北条氏邦]      0.885003
                                    [丹羽長秀]      0.880816
                                    [滝川一益]      0.880605
                  [佐竹義重_(十八代当主)]      0.878321
                                       [堀秀政]      0.877057
                                    [北条氏照]      0.875241
                                 [佐久間信盛]      0.874229
                                 [宇喜多秀家]      0.871974
                                    [立花宗茂]      0.869287
                                    [佐々成政]      0.868931
                                    [織田信孝]      0.868109
                                    [池田恒興]      0.867718
                                    [吉川広家]      0.866312
                                       [森可成]      0.865885
                                    [浅野長政]      0.865563
                                    [朝倉義景]      0.864799
                              [長宗我部盛親]      0.864381
                                    [織田信雄]      0.863931
                                    [今川義元]      0.863850
                                    [立花道雪]      0.863241
                                    [長束正家]      0.862811
                                    [前田利家]      0.862411
                                    [北条氏康]      0.861690
                                    [十河存保]      0.861266
                                    [伊達輝宗]      0.860470
                                    [北条高広]      0.860067
                                 [小早川秀秋]      0.859652
                                    [北条氏直]      0.859366
                                    [里見義堯]      0.858346
                                    [本庄繁長]      0.856125
                                 [小早川隆景]      0.855965
                                    [結城晴朝]      0.855387
                                    [筒井順慶]      0.854689
                                    [山県昌景]      0.854278
                                    [上杉景勝]      0.853994
                                    [北条氏綱]      0.853868
Enter word or sentence (EXIT to break): [草刈正雄]

Word: [草刈正雄]  Position in vocabulary: 194460

                                              Word       Cosine distance
------------------------------------------------------------------------
                                    [京本政樹]      0.809349
                                 [多岐川裕美]      0.806034
                                    [田中麗奈]      0.804275
                                       [勝野洋]      0.795097
                                       [阿部寛]      0.792035
                                    [田中邦衛]      0.791783
                                    [渡辺裕之]      0.789512
                                    [高橋克典]      0.786939
                                 [由美かおる]      0.786617
                                    [松坂慶子]      0.786271
                                 [かたせ梨乃]      0.785857
                                 [和久井映見]      0.785291
                                    [渡瀬恒彦]      0.784532
                                       [加藤剛]      0.783957
                                    [川谷拓三]      0.783735
                                    [宇津井健]      0.783284
                                    [大原麗子]      0.782354
                                       [宍戸錠]      0.782185
                                    [唐沢寿明]      0.781887
                                    [佐藤隆太]      0.781781
                                    [北村一輝]      0.781706
                                       [竜雷太]      0.781700
                                       [水谷豊]      0.780734
                                    [内藤剛志]      0.780645
                                          [瑛太]      0.780475
                                    [佐藤浩市]      0.780325
                              [佐藤健_(俳優)]      0.777771
                                    [池内淳子]      0.777584
                                    [菅原文太]      0.777021
                                    [小林稔侍]      0.776970
                                    [沢口靖子]      0.776846
                                    [柳葉敏郎]      0.776495
                                    [津川雅彦]      0.775650
                                    [高嶋政伸]      0.775082
                                    [石立鉄男]      0.774510
                                       [石黒賢]      0.773385
                                    [香川照之]      0.773220
                                       [山崎努]      0.773158
                                 [中条きよし]      0.772763
                                 [三田村邦彦]      0.772160
Enter word or sentence (EXIT to break): [三谷幸喜]

Word: [三谷幸喜]  Position in vocabulary: 62278

                                              Word       Cosine distance
------------------------------------------------------------------------
                                 [宮藤官九郎]      0.847801
                                       [倉本聰]      0.828014
                                 [橋田壽賀子]      0.813948
                                 [北川悦吏子]      0.804359
                           [ジェームス三木]      0.782101
                        [山田太一_(脚本家)]      0.779650
                                       [堤幸彦]      0.774029
                                    [菊田一夫]      0.772732
                                       [押井守]      0.769006
                                    [佐々木守]      0.765393
                                    [井上敏樹]      0.756454
                                       [早坂暁]      0.755188
                                    [岩井俊二]      0.748714
                                       [宮崎駿]      0.744259
                                 [井上ひさし]      0.743560
                                    [鴻上尚史]      0.742345
                                    [上原正三]      0.739719
                                    [向田邦子]      0.738351
                                    [蜷川幸雄]      0.736478
                                    [君塚良一]      0.731993
                                    [伊藤和典]      0.731116
                                    [野島伸司]      0.730984
                                    [大和屋竺]      0.729276
                                    [井筒和幸]      0.727722
                                       [細田守]      0.727141
                                 [石井ふく子]      0.726934
                                    [伊丹十三]      0.726323
                                    [市川森一]      0.725571
                                    [清水邦夫]      0.725172
                                       [橋本忍]      0.721844
                                    [金子修介]      0.720818
                                    [大林宣彦]      0.720543
                                       [花登筺]      0.719697
                                   アニメ監督      0.716220
                                       [北野武]      0.716118
                     [リリー・フランキー]      0.715990
                                    [竹中直人]      0.714659
                                    [樋口真嗣]      0.714394
                                    [久世光彦]      0.712585
                                       [伊上勝]      0.712067
Enter word or sentence (EXIT to break): [上田市]

Word: [上田市]  Position in vocabulary: 21341

                                              Word       Cosine distance
------------------------------------------------------------------------
                                       [佐久市]      0.873024
                                       [伊那市]      0.851494
                                       [小諸市]      0.851373
                                       [千曲市]      0.850226
                                       [東御市]      0.842370
                                       [青木村]      0.840791
                                       [飯田市]      0.837979
                                       [塩尻市]      0.828366
                                       [丸子町]      0.827832
                                       [辰野町]      0.825878
                                    [上伊那郡]      0.824890
                                       [小県郡]      0.823911
                                       [諏訪市]      0.820981
                                       [中野市]      0.818131
                                       [飯山市]      0.816464
                                       [長野市]      0.814474
                                       [岡谷市]      0.814004
                                    [上水内郡]      0.813308
                                       [松本市]      0.813192
                                    [東筑摩郡]      0.811427
                                    [下伊那郡]      0.808146
                                       [大町市]      0.803682
                                       [坂城町]      0.799765
                                       [木曽町]      0.799210
                                       [茅野市]      0.798991
                                    [駒ヶ根市]      0.796395
                                       [須坂市]      0.792879
                                    [安曇野市]      0.789478
                                       [信濃町]      0.789210
                                    [南安曇郡]      0.789018
                                       [高遠町]      0.788462
                                       [長和町]      0.785993
                           [高山村_(長野県)]      0.783720
                                       [木曽郡]      0.783370
                                    [上高井郡]      0.781338
                                       [飯綱町]      0.780839
                                       [真田町]      0.777769
                                    [北佐久郡]      0.771381
                                       [小谷村]      0.771205
                                    [小布施町]      0.770121
Enter word or sentence (EXIT to break): [上田城]

Word: [上田城]  Position in vocabulary: 79257

                                              Word       Cosine distance
------------------------------------------------------------------------
                                       [鳥取城]      0.852216
                                       [岐阜城]      0.849356
                                       [三木城]      0.849105
                                       [高遠城]      0.845153
                                       [浜松城]      0.843289
                                          [忍城]      0.839791
                           [高松城_(備中国)]      0.839502
                                       [岩村城]      0.837147
                                    [真田昌幸]      0.836247
                                    [佐和山城]      0.836211
                                       [大垣城]      0.835653
                                       [二俣城]      0.835134
                                       [伊丹城]      0.831016
                                       [小松城]      0.827549
                                       [大津城]      0.826306
                                       [高槻城]      0.826240
                                       [長篠城]      0.822233
                                    [二本松城]      0.821886
                                       [掛川城]      0.819836
                                       [上月城]      0.819801
                                    [島津家久]      0.817774
                                       [沼田城]      0.814995
                                    [小田原城]      0.813866
                                 [月山富田城]      0.811999
                                    [立花山城]      0.811840
                                    [勝竜寺城]      0.811324
                                       [清洲城]      0.810574
                                    [松井田城]      0.809341
                                       [七尾城]      0.809190
                                    [佐々成政]      0.808459
                                    [滝川一益]      0.808450
                                 [佐久間信盛]      0.805699
                                       [有岡城]      0.804309
                                       [小谷城]      0.803942
                                       [森長可]      0.803854
                                       [飫肥城]      0.803733
                                       [箕輪城]      0.803318
                                       [桑名城]      0.802203
                           [田辺城_(丹後国)]      0.799411
                                    [高天神城]      0.798767
Enter word or sentence (EXIT to break): [上田合戦]

Word: [上田合戦]  Position in vocabulary: 142642

                                              Word       Cosine distance
------------------------------------------------------------------------
                              [小豆坂の戦い]      0.830107
                                 [姉川の戦い]      0.820177
                        [月山富田城の戦い]      0.810359
                                 [大坂冬の陣]      0.808880
                              [賤ヶ岳の戦い]      0.802219
                                 [大坂夏の陣]      0.801875
                                 [山崎の戦い]      0.799450
                                    [大坂の役]      0.796623
                                    [会津戦争]      0.796386
                           [三方ヶ原の戦い]      0.796324
                              [戸次川の戦い]      0.795473
                              [伏見城の戦い]      0.794881
                     [小牧・長久手の戦い]      0.793958
                     [天王寺・岡山の戦い]      0.793225
                                    [大坂の陣]      0.792602
                              [石垣原の戦い]      0.791799
                                   大坂夏の陣      0.790713
                                 [蟹江城合戦]      0.782472
                                    [奥州合戦]      0.782259
                              [教興寺の戦い]      0.780309
                  [野田城・福島城の戦い]      0.779296
                                    [四国攻め]      0.778365
                              [慶長出羽合戦]      0.778106
                                 [厳島の戦い]      0.777675
                              [上月城の戦い]      0.776749
                                    [北越戦争]      0.775847
                                 [長篠の戦い]      0.773696
                        [加治田・兼山合戦]      0.773451
                           [甲州勝沼の戦い]      0.772457
                              [桶狭間の戦い]      0.765290
                              [白河口の戦い]      0.765117
                                 [国府台合戦]      0.764990
                              [道明寺の戦い]      0.764268
                                 [船岡山合戦]      0.762874
                              [田辺城の戦い]      0.762374
                                    [紀州征伐]      0.761690
                                 [耳川の戦い]      0.760473
                                    [会津征伐]      0.760299
                              [三増峠の戦い]      0.760033
                                 [天狗党の乱]      0.759361
Enter word or sentence (EXIT to break): [1582]

Word: [1582]  Position in vocabulary: 13930

                                              Word       Cosine distance
------------------------------------------------------------------------
                                         [1567]     0.871124
                                         [1584]     0.869043
                                         [1581]     0.856171
                                         [1587]     0.855367
                                         [1575]     0.851390
                                         [1578]     0.846633
                                         [1585]     0.844765
                                         [1572]     0.844028
                                         [1541]     0.842195
                                           15820.841818
                                         [1577]     0.840910
                                         [1579]     0.839901
                                         [1560]     0.839451
                                         [1583]     0.838247
                                         [1576]     0.837940
                                         [1551]     0.835917
                                         [1586]     0.834452
                                         [1569]     0.834166
                                         [1574]     0.832817
                                         [1568]     0.831446
                                         [1589]     0.830784
                                         [1562]     0.824858
                                         [1571]     0.823303
                                         [1548]     0.820335
                                         [1561]     0.817914
                                         [1573]     0.816230
                                         [1570]     0.816178
                                         [1564]     0.815748
                                         [1546]     0.814555
                                         [1554]     0.813623
                                         [1593]     0.813225
                                         [1563]     0.812475
                                         [1565]     0.811689
                                         [1591]     0.808009
                                         [1588]     0.804201
                                         [1555]     0.803827
                                         [1566]     0.803808
                                         [1598]     0.802000
                                         [1552]     0.799705
                                         [1549]     0.798940
Enter word or sentence (EXIT to break): [1600]

Word: [1600]  Position in vocabulary: 11381

                                              Word       Cosine distance
------------------------------------------------------------------------
                                         [1590]     0.840695
                                         [1615]     0.822067
                                         [1583]     0.819413
                                         [1584]     0.818799
                                         [1595]     0.813488
                                         [1587]     0.808977
                                         [1602]     0.804080
                                         [1592]     0.801207
                                         [1585]     0.800537
                                         [1599]     0.800520
                                         [1598]     0.800442
                                         [1601]     0.795140
                                         [1588]     0.793869
                                         [1570]     0.792645
                                         [1582]     0.792580
                                         [1586]     0.789530
                                         [1560]     0.787423
                                         [1581]     0.787366
                                         [1596]     0.787313
                                         [1614]     0.787291
                                         [1593]     0.786871
                                         [1562]     0.785282
                                         [1589]     0.784301
                                         [1597]     0.780177
                                         [1575]     0.779594
                                         [1591]     0.779534
                                         [1580]     0.778075
                                         [1577]     0.777516
                                         [1561]     0.774325
                                         [1578]     0.773667
                                         [1594]     0.770959
                                         [1605]     0.770836
                                         [1572]     0.768102
                                         [1608]     0.766482
                                         [1604]     0.766143
                                         [1568]     0.763673
                                         [1540]     0.761703
                                         [1603]     0.759373
                                         [1632]     0.759193
                                         [1573]     0.757969
Enter word or sentence (EXIT to break): [関ケ原町]

Word: [関ケ原町]  Position in vocabulary: 76997

                                              Word       Cosine distance
------------------------------------------------------------------------
                                    [南越前町]      0.708150
                                       [大野市]      0.705391
                                       [足柄峠]      0.698684
                                            墨俣      0.695876
                                       [不破郡]      0.693560
                                       [伊那谷]      0.685688
                           [和田峠_(長野県)]      0.678445
                                 [倶利伽羅峠]      0.676838
                                       [垂井町]      0.675981
                                       [小仏峠]      0.670487
                                       [敦賀市]      0.667752
                                    [上野原市]      0.663754
                                          [中濃]      0.662866
                                    [生駒山地]      0.662561
                                       [只見町]      0.661956
                                    [揖斐川町]      0.661821
                                    [長野盆地]      0.660612
                                       [美濃市]      0.660384
                                 [会津美里町]      0.659184
                                    [国道156]     0.657741
                                         中津川      0.656688
                                          [屋島]      0.656632
                                       [塩尻市]      0.656036
                                       [恵那市]      0.655065
                                       [籠坂峠]      0.654692
                                       [天川村]      0.654580
                              [上村_(長野県)]      0.653949
                                    [木ノ芽峠]      0.653118
                                       [親不知]      0.651887
                                       [笠松町]      0.650014
                                    [木曽地域]      0.649544
                                       [本宮市]      0.647530
                                    [諏訪盆地]      0.647047
                                       [禅定道]      0.646896
                                       [笹子峠]      0.646397
                           [大野郡_(福井県)]      0.645612
                                    [丹波山村]      0.644715
                                       [坂井市]      0.643866
                                       [羽咋市]      0.643366
                                       [加茂郡]      0.643256
Enter word or sentence (EXIT to break): [関ヶ原の戦い]

Word: [関ヶ原の戦い]  Position in vocabulary: 8836

                                              Word       Cosine distance
------------------------------------------------------------------------
                                    [大坂の陣]      0.881696
                     [小牧・長久手の戦い]      0.851104
                                    [大坂の役]      0.850898
                                 [小田原征伐]      0.841286
                                 [大坂夏の陣]      0.830540
                              [賤ヶ岳の戦い]      0.810479
                              [桶狭間の戦い]      0.809550
                                 [大坂冬の陣]      0.805582
                                         関ヶ原      0.798661
                                 [山崎の戦い]      0.782722
                                    [九州征伐]      0.772222
                                関ヶ原の戦い      0.767118
                                    [承久の乱]      0.761580
                                    [奥州合戦]      0.759930
                              [戸次川の戦い]      0.759800
                           [文禄・慶長の役]      0.759067
                                 [長篠の戦い]      0.758771
                           [三方ヶ原の戦い]      0.756944
                                 [厳島の戦い]      0.756609
                                    [九州平定]      0.754406
                                 [本能寺の変]      0.751754
                                   大坂夏の陣      0.746492
                              [伏見城の戦い]      0.745927
                              [九戸政実の乱]      0.745615
                                    [戊辰戦争]      0.744409
                                    [上田合戦]      0.734638
                              [慶長出羽合戦]      0.733284
                                 [姉川の戦い]      0.732787
                                    [文禄の役]      0.726051
                                            西軍      0.725281
                              [一ノ谷の戦い]      0.725120
                                       [徳川氏]      0.724901
                                    [島原の乱]      0.724819
                                    [上杉景勝]      0.723127
                              [沖田畷の戦い]      0.722916
                        [加治田・兼山合戦]      0.719709
                                    [石山合戦]      0.717034
                                 [観応の擾乱]      0.715840
                                    [四国攻め]      0.715689
                        [鳥羽・伏見の戦い]      0.715559
Enter word or sentence (EXIT to break): [1614]

Word: [1614]  Position in vocabulary: 20257

                                              Word       Cosine distance
------------------------------------------------------------------------
                                         [1615]     0.865162
                                         [1591]     0.860337
                                         [1611]     0.859098
                                         [1613]     0.858774
                                         [1623]     0.858637
                                         [1612]     0.858610
                                         [1610]     0.849760
                                         [1602]     0.848271
                                         [1586]     0.848025
                                         [1588]     0.846918
                                         [1589]     0.844200
                                         [1608]     0.843631
                                         [1609]     0.842249
                                         [1604]     0.840114
                                         [1603]     0.839589
                                         [1597]     0.838903
                                         [1637]     0.838608
                                         [1621]     0.837954
                                         [1672]     0.837648
                                         [1587]     0.835050
                                         [1598]     0.833399
                                         [1634]     0.832883
                                         [1590]     0.832396
                                         [1605]     0.830919
                                         [1601]     0.830424
                                         [1584]     0.829095
                                         [1592]     0.828330
                                         [1622]     0.828188
                                         [1632]     0.828161
                                         [1635]     0.827146
                                         [1585]     0.827070
                                         [1617]     0.826413
                                         [1619]     0.826360
                                         [1639]     0.825553
                                         [1638]     0.824017
                                         [1583]     0.823912
                                         [1606]     0.822882
                                         [1599]     0.820057
                                         [1641]     0.819394
                                         [1643]     0.819274
Enter word or sentence (EXIT to break): [1615]

Word: [1615]  Position in vocabulary: 18770

                                              Word       Cosine distance
------------------------------------------------------------------------
                                         [1614]     0.865162
                                         [1596]     0.864532
                                         [1602]     0.863315
                                         [1592]     0.860134
                                         [1591]     0.855674
                                         [1616]     0.852244
                                         [1597]     0.850820
                                         [1612]     0.848244
                                         [1598]     0.847103
                                         [1601]     0.844938
                                         [1611]     0.842920
                                         [1587]     0.837137
                                         [1593]     0.836945
                                         [1603]     0.836894
                                         [1610]     0.836832
                                         [1588]     0.836775
                                         [1613]     0.836743
                                         [1594]     0.836655
                                         [1589]     0.836058
                                         [1583]     0.835774
                                         [1605]     0.835619
                                         [1599]     0.835035
                                         [1623]     0.833858
                                         [1643]     0.832430
                                         [1638]     0.829741
                                         [1617]     0.827716
                                         [1585]     0.827511
                                         [1586]     0.827284
                                         [1604]     0.825798
                                         [1590]     0.825550
                                         [1595]     0.825356
                                         [1633]     0.824429
                                         [1573]     0.824042
                                         [1624]     0.823928
                                         [1606]     0.822988
                                         [1609]     0.822239
                                         [1600]     0.822067
                                         [1584]     0.820829
                                         [1608]     0.820579
                                         [1619]     0.819566
Enter word or sentence (EXIT to break): [大坂城]

Word: [大坂城]  Position in vocabulary: 17705

                                              Word       Cosine distance
------------------------------------------------------------------------
                                       [伏見城]      0.866872
                                       [江戸城]      0.866639
                                       [駿府城]      0.853587
                                         大坂城      0.849981
                                       [二条城]      0.816748
                                    [小田原城]      0.811317
                                       [岐阜城]      0.807676
                                    [佐和山城]      0.784947
                                       [大垣城]      0.772539
                                       [鳥取城]      0.766673
                                         江戸城      0.763479
                                       [浜松城]      0.763274
                                       [伊丹城]      0.758546
                                    [宇都宮城]      0.758494
                                         西の丸      0.757409
                                       [富山城]      0.757330
                                    [多聞山城]      0.756187
                                       [若松城]      0.750989
                                       [川越城]      0.749303
                                       [三木城]      0.746179
                                       [広島城]      0.743387
                                       [安土城]      0.741307
                                            本丸      0.741182
                                            陣所      0.739956
                                       [岡山城]      0.739198
                                       [高槻城]      0.738477
                                       [水戸城]      0.737631
                                       [山形城]      0.736139
                                    [二本松城]      0.734716
                                       [尼崎城]      0.732571
                                       [古河城]      0.731697
                                 [石山本願寺]      0.731335
                                       [清洲城]      0.731308
                                       [長岡城]      0.731267
                                    [春日山城]      0.731238
                                       [岩槻城]      0.730846
                                         二の丸      0.730584
                                       [岡崎城]      0.730406
                                    [岸和田城]      0.727810
                                       [小諸城]      0.724366
Enter word or sentence (EXIT to break): [大坂の陣]

Word: [大坂の陣]  Position in vocabulary: 20364

                                              Word       Cosine distance
------------------------------------------------------------------------
                                    [大坂の役]      0.929648
                                 [大坂夏の陣]      0.905435
                     [小牧・長久手の戦い]      0.887993
                              [関ヶ原の戦い]      0.881696
                                 [大坂冬の陣]      0.880892
                                 [小田原征伐]      0.842685
                              [賤ヶ岳の戦い]      0.827607
                           [文禄・慶長の役]      0.826194
                                   大坂夏の陣      0.809155
                                 [長篠の戦い]      0.808281
                                    [九州平定]      0.805219
                                    [文禄の役]      0.802838
                                 [姉川の戦い]      0.800240
                           [三方ヶ原の戦い]      0.793948
                                         関ヶ原      0.793667
                                    [上田合戦]      0.792602
                                    [九州征伐]      0.790378
                              [戸次川の戦い]      0.787284
                              [桶狭間の戦い]      0.785158
                                 [山崎の戦い]      0.783573
                              [伏見城の戦い]      0.776076
                                    [奥州合戦]      0.773755
                                    [島原の乱]      0.771204
                              [沖田畷の戦い]      0.769704
                              [一ノ谷の戦い]      0.768712
                                 [厳島の戦い]      0.764277
                        [月山富田城の戦い]      0.763847
                     [天王寺・岡山の戦い]      0.762107
                                    [三木合戦]      0.758249
                        [鳥羽・伏見の戦い]      0.755719
                              [九戸政実の乱]      0.755190
                                    [会津戦争]      0.750164
                                    [石山合戦]      0.749404
                              [慶長出羽合戦]      0.746751
                                    [戊辰戦争]      0.745568
                                    [上杉景勝]      0.745289
                                    [紀州征伐]      0.744768
                                    [四国攻め]      0.744572
                                    [慶長の役]      0.742148
                                    [会津征伐]      0.740837
Enter word or sentence (EXIT to break): [真田丸の戦い]

Word: [真田丸の戦い]  Position in vocabulary: 454193

                                              Word       Cosine distance
------------------------------------------------------------------------
                              [一言坂の戦い]      0.688066
                              [七尾城の戦い]      0.687602
                              [手取川の戦い]      0.675760
                                 [粟津の戦い]      0.672440
                        [野田・福島の戦い]      0.661199
                           [信貴山城の戦い]      0.659862
                              [ドゥナの戦い]      0.655745
                                 [須々万沼城]      0.653602
                              [野良田の戦い]      0.652459
                              [南原城の戦い]      0.652226
                    [天王寺の戦い_(1576年)]     0.650776
                              [岩村城の戦い]      0.650516
                  [喜連川五月女坂の戦い]      0.648556
                                 [稲生の戦い]      0.647997
                     [ラールソートの戦い]      0.646685
                              [末森城の戦い]      0.646324
                           [伊集院頼久の乱]      0.645752
                                    [大崎合戦]      0.645676
                                    [堅田合戦]      0.645293
                                 [赤塚の戦い]      0.645071
                              [村木砦の戦い]      0.643145
                              [布部山の戦い]      0.642102
                           [稲葉山城の戦い]      0.640575
                                 [上京の戦い]      0.640390
                                 [六羽川合戦]      0.639293
                                    [上村合戦]      0.638805
                                    [横田高松]      0.637634
                              [太平寺の戦い]      0.637571
                              [中尾城の戦い]      0.636992
                              [尻垂坂の戦い]      0.635935
                                 [三船山合戦]      0.635824
                                 [蟹江城合戦]      0.634581
                                 [忍城の戦い]      0.633908
                              [立河原の戦い]      0.633376
                        [有田中井手の戦い]      0.633342
                        [八尾・若江の戦い]      0.632827
                              [高屋城の戦い]      0.631499
                  [野田城・福島城の戦い]      0.631484
                              [魚津城の戦い]      0.631203
           [スモレンスクの戦い_(1941年)]     0.629926
Enter word or sentence (EXIT to break):EXIT
$ 

*1:彼の名前でググったところ、Quora で次のような質問を見つけました。

www.quora.com

で、返答を読んでいると、ミコロフと面識のある人から次のようなコメントが出ていました。

I had the chance to talk to him once, and he spoke a bit about Google. One thing he criticized what that Google was too shy to use his models in production. For example Mikolov thought that word embeddings could be used in Google translate to propose other translations. But Google was worried about proposing wrong translation.

私は一度彼と話す機会があり、彼はGoogleについて少し話しました。 彼が批判していたことの一つは、Googleが彼のモデルを本番で使うのを恥ずかしがっていることでした。 例えば、ミコロフはGoogle翻訳で単語のエンベッディングを使えば、他の翻訳を提案できると考えていました。 しかし、Googleは間違った翻訳を提案することを心配していました。

つまり、Word2Vec がアルゴリズムとしてはあまりに単純すぎるし、 このアルゴリズムが「何故そのような(好ましい)結果を出すのか?」 ミコロフ自身にも説明できなかったことを Google は重くみていたようですね。

*2:このベクトル生成には機械学習が使われているそうです。 word2vecではどのような学習が行われているのか解説する記事は多数ありますが、 次の記事が参考文献としてよく登場するように思います。

Word2Vec のニューラルネットワーク学習過程を理解する

word2vecのソースを読んでみた

絵で理解するWord2vecの仕組み

オプションにも登場する「ネガティブサンプリング」と 「階層型ソフトマックス」は機械学習の際の最適化手法なんだそうです。 これも深入りすると二度と再浮上できそうにないので本項では割愛します(笑)

それから機械学習なのに GPGPUなんぞを使わなくとも それなりの時間で計算できるのが word2vec の特徴のひとつなんだそうです。詳細は 「word2vec の各種実装の速度比較」 をご覧ください。

*3:日本語文の場合、 この「わかち書き」によって word2vec の精度が変わってくるそうです。 詳細は 「学習済み日本語word2vecとその評価について」 で解説されています。気になる方はご一読を。

*4:同様のニーズは日本語文でも発生します。

例えば固有表現の事例としてよく掲げられる「福島第一原子力発電所」を形態素解析すると 「[福島][第][一][原子][力][発電][所]」という7つの単語に分割されてしまいます。

これを1つの固有名詞として扱う需要はあると思うのですが、 そのような word2phrase の利用事例は今のところ見つけられていません。 論文「日本語単語ベクトルの構築とその評価」 において…

単語の分割単位の問題は、word2vec とともに公開されている word2phrase というツールを活用する方法や、 分割された単語の品詞に着目して一定のルールで単語を再結合する方法が考えられる。

と言う記述を発見しただけです。他にもっと一般的な解決策があるのかな?

*5:詳細は 「学習済み日本語word2vecとその評価について」 をご覧ください。