Word2vec

Word2vecは、単語の埋め込みを生成するために使用される一連のモデル群である。これらのモデルは、単語の言語コンテキストを再構築するように訓練された浅い2層ニューラルネットワークであり、大きなコーパスを受け取って一つのベクトル空間を生成する。このベクトル空間は典型的には数百次元からなり、コーパスの個々の単語はベクトル空間内の個々のベクトルに割り当てられる。コーパス内で同じコンテキストを共有する単語ベクトルは、ベクトル空間内の近くに配置される。 Word2vecは、Googleのトマス・ミコロフ率いる研究者チームによって2013年に作成および公開され、特許を取得した。アルゴリズムは他の研究者によって分析され、説明された。Word2vecアルゴリズムを使用して作成された埋め込みベクトルには、潜在的意味分析などの以前のアルゴリズムと比べていくつかの利点がある。 Word2vecでは、CBoW（continuous bag-of-words）モデルおよびskip gramモデルという二つのモデル構造のいずれかを使用し、単語の分散表現を生成する。 CBoWモデルでは、周囲のコンテキスト単語から現在の単語を予測する。コンテキスト単語の順序は問わない。skip-gramモデルでは、現在の単語を使用して、周囲のコンテキスト単語を予測する。現在の単語に近ければ近いほど、コンテキスト単語の重みを大きくする。 著者のメモによれば、skip-gramモデルはCBOWモデルと比較すると低速ではあるが、頻度の低い単語に対しては有用である。 Word2vecの訓練の結果はパラメータ化の影響を受ける場合がある。以下に、いくつかの重要なパラメータを列挙する。 Word2vecモデルは、階層的ソフトマックス法またはネガティブサンプリング法、ないしその両者によって訓練することができる。 モデルが最大化しようとする条件付き対数尤度を近似するために、階層的ソフトマックス法はハフマンツリーを使用して計算を減らす。一方、ネガティブサンプリング法は、サンプリングされたネガティブインスタンスの対数尤度を最小化することにより、最大化問題に取り組む。 著者によると、階層的ソフトマックス法は頻度の低い単語に対してより効果的であり、ネガティブサンプリングは頻度の高い単語や低次元ベクトルでより効果的である。トレーニングエポックが増えるにつれて、階層的ソフトマックス法は役に立たなくなる。 頻度の高い単語は、ほとんど情報を提供しない。頻度が特定のしきい値を超える単語は、サブサンプリングしてトレーニング速度を上げることができる。 次元が高いほど単語の埋め込みの品質が向上するが、ある程度以上次元が増えると、そのメリットは逓減する。通常、ベクトルの次元数は100〜1,000に設定される。 対象となる単語の前後いくつまでの単語がコンテキスト単語として含まれるかは、コンテキストウィンドウのサイズによって決定する。筆者らによるコンテキストウインドウのサイズの推奨値は、スキップグラムの場合は10、CBOWの場合は5である。 （個別の単語ではなく）ドキュメント全体から埋め込みを構築するためのword2vecの拡張が提案されている。この拡張は、paragraph2vecまたはdoc2vecと呼ばれ、C、PythonおよびJava / Scalaで実装された。JavaおよびPythonでの実装では、新しい初見の文書に対する埋め込みの推論もサポートしている。 バイオインフォマティクスでの利用のために、生物学的配列（例：DNA、RNA、およびタンパク質）におけるn-gramのための単語ベクトルの拡張が、AsgariとMofradによって提案された。 バイオベクター（BioVec）はタンパク質（アミノ酸配列）に対するタンパク質ベクター（ProtVec）、遺伝子配列に対する遺伝子ベクター（GeneVec）といった生物学的配列の総称であり、プロテオミクスおよびゲノミクスにおける機械学習の実装において幅広く用いられている。BioVectorsが生化学的および生物物理学的解釈に基づいて生物学的配列を分類できることが示唆されている。 同様の変法であるdna2vecは、Needleman-Wunsch類似度スコアとdna2vecにおける単語ベクトルのコサイン類似度との間に相関があることが示されている。 構造化されていない放射線医学レポートの密なベクトル表現を作成するための単語ベクトルの拡張は、Banerjeeらによって提案された。 大規模コーパスではあまり使用されていなかった単語も含め、放射線科医の好みのスタイルに応じて同義語や関連語を使用できる。未知の単語や語彙外（OOV）の単語、形態学的に類似した単語をどのように処理するかは、Word2vecモデルの最大の課題の一つであり、Word2vecモデルでは初見の単語に対してランダムなベクトルを割り当ててしまう。 Intelligent Word Embedding (IWE) は、Word2vecにセマンティックディクショナリマッピングテクニックを組み合わせて、臨床テキストからの情報抽出に取り組む。臨床テキストには、口語表現の曖昧さ、語彙のバリエーション、フリーテキストのナラティブスタイルのあいまいさ、語彙のバリエーション、非文法的かつ簡潔な語句の使用、単語の順序に恣意性、および略語と頭字語の頻出などがみられる。 特に興味深いことに、単一機関で訓練されたIWEモデルが他の機関のデータセットに上手く変換されており、施設に依存しない一般性が示された。 word2vecフレームワークで単語の埋め込み学習が成功する理由はよくわかっていない。GoldbergとLevyは、word2vec目的関数が類似のコンテキストで発生する単語に類似の埋め込み（コサイン類似度で測定）をもたらすことを指摘している。これはJRファースの分布仮説と一致する。しかし、彼らはこの説明は「非常に波打つ」ものであり、より正式な説明が望ましいと主張している。 レヴィら（2015）は、下流のタスクにおけるword2vecまたは同様の埋め込みの優れたパフォーマンスの多くは、モデル自体の結果ではなく、特定のハイパーパラメーターの選択の結果であることを示している。これらのハイパーパラメータをより「従来の」アプローチに転送すると、ダウンストリームタスクで同様のパフォーマンスが得らる。アロラらはword2vecと関連アルゴリズムを、テキストの単純な生成モデルの推論を実行するものとして説明している。これには、対数線形トピックモデルに基づくランダムウォーク生成プロセスが含まれる。 彼らはこれを使用して、類推を解決するための使用を含め、単語の埋め込みのいくつかの特性を説明する。 単語埋め込みアプローチは、単語間の複数の異なる程度の類似性を取り込むことができる。ミコロフ等（2013）は、意味論的および構文的パターンがベクトル演算を使用して再現できることを発見した。「'男→女の関係'と'兄弟→姉妹の関係'は同じ」などのパターンは、これらの単語のベクトル表現に対する代数演算によって生成できる。すなわち、「兄弟」-「男性」+「女性」のベクトル表現が「姉妹」のベクトル表現にとても近い結果を生成する。このような関係は、さまざまな意味関係（国-資本など）と構文関係（現在形-過去形など）に対して生成できる。 ミコロフらは上記の意味論的および構文的パターンを引き出すword2vecモデルの品質を評価するアプローチを開発した。モデルの精度をテストするためのベンチマークとして使用する、8,869の意味関係と10,675の構文関係のセットを開発した。 ベクトルモデルの品質を評価するとき、ユーザーはword2vecに実装されているこの精度テストを利用するか、モデルを構成するコーパスにとって意味のある独自のテストセットを開発できる。このアプローチは、特定のテスト単語に最も類似している単語は直感的にもっともらしいと主張するだけではなく、より難しいテストも提供できる。 異なるモデルパラメータと異なるコーパスサイズを使用すると、word2vecモデルの品質に大きく影響する可能性がある。精度は、モデル構造（CBoWモデルまたはSkip-gramモデル）の選択、トレーニングデータセットの増加、ベクトルの次元数の増加、アルゴリズムで考慮される単語のウィンドウサイズの増加など、いくつかの方法で改善できる。こうした改善策のそれぞれには、計算の複雑さが増してモデル生成時間が増加するというコストが伴う。 大規模なコーパスと高次元を使用するモデルでは、skip-gramモデルで最も高い精度が得られ、ほとんどの場合における構文精度だけでなく意味論的関係の精度も最大化する。ただし、CBoWでも低い計算コストで同様の精度の結果を得ることができる。 使用される単語の数が増えるほど、また次元の数が増えるほど、精度は全体的に向上する。ミコロフらは、トレーニングデータの量を2倍にすると、計算の複雑さが増加し、ベクトルの次元数を2倍にすることに相当することを報告した。 Altszylerらは、異なるコーパスサイズの2つのセマンティックテストでWord2vecのパフォーマンスを調査し、Word2vecの学習曲線が急峻であることを発見した。中規模から大規模のコーパス（1,000万語以上）では別の単語埋め込み手法（LSA）よりも優れていたが、小規模のコーパスでは、LSAの方が優れていた。さらに、最適なパラメータ設定はタスクとコーパスに依存することを示した。とはいえ、中規模のコーパスを用いたskip-gramの場合、次元数50、ウィンドウサイズ15および負のサンプル10が適切なパラメーター設定のようであった。 C C＃ Python（TensorFlow） Python（Gensim） Java / Scala Wikipedia2Vec オートエンコーダ Document-term matrix Feature extraction Feature learning ニューラル言語モデル ベクトル空間モデル Thought vector fastText GloVe Normalized compression distance