本文へスキップ
BecomeCoder
ブログ一覧Wikiコース一覧

word2vecのCBOWとSkip-gramの違い|初心者向けにやさしく解説

#AI#機械学習#word2vec#自然言語処理

結論:word2vecのCBOWとSkip-gramは「予測の向き」が逆です。CBOWは周辺の単語から真ん中の単語を当て(速い・大きなデータ向き)、Skip-gramは真ん中の単語から周辺の単語を当てます(精度が出やすい・小さなデータやレアな単語に強い)。迷ったらまずSkip-gramで十分です。 どちらも最終的に手に入るのは同じ「単語の意味ベクトル」で、違うのは学習のさせ方だけ——ここを押さえると、両者の名前に惑わされなくなります。

この記事では、「ベクトル」「分布仮説」「中心語・周辺語」といった専門用語をひとつずつ説明しながら、CBOWとSkip-gramの違いと使い分けを初心者向けに解説します。

そもそもword2vecとは?

word2vec(ワード・トゥ・ベック)は、単語を「意味を保った数値の並び」に変換する手法です。単語をコンピュータが扱える数値にしておくと、「意味の近さ」を計算で求められます。

ベクトル … [0.8, 0.1, 0.7, ...] のように数値を一列に並べたもの。単語を座標に置き換えるイメージです。「犬」と「猫」は近く、「犬」と「自動車」は遠い、という位置関係が数値で表せます。この数値化された表現を 分散表現 とも呼びます。

なぜ「まわりの単語」を手がかりにできるのでしょうか。それは word2vec が 分布仮説——「似た文脈に現れる単語は、似た意味を持つ」という考え方——に立っているからです。「犬」も「猫」も「かわいい」「飼う」「散歩」の近くに出てくるので、意味が近いと判断できる、というわけです。

用語の全体像は用語集にまとめてあります。あわせて word2vec(CBOW・Skip-gram)とは や 埋め込み(ベクトル)とは も参照してください。

word2vecの学習は「穴埋めクイズ」

word2vecは、文章を大量に読みながら ニューラルネットワーク に穴埋めクイズを解かせます。正解を当てられるように内部の数値(重み)を少しずつ調整し、学習が終わったころには、その重みが「単語の意味ベクトル」になっています。

中心語 / 周辺語 … いま注目している単語が 中心語、その前後に並ぶ単語が 周辺語 です。前後どこまでを「まわり」とみなすかの範囲を 文脈窓(ウィンドウ) と呼びます。ウィンドウが2なら、中心語の前後2単語ずつが周辺語です。

この「穴埋めクイズ」を どちら向きに出すか で、CBOWとSkip-gramに分かれます。例文「今日 は ◯ が 良い」で見ていきましょう。

CBOW:周辺語から中心語を当てる

CBOW(Continuous Bag-of-Words)は、周辺語をまとめて手がかりにして、真ん中の中心語を当てる方式です。

入力(周辺語): 今日 / は / が / 良い
        ↓ 予測
出力(中心語): 天気

まわりの4語ぜんぶをヒントに1語を当てるので、情報が多く、学習が速く安定します。「Bag-of-Words(言葉の袋)」という名前は、周辺語を袋にまとめて入れ、順番を気にせず一緒に使うところから来ています。

Skip-gram:中心語から周辺語を当てる

Skip-gramは向きが逆で、真ん中の中心語1語から、周辺語を1つずつ当てる方式です。

入力(中心語): 天気
        ↓ 予測
出力(周辺語): 今日 / は / が / 良い

1語だけをヒントに、まわりの単語を何度も予測させます。1つの単語がたくさんのクイズに登場するため、出現回数の少ない単語でもしっかり学習が進みます。

CBOWとSkip-gramは、まさに矢印の向きが逆の関係です。図で並べると一目でわかります → word2vec(CBOW・Skip-gram)とは。

どちらを選ぶ? 早わかり比較

CBOWSkip-gram
予測の向き周辺語 → 中心語中心語 → 周辺語
学習速度速い遅い
得意なデータ大きいデータ小さいデータ
レアな単語苦手得意
ひとことでまわりから穴埋め1語から周りを予測

迷ったらSkip-gram が無難です(多くの入門で既定として紹介されます)。データが非常に大きく、学習速度を優先したいときは CBOW も有力、という覚え方で十分です。

つまずきやすいところ

ブラウザで「意味のベクトル」を体験する

word2vec そのものを動かすレッスンはありませんが、「文章を数値ベクトルにして、近さを測る」という同じ発想は、RAGコースでブラウザからそのまま実行できます(無料・環境構築なし)。CBOW/Skip-gramの気持ちを、手を動かして確かめるのに最適です。

機械学習そのものの土台から積み上げたい人は、Python×AI(機械学習)コース をブラウザで動かしながら進めるのがおすすめです。

次に読む

← ブログ一覧に戻る