word2vec


Screenshot of ja.wikipedia.org

word2vec は tensorflow を使って構築された2層のRNN(再帰型ニューラルネットワーク)です。vecは vector ベクトル、次元数のことです。自然言語処理で、単語の穴埋め問題で驚異的な正解率を達成しています。wikipediaなどの膨大な量の文章を機械学習することにより、単語の穴埋めタスクを正確に処理することができます。文脈中の他の単語から当該部分に表れるべき単語の性質を計算することができます。単語の性質は、100~1000次元のパラメーターで表現されます。これを「分散表現」といいます。

例えば、apple という単語を300次元のベクトルで表現すると、

apple=[d1, d2, d3 ,d4 ,d5 ,,,d300]

というように、アップルという単語を300個のパラメーターで機械学習することになります。コンピューターは、リンゴを食べたことはありませんが、膨大な文章を読み込んで、apple という単語が現れる位置関係から、300次元のパラメーターを数値化して記憶します。次元数は何次元でも良いのですが、通常100から1000次元に設定されます。googleのBERTでは1024次元に設定されています。

それぞれの次元は、例えば、d1=名詞かどうか、d2=動詞かどうか、d3=固有名詞かどうか、d4=食べれるかどうか、d5=甘いかどうか、d6=楽しいかどうか、d7=赤いかどうか、d8=高価か安価か、など様々な情報を示します。その単語について、多数の次元(事項)の情報を集積することにより、word2vecはその単語を「理解した」状態になるのです。

良く考えると人間だって同じです。当該単語についての多数の情報を記憶しています。それは、脳内のニューロンの接続状況(情報の伝わりやすさ、軸索の太さ)として保存されているわけです。

分散表現された単語は数値ベクトルの集まりですから、単語同士の足し算や引き算をすることもできます。

例えば、「王様」-「男性」+「女性」=「女王」

というような計算式が成り立ちます。これが機械翻訳や読解の解答に活かされるのです。

この手法を取り入れた機械翻訳ソフトが翻訳の正答率を飛躍的に高めています。コンピューターはリンゴを食べたことも見たことも食べたことも無いのに、膨大な文章を機械学習することにより、とにかくその300次元の特性を記憶することができ、文脈の中で同義語を類推することができるのです。

単語の意味は文脈により変化することもあります。そのため、分散表現のベクトルデータを周囲の関連単語の出現状況により微調整すると読解力が向上します。トランスフォーマーtransformerは文章ごとに現れた単語の分散表現を更新する技術です。

※参考書籍

高木聡、TensorFlowを使ったニューラルネットワークの構築法


コメントを残す

メールアドレスが公開されることはありません。