PAIR FACTORY

学習ペア工場

Word2Vecは文章から「入力→予測対象」のペアを機械的に作り出します。中心語が動きながらペアが生まれる様子を見て、CBOWとSkip-gramの違いを確かめてください。

中心語 周辺語(窓の中) 窓の外
2
700ms
あなたの予想ペア数
実際に生成されたペア数0
中心語の位置
20

生成された学習ペア

向きが逆なだけ

CBOWSkip-gram
入力周辺語(複数)中心語(1つ)
予測対象中心語(1つ)周辺語(1つずつ)
中心語1つあたりのペア数1個窓内の語の数だけ
学習の速さ速い遅い(ペアが多い)
低頻度語苦手(平均に埋もれる)得意
小さいデータ不利有利
正式名称Continuous Bag-of-WordsSkip-gram

ペア数の違いが性能差を生む

上のラボで両モードを切り替えて、生成ペア数を比べてください。 窓サイズ2なら、CBOWは中心語1つあたり1ペアしか作りませんが、 Skip-gramは最大4ペア作ります。

CBOWは周辺語をまとめて平均してから中心語を予測します。 平均をとるため、めったに出てこない語の情報は他の語に薄められてしまいます。 Skip-gramは1語ずつ独立にペアを作るので、低頻度語も自分の番がきちんと回ってきます。 学習には時間がかかりますが、語彙の隅々まで質のよいベクトルが得られます。

窓サイズが変えるもの

窓を小さくすると、直接隣り合う語だけを見るため 文法的に置き換え可能な語(「走る」と「歩く」など)が近いベクトルになりやすくなります。 窓を大きくすると、より広い文脈を見るため 話題として関連する語(「走る」と「マラソン」など)が近くなる傾向があります。 どちらが良いかは用途によります。

そもそも何を学んでいるのか

Word2Vecの学習課題は「周辺語から中心語を当てる」あるいはその逆です。 しかし当てること自体が目的ではありません。 目的は、その課題を解こうとする過程で得られる入力層の重み行列です。 これが単語ベクトル(埋め込み)になります。

文章
学習ペア
自動生成
予測課題を解く
ニューラルネット
重み行列
=単語ベクトル

人手のラベルは一切使っていません。文章さえあれば正解が自動で決まるため、 これは自己教師あり学習にあたります。 BERTやGPTの事前学習も、課題の作り方は違いますが同じ発想です。

分布仮説

なぜこれで意味が捉えられるのでしょうか。根拠は 「似た文脈に現れる語は、似た意味を持つ」という分布仮説です。 「犬が___を食べる」と「猫が___を食べる」の空欄には、似た語が入ります。 だから「犬」と「猫」は似た周辺語を持ち、結果として似たベクトルになります。

この仮説は強力ですが限界もあります。 「良い」と「悪い」は同じ文脈に現れやすいため、 反対語が近いベクトルになってしまうという有名な弱点があります。 また1語につき1つのベクトルしか持たないため、 「はし(箸/橋)」のような多義語を区別できません。 これを解決したのが、文脈ごとにベクトルが変わるBERTのような手法です。

実際の学習の工夫

語彙が10万語あると、出力層で10万通りの確率を毎回計算することになり現実的ではありません。 そこでネガティブサンプリング——正解1つと、ランダムに選んだ数個の「不正解」だけを使って 2値分類として学ばせる方法——が使われます。 計算量が語彙数に依存しなくなるため、大規模なコーパスでも学習できます。

詳しい解説を見る

Word2Vec:単語を意味のある数値へ変える

コンピュータに言葉を扱わせる最初の壁は、単語が記号でしかないことです。 one-hot表現では「犬」と「猫」の距離と、「犬」と「冷蔵庫」の距離が同じになってしまいます。 どの単語ペアも等距離では、意味を扱えません。 Word2Vecは、単語を数百次元の密なベクトルへ変換し、 意味の近さを距離として表現できるようにしました。 2013年の登場以降、自然言語処理の前提を変えた技術です。

ベクトルの足し算ができるという驚き

Word2Vecで得たベクトルには、有名な性質があります。 「王」−「男」+「女」を計算すると、「女王」のベクトルに近い場所へ着きます。 意味の差分がベクトルの差として表現されている、ということです。 これは設計時に意図した機能ではなく、 分布仮説に従って学習した結果として現れた性質でした。 単語の意味という曖昧なものが、線形代数の演算で扱えると分かった点が衝撃を与えました。

CBOWとSkip-gramの計算量の違い

文章の長さをT、窓サイズをcとすると、CBOWが作るペアはおよそT個です。 中心語1つに対して1ペアだからです。 対してSkip-gramは、中心語1つに対して最大2c個のペアを作るので、およそ2cT個になります。 窓サイズ5なら10倍です。 学習時間が10倍かかる代わりに、10倍の学習機会が得られるという取引で、 特に低頻度語のベクトル品質に差が出ます。 コーパスが小さい場合はSkip-gram、十分に大きくて速度を優先したい場合はCBOW、という選び方になります。

今のモデルとの関係

Word2Vecの単語ベクトルは静的です。「はし」は文脈に関わらず常に同じベクトルになります。 BERTやGPTのベクトルは文脈依存で、周囲の語によって変わります。 「橋を渡る」の「はし」と「箸を持つ」の「はし」は別のベクトルになります。 この違いが精度に直結するため、現在の主流は後者です。 ただしWord2Vec系の手法は軽量で高速なため、 検索の類似語展開や推薦システムの商品ベクトル(item2vec)など、 大量に高速処理したい場面では今も使われています

つまずいたとき

名前で覚えるなら「CBOWはCenter(中心語)を当てる」と結びつけてください。 Skip-gramはその逆で、中心語から周辺語を当てます。 上のラボで矢印の向きを見れば、どちらがどちらか迷わなくなります。