word2vec

単語を意味のベクトルに変換する技術。言葉の関係を計算で扱えるようにした

自然言語処理機械学習
word2vec」の技術書を見る →

word2vec とは

word2vec (ワードトゥベック) は、単語を「意味を表す数値の並び (ベクトル)」に変換する技術だ。Google の Tomas Mikolov らが 2013 年 1 月の論文 (arXiv:1301.3781) で提案した二つのモデル構成が出発点で、同年 10 月の続報で学習を速める工夫が加わった。大量の文章から、各単語がどのような文脈で使われるかを学習し、意味の近い単語ほど近い位置に配置されるベクトルを生成する。これにより、言葉の意味や関係を計算で扱えるようになった。

何が画期的だったか

学習の中身は単純な穴埋めだ。前後の単語から中心の単語を当てる構成 (CBOW) と、逆に中心の単語から前後の単語を当てる構成 (Skip-gram) の二つがあり、当てること自体は目的ではない。当てられるように調整された内部の重みを、そのまま単語のベクトルとして取り出す。語彙が数十万語に及ぶと毎回すべての単語について確率を計算するのは重いため、正解の単語と少数のランダムな単語を見分ける問題に置き換える負例サンプリング (negative sampling) などで実用的な速度に収めている。

有名な例として、ベクトルの足し引きで単語の関係が表せる点が挙げられる。「王様 - 男性 + 女性 ≒ 女王」のように、意味の関係が計算として成り立つ。ただしこの足し引きが成り立つこと自体は word2vec より前の分散表現で観察されていた性質で、word2vec はその演算の精度を高める狙いで設計されたモデルだ。評価の手順も、計算結果に最も近い単語を探すときに入力に使った単語を候補から外している。演算が常に正解を返す魔法ではなく、単語を記号ではなく空間上の点として扱えるようになった結果として、関係がおおむね直線的に並ぶという性質だと捉えるのが正確だ。

特徴内容
分散表現単語を密なベクトルで表す
文脈から学習周囲の単語から意味を推定
意味の演算ベクトルの計算で関係を表現

なぜ重要か

それまでの自然言語処理は、単語を個別の記号として扱い、単語同士の意味的な近さを捉えにくかった。word2vec は、単語を意味の詰まったベクトルにすることで、機械が言葉の類似性や関係を扱えるようにした。検索、推薦、文書分類など、さまざまな応用の基礎技術になった。

位置づけと限界

word2vec は自然言語処理を大きく前進させたが、限界もある。各単語に一つの固定ベクトルを割り当てるため、同じ表記で意味が変わる語を扱えない。「甘い」が味の話か守りの甘さかは周囲の文を見なければ決まらないが、word2vec はどちらの用法にも同じベクトルしか与えられない。この課題は、文脈ごとにベクトルを作る BERT などのモデルで解消された。

もう一つの落とし穴は、学習した文章の偏りがそのままベクトルに写る点だ。ニュース記事で学習したベクトルに職業と性別の強い結び付きが現れることが 2016 年に報告されており、類推が「うまく成り立つ」ことは、その関係が妥当であることを意味しない。検索や推薦に組み込む前に、扱う語彙で意図しない対応が出ていないかを確かめる必要がある。とはいえ、word2vec が示した「単語を意味のベクトルで表す」という考え方は、現在の大規模言語モデルにも受け継がれる重要な礎になっている。

理解を深めるには関連書籍が参考になる。

この記事は役に立ちましたか?

関連用語

関連する記事