STEP 5:Word2Vecの理論と実装

🎯 STEP 5: Word2Vecの理論と実装

分散表現の概念を理解し、Word2Vecで単語の意味をベクトルで表現します

📋 このステップで学ぶこと

  • 分散表現(Distributed Representation)の概念
  • Word2Vecの2つのアーキテクチャ(CBOW、Skip-gram)
  • ネガティブサンプリング(Negative Sampling)
  • Gensimを使った実装
  • 単語の類似度計算と単語演算(king – man + woman = queen)
  • 事前学習済みモデルの利用

練習問題: 5問

💻 実行環境について

このステップのコードはGoogle Colabで実行できます。
Gensimはインストールが必要です。
https://colab.research.google.com/ にアクセスして、新しいノートブックを作成してください。

🎯 1. Bag of Wordsの限界と分散表現

STEP 3で学んだBag of WordsやTF-IDFには、大きな限界があります。 まずその問題を理解しましょう。

1-1. Bag of Wordsの問題点

⚠️ 最大の問題:単語の意味を捉えられない

Bag of Wordsでは、全ての単語が「独立」として扱われます。 意味的に関連する単語も、無関係な単語も区別できません。

【Bag of Words / TF-IDF の問題】 ■ 問題1:意味的に近い単語を認識できない “king” と “queen” のベクトル → 完全に独立(関連性ゼロ) → でも、人間は「どちらも王族」と知っている “dog” と “cat” のベクトル → 完全に独立(関連性ゼロ) → でも、人間は「どちらもペット」と知っている ■ 問題2:単語演算ができない 人間の知識: ・king は男性の王様 ・queen は女性の王様 ・king – 男性 + 女性 = queen Bag of Words: ・計算不可能!

1-2. 人間はどうやって単語の意味を理解しているか?

人間は「単語がどんな文脈で使われるか」から意味を学習しています。 これを分布仮説と呼びます。

💡 分布仮説(Distributional Hypothesis)

「単語の意味は、その周辺に出現する単語で決まる」

J.R.フィース(1957): “You shall know a word by the company it keeps.”
(単語の意味は、それが付き合う仲間によって分かる)

【分布仮説の具体例】 ■ “犬” が出現する文脈 「___を散歩させる」 「___が吠える」 「___はペットだ」 「___にエサをやる」 ■ “猫” が出現する文脈 「___を飼う」 「___が鳴く」 「___はペットだ」 「___にエサをやる」 共通点: 「ペットだ」「エサをやる」など → 似た文脈に出現する単語は、意味が近い! → “犬” と “猫” は近いベクトルで表現されるべき

1-3. 分散表現(Distributed Representation)とは?

分散表現とは、単語を低次元の密なベクトルで表現し、 意味が近い単語は近いベクトルになるようにする手法です。

📊 分散表現の特徴
  • 低次元:100〜300次元程度(Bag of Wordsは数万次元)
  • 密なベクトル:全ての要素が0でない値を持つ
  • 意味を反映:似た意味の単語は近いベクトルになる
  • 演算可能:ベクトルの足し算・引き算で意味を操作できる
【Bag of Words vs 分散表現の比較】 ■ Bag of Words(従来手法) 次元数: 10,000次元(語彙数) 形式: スパース(ほとんどが0) 例: [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, …] 意味的関係: 捉えられない “king” = [0, 0, 1, 0, 0, …] “queen” = [0, 0, 0, 0, 1, …] ← 完全に別物 ■ 分散表現(Word2Vec) 次元数: 100〜300次元 形式: 密(全て非ゼロ) 例: [0.25, -0.13, 0.87, 0.42, -0.56, …] 意味的関係: 捉えられる! “king” = [0.25, -0.13, 0.87, …] “queen” = [0.23, -0.15, 0.85, …] ← 似たベクトル!

1-4. Bag of Words vs 分散表現の比較表

項目 Bag of Words 分散表現(Word2Vec)
次元数 高次元(語彙数: 10,000〜) 低次元(100〜300)
密度 スパース(ほとんど0) 密(全て非ゼロ)
意味の表現 できない できる
類似度計算 不正確 正確
単語演算 不可能 可能!
✨ 分散表現で可能になること
  • 類似単語の発見:“king”に似た単語 → “queen”, “prince”, “monarch”
  • 単語演算:“king” – “man” + “woman” = “queen”
  • 文の類似度計算:単語ベクトルを組み合わせて文を比較
  • 転移学習:学習済みベクトルを他のタスクで再利用

🧠 2. Word2Vecの仕組み

Word2Vecは、2013年にGoogleのTomas Mikolovらが発表した 画期的なモデルです。周辺の単語から意味を学習します。

2-1. Word2Vecの基本アイデア

💡 Word2Vecの学習方法

Word2Vecは「周辺の単語を予測するタスク」を通じて、 単語の意味を学習します。

予測がうまくいくためには、単語の意味を理解する必要があるため、 結果として意味を捉えたベクトルが得られます。

【Word2Vecの学習イメージ】 文章: “I love natural language processing” 学習タスク: 周辺の単語から中心の単語を予測 例: 入力: “I”, “love”, “language”, “processing” ↓ モデルが予測: “???” ↓ 正解: “natural” このタスクを大量の文章で繰り返す → 単語の意味を理解したベクトルが得られる!

2-2. 2つのアーキテクチャ

Word2Vecには2つの学習方法があります。

📚 Word2Vecの2つのモデル
  1. CBOW(Continuous Bag of Words):周辺 → 中心を予測
  2. Skip-gram:中心 → 周辺を予測

2-3. CBOW(Continuous Bag of Words)

📖 CBOWの学習タスク

「周辺の単語から、中心の単語を予測する」

【CBOWの学習例】 文章: “I love natural language processing” ウィンドウサイズ = 2(前後2単語を見る) ■ 学習例1 中心の単語: “natural”(これを予測したい) 周辺の単語: “I”, “love”, “language”, “processing” 入力: [“I”, “love”, “language”, “processing”] ↓ モデル ↓ 出力: “natural”を予測 ■ 学習例2 中心の単語: “language”(これを予測したい) 周辺の単語: “love”, “natural”, “processing” 入力: [“love”, “natural”, “processing”] ↓ モデル ↓ 出力: “language”を予測
【CBOWのネットワーク構造】 入力層 隠れ層 出力層 (周辺の単語) (単語ベクトル) (中心の単語) [I] ─┐ [love] ─┼──→ [平均ベクトル] ──→ [natural] [language]─┤ (100〜300次元) (予測) [processing]┘ 処理の流れ: 1. 周辺の各単語をone-hotベクトルに変換 2. 各単語の埋め込みベクトルを取得 3. 埋め込みベクトルの平均を計算 4. 平均ベクトルから中心の単語を予測

2-4. Skip-gram

📖 Skip-gramの学習タスク

「中心の単語から、周辺の単語を予測する」

CBOWとは逆方向の予測です。

【Skip-gramの学習例】 文章: “I love natural language processing” ウィンドウサイズ = 2 ■ 学習例1 中心の単語: “natural”(これが入力) 周辺の単語: “love”, “language”(これらを予測) 入力: “natural” ↓ モデル ↓ 出力: “love”を予測, “language”を予測 ■ 学習例2 中心の単語: “language”(これが入力) 周辺の単語: “natural”, “processing” 入力: “language” ↓ モデル ↓ 出力: “natural”を予測, “processing”を予測
【Skip-gramのネットワーク構造】 入力層 隠れ層 出力層 (中心の単語) (単語ベクトル) (周辺の単語) ┌──→ [love] [natural] ──→ [ベクトル] ────┼──→ [language] (100〜300次元) └──→ [I] 処理の流れ: 1. 中心の単語をone-hotベクトルに変換 2. 埋め込みベクトルを取得 3. そのベクトルから周辺の各単語を予測 ポイント: ・1つの中心単語から複数の周辺単語を予測 ・各ペア(中心, 周辺)ごとに学習

2-5. CBOW vs Skip-gram の比較

項目 CBOW Skip-gram
予測方向 周辺 → 中心 中心 → 周辺
学習速度 速い 遅い
頻出語 得意 普通
低頻度語 苦手 得意
推奨 大規模データ・高速化 精度重視(一般的)
💡 実務では?

Skip-gramが一般的に使われます。 低頻度の単語も高精度で学習できるためです。 Gensimでは sg=1 でSkip-gramを指定します。

⚡ 3. ネガティブサンプリング

Word2Vecを高速化するための重要なテクニックを学びます。

3-1. 計算量の問題

⚠️ 素朴なWord2Vecは遅すぎる

出力層でsoftmaxを計算するには、語彙全体と比較する必要があります。

【計算量の問題】 出力層のsoftmax計算: P(単語 | context) = exp(score_単語) / Σ exp(score_全単語) ↑ ここが問題! 語彙数が10万語の場合: ・毎回10万個のスコアを計算 ・毎回10万個のexp()を計算 ・毎回10万個を足し合わせ → 計算量が膨大で学習が非常に遅い!

3-2. ネガティブサンプリングのアイデア

💡 解決策:全部と比較しない!

「正解の単語」と「少数のランダムな単語」だけを比較する

【ネガティブサンプリングの仕組み】 ■ 従来のsoftmax 正解: “language” 比較対象: 全10万語 ← 遅い! ■ ネガティブサンプリング 正解(ポジティブサンプル): “language” ランダムに選んだ5語(ネガティブサンプル): “apple”, “run”, “blue”, “car”, “happy” 比較対象: 6語だけ ← 超高速! 学習目標: ・”language”のスコアを高くする(正解なので) ・”apple”等のスコアを低くする(不正解なので)
【なぜこれでうまくいく?】 ネガティブサンプルは「無関係な単語」 → 無関係な単語と区別できれば、正解が分かる 例: 文脈: “I love natural ___ processing” 正解: “language” “language”と”apple”を区別できる → “language”が文脈に合うと学習できる ※ 完璧ではないが、十分な精度が得られる ※ 計算量は数千分の1に削減!
✅ ネガティブサンプリングの効果
  • 計算量削減:10万回 → 5〜20回程度
  • 学習の高速化:数百倍〜数千倍高速に
  • 精度維持:実用上十分な精度を保てる

💻 4. Gensimを使った実装

Gensimは、Word2Vecを簡単に実装できるPythonライブラリです。 実際にコードを書いて学習してみましょう。

4-1. Gensimのインストール

# Gensimのインストール !pip install gensim
実行結果: Collecting gensim Downloading gensim-4.3.2-cp310-cp310-manylinux_2_17_x86_64.whl (24.0 MB) … Successfully installed gensim-4.3.2

4-2. Word2Vecの基本的な学習

ステップ1:必要なライブラリのインポート

# 必要なライブラリをインポート from gensim.models import Word2Vec print(“Gensimのインポート完了!”)

ステップ2:学習データの準備

# サンプルデータ(文のリスト) # 各文は単語のリストとして表現 sentences = [ [“I”, “love”, “natural”, “language”, “processing”], [“I”, “love”, “machine”, “learning”], [“natural”, “language”, “processing”, “is”, “amazing”], [“machine”, “learning”, “is”, “powerful”], [“deep”, “learning”, “uses”, “neural”, “networks”], [“neural”, “networks”, “are”, “powerful”], [“I”, “study”, “deep”, “learning”], [“NLP”, “uses”, “machine”, “learning”], [“word”, “embeddings”, “are”, “useful”] ] print(f”文の数: {len(sentences)}”) print(f”1つ目の文: {sentences[0]}”)
実行結果: 文の数: 9 1つ目の文: [‘I’, ‘love’, ‘natural’, ‘language’, ‘processing’]

ステップ3:Word2Vecモデルの学習

# Word2Vecモデルの訓練 model = Word2Vec( sentences=sentences, # 学習データ vector_size=100, # ベクトルの次元数(100〜300が一般的) window=5, # 前後何単語を見るか min_count=1, # 最低出現回数(これ未満の単語は無視) workers=4, # 並列処理のスレッド数 sg=1, # 0=CBOW, 1=Skip-gram epochs=100 # 学習の繰り返し回数 ) print(“モデルの学習完了!”)
実行結果: モデルの学習完了!
💡 パラメータの解説
  • sentences: 学習データ(単語のリストのリスト)
  • vector_size: 単語ベクトルの次元数(大きいほど表現力UP、計算量も増加)
  • window: 文脈として見る前後の単語数
  • min_count: この回数未満の単語は語彙から除外
  • sg: 0でCBOW、1でSkip-gram(1を推奨)
  • epochs: データを何周学習するか

4-3. 単語ベクトルの取得

# 単語ベクトルを取得 # model.wv[“単語”] でベクトルを取得できる vector = model.wv[“learning”] print(f”‘learning’のベクトル(最初の10次元):”) print(vector[:10]) print(f”\nベクトルの次元数: {len(vector)}”)
実行結果: ‘learning’のベクトル(最初の10次元): [ 0.00234 -0.00156 0.00478 0.00123 -0.00345 0.00567 -0.00234 0.00189 -0.00456 0.00321] ベクトルの次元数: 100

4-4. 類似単語の検索

# “learning”に似た単語を検索 # most_similar()で類似度の高い単語を取得 similar_words = model.wv.most_similar(“learning”, topn=5) print(“‘learning’に似た単語:”) for word, similarity in similar_words: print(f” {word}: {similarity:.4f}”)
実行結果: ‘learning’に似た単語: machine: 0.2534 deep: 0.2156 processing: 0.1823 natural: 0.1567 neural: 0.1234
⚠️ 注意:サンプルデータが少ない

上記の例はサンプルデータが少ないため、類似度の精度は低いです。 実際には数百万〜数億単語のデータで学習すると、高精度な結果が得られます。

4-5. 単語間の類似度計算

# 2つの単語の類似度を計算 # similarity()でコサイン類似度を計算 sim = model.wv.similarity(“machine”, “learning”) print(f”‘machine’と’learning’の類似度: {sim:.4f}”) sim = model.wv.similarity(“deep”, “learning”) print(f”‘deep’と’learning’の類似度: {sim:.4f}”) sim = model.wv.similarity(“neural”, “networks”) print(f”‘neural’と’networks’の類似度: {sim:.4f}”)
実行結果: ‘machine’と’learning’の類似度: 0.3234 ‘deep’と’learning’の類似度: 0.2876 ‘neural’と’networks’の類似度: 0.4523

4-6. 単語演算(アナロジー)

# 単語演算: positive(足す) – negative(引く) # king – man + woman = queen のような演算 # ※ サンプルデータにはking等がないので、別の例 result = model.wv.most_similar( positive=[“deep”, “natural”], # これらを足す negative=[“neural”], # これを引く topn=3 # 上位3件 ) print(“deep + natural – neural に近い単語:”) for word, sim in result: print(f” {word}: {sim:.4f}”)
実行結果: deep + natural – neural に近い単語: language: 0.3456 processing: 0.2987 machine: 0.2543

4-7. モデルの保存と読み込み

# モデルを保存 model.save(“word2vec_model.bin”) print(“モデルを保存しました”) # モデルを読み込み loaded_model = Word2Vec.load(“word2vec_model.bin”) print(“モデルを読み込みました”) # 読み込んだモデルを使用 similar = loaded_model.wv.most_similar(“learning”, topn=3) print(“\n読み込んだモデルで検索:”) for word, sim in similar: print(f” {word}: {sim:.4f}”)
実行結果: モデルを保存しました モデルを読み込みました 読み込んだモデルで検索: machine: 0.2534 deep: 0.2156 processing: 0.1823

📚 5. 事前学習済みモデルの利用

自分でWord2Vecを学習するには大量のデータと時間が必要です。 実務では事前学習済みモデルを使うことが多いです。

5-1. なぜ事前学習済みモデル?

💡 事前学習済みモデルの利点
  • 大量のデータで学習済み:数十億単語で訓練されている
  • 高品質:一般的な単語の意味を正確に捉えている
  • すぐ使える:自分で学習する必要がない
  • 時間とコスト削減:学習に数日〜数週間かかるのを回避

5-2. Gensim-dataで事前学習済みモデルをダウンロード

# Gensimのダウンローダーを使用 import gensim.downloader as api # 利用可能なモデル一覧を確認 print(“利用可能なモデル:”) for model_name in list(api.info()[‘models’].keys())[:10]: print(f” – {model_name}”)
実行結果: 利用可能なモデル: – fasttext-wiki-news-subwords-300 – conceptnet-numberbatch-17-06-300 – word2vec-ruscorpora-300 – word2vec-google-news-300 – glove-wiki-gigaword-50 – glove-wiki-gigaword-100 – glove-wiki-gigaword-200 – glove-wiki-gigaword-300 – glove-twitter-25 – glove-twitter-50

5-3. GloVe(軽量版)を使ってみる

Google Newsモデルは3GB以上あるため、まずは軽量なGloVeモデルで試しましょう。

# GloVe(50次元、軽量版)をダウンロード # ※ 初回はダウンロードに数分かかります import gensim.downloader as api print(“モデルをダウンロード中…”) glove_model = api.load(“glove-wiki-gigaword-50”) print(“ダウンロード完了!”)
実行結果: モデルをダウンロード中… [==================================================] 100% ダウンロード完了!
# 類似単語を検索 similar_words = glove_model.most_similar(“computer”, topn=5) print(“‘computer’に似た単語:”) for word, similarity in similar_words: print(f” {word}: {similarity:.4f}”)
実行結果: ‘computer’に似た単語: computers: 0.8789 software: 0.8124 technology: 0.7823 electronic: 0.7645 digital: 0.7534
# 有名な単語演算: king – man + woman = ? result = glove_model.most_similar( positive=[“king”, “woman”], negative=[“man”], topn=3 ) print(“king – man + woman = ?”) for word, sim in result: print(f” {word}: {sim:.4f}”)
実行結果: king – man + woman = ? queen: 0.8523 princess: 0.6978 throne: 0.6534
✨ 見事に “queen” が出ました!

“king” – “man” + “woman” = “queen” という単語演算が成功しました。 これがWord2Vec(や類似手法)の威力です。

5-4. 他のアナロジーを試す

# 都市と国のアナロジー # Tokyo – Japan + France = ? result = glove_model.most_similar( positive=[“tokyo”, “france”], negative=[“japan”], topn=3 ) print(“tokyo – japan + france = ?”) for word, sim in result: print(f” {word}: {sim:.4f}”) # 比較級のアナロジー # bigger – big + small = ? result = glove_model.most_similar( positive=[“bigger”, “small”], negative=[“big”], topn=3 ) print(“\nbigger – big + small = ?”) for word, sim in result: print(f” {word}: {sim:.4f}”)
実行結果: tokyo – japan + france = ? paris: 0.7234 french: 0.6123 lyon: 0.5987 bigger – big + small = ? smaller: 0.8456 larger: 0.6234 little: 0.5678

5-5. 主な事前学習済みモデル

モデル名 次元数 サイズ 特徴
word2vec-google-news-300 300 1.6GB Google Newsで学習、最も有名
glove-wiki-gigaword-100 100 128MB Wikipedia + Gigaword、軽量
glove-twitter-50 50 104MB Twitter、口語的表現に強い
fasttext-wiki-news-subwords-300 300 958MB サブワード対応、未知語に強い

🛠️ 6. 完成コード

ここまでの内容をまとめた完成コードです。 ※コードが長いため、横スクロールできます。

6-1. 自分のデータでWord2Vecを学習

# Word2Vec完成コード:自分のデータで学習 from gensim.models import Word2Vec # ========== 1. データの準備 ========== # 各文を単語のリストとして準備 sentences = [ [“I”, “love”, “natural”, “language”, “processing”], [“I”, “love”, “machine”, “learning”], [“natural”, “language”, “processing”, “is”, “amazing”], [“machine”, “learning”, “is”, “powerful”], [“deep”, “learning”, “uses”, “neural”, “networks”], [“neural”, “networks”, “are”, “powerful”], [“I”, “study”, “deep”, “learning”], [“NLP”, “uses”, “machine”, “learning”], [“word”, “embeddings”, “are”, “useful”], [“transformers”, “revolutionized”, “NLP”], [“BERT”, “is”, “a”, “transformer”, “model”], [“GPT”, “uses”, “transformer”, “architecture”] ] # ========== 2. モデルの学習 ========== model = Word2Vec( sentences=sentences, vector_size=100, # ベクトルの次元数 window=5, # 文脈ウィンドウ min_count=1, # 最低出現回数 sg=1, # 1=Skip-gram epochs=100 # エポック数 ) # ========== 3. モデルの使用 ========== # 単語ベクトルの取得 print(“【単語ベクトル】”) print(f”‘learning’のベクトル(最初の5次元): {model.wv[‘learning’][:5]}”) # 類似単語の検索 print(“\n【類似単語】”) for word, sim in model.wv.most_similar(“learning”, topn=3): print(f” {word}: {sim:.4f}”) # 単語間の類似度 print(“\n【類似度】”) print(f”machine – learning: {model.wv.similarity(‘machine’, ‘learning’):.4f}”) # ========== 4. モデルの保存 ========== model.save(“my_word2vec.model”) print(“\nモデルを保存しました: my_word2vec.model”)

6-2. 事前学習済みモデルの使用

# 事前学習済みモデルを使う完成コード import gensim.downloader as api # ========== 1. モデルのダウンロード ========== print(“モデルをダウンロード中…”) model = api.load(“glove-wiki-gigaword-50”) print(“完了!”) # ========== 2. 類似単語の検索 ========== print(“\n【’computer’に似た単語】”) for word, sim in model.most_similar(“computer”, topn=5): print(f” {word}: {sim:.4f}”) # ========== 3. 単語演算 ========== print(“\n【単語演算: king – man + woman】”) result = model.most_similar( positive=[“king”, “woman”], negative=[“man”], topn=3 ) for word, sim in result: print(f” {word}: {sim:.4f}”) # ========== 4. 都市と国の関係 ========== print(“\n【tokyo – japan + france】”) result = model.most_similar( positive=[“tokyo”, “france”], negative=[“japan”], topn=3 ) for word, sim in result: print(f” {word}: {sim:.4f}”)

📝 練習問題

このステップで学んだ内容を確認しましょう。

問題1:分散表現の特徴

分散表現の説明として正しくないものはどれですか?

  1. 意味的に近い単語は近いベクトルになる
  2. ベクトルは高次元でスパース(ほとんどが0)
  3. 低次元の密なベクトルで表現される
  4. 単語演算が可能(king – man + woman = queen)
正解:b

分散表現は低次元の密なベクトルです。 「高次元でスパース」なのはBag of Wordsの特徴です。

Bag of Words(誤り):

  • 高次元(語彙数: 10,000〜100,000次元)
  • スパース(ほとんどが0)
  • 例: [0, 0, 1, 0, 0, 0, …]

分散表現(正しい):

  • 低次元(100〜300次元)
  • 密(全て非ゼロ)
  • 例: [0.2, -0.5, 0.1, 0.3, …]

問題2:CBOW vs Skip-gram

次のうち、Skip-gramの特徴として正しいものはどれですか?

  1. 周辺の単語から中心の単語を予測する
  2. 中心の単語から周辺の単語を予測する
  3. CBOWより学習が速い
  4. 大規模データには向かない
正解:b

Skip-gramは、中心の単語から周辺の単語を予測します。

比較:

  • CBOW:周辺 → 中心(a.の説明)
  • Skip-gram:中心 → 周辺(b.の説明)✅

他の選択肢について:

  • c. Skip-gramの方が学習は遅い(正しくは逆)
  • d. Skip-gramは大規模・小規模どちらにも対応

問題3:ネガティブサンプリング

ネガティブサンプリングの目的は何ですか?

  1. 精度を向上させる
  2. 計算量を削減して学習を高速化する
  3. より多くの単語を学習する
  4. ベクトルの次元数を減らす
正解:b

ネガティブサンプリングの目的は計算量の削減です。

問題:
出力層のsoftmaxで、語彙全体(10万語)と比較する必要がある
→ 計算量が膨大

解決策:
正解の単語と少数のランダムな単語(5〜20個)だけを比較
→ 計算量が数千分の1に削減!

問題4:単語の類似度

Word2Vecで単語間の類似度を計算する際、一般的に使われる指標はどれですか?

  1. ユークリッド距離
  2. マンハッタン距離
  3. コサイン類似度
  4. ジャカード係数
正解:c

Word2Vecではコサイン類似度が一般的に使われます。

コサイン類似度:

  • 2つのベクトルの角度を測る指標
  • 値の範囲: -1〜1
  • 1に近い → 非常に似ている
  • 0付近 → 無関係
  • -1に近い → 逆の意味

なぜコサイン類似度?
ベクトルの長さに依存せず、方向(意味)の類似性を測れるため。

問題5:Word2Vecのパラメータ

一般的な使用において、Word2Vecのvector_size(ベクトルの次元数)として最も適切な値はどれですか?

  1. 10〜50次元
  2. 100〜300次元
  3. 1,000〜5,000次元
  4. 10,000次元以上
正解:b

Word2Vecでは100〜300次元が一般的です。

推奨次元数:

  • 小規模データ:100次元
  • 中規模データ:200次元
  • 大規模データ:300次元

各選択肢について:

  • a. 10〜50次元 → 少なすぎて意味を十分に表現できない
  • b. 100〜300次元 → ちょうど良い ✅
  • c. 1,000〜5,000次元 → 多すぎて過学習のリスク
  • d. 10,000次元以上 → 計算量が膨大、不要

📝 STEP 5 のまとめ

✅ このステップで学んだこと
  • 分散表現:単語を低次元の密なベクトルで表現
  • 分布仮説:単語の意味は周辺の単語で決まる
  • Word2Vec:周辺の単語から意味を学習するモデル
  • CBOW:周辺→中心の予測(速い)
  • Skip-gram:中心→周辺の予測(精度高い)
  • ネガティブサンプリング:計算量を大幅削減
  • Gensim:簡単にWord2Vecを実装できるライブラリ
  • 単語演算:king – man + woman = queen
💡 Word2Vecの歴史的意義

Word2Vecは2013年にGoogleから発表され、 NLPに革命をもたらしました。

革命前:単語は独立、意味を捉えられない
革命後:単語の意味を捉え、演算も可能に

この「単語をベクトルで表現する」というアイデアは、 その後のBERT、GPTなど最新技術の基礎となりました。

🎯 次のステップの準備

次のSTEP 6では、GloVeとfastTextを学びます。

Word2Vecの改良版であるGloVe、 サブワード情報を活用して未知語にも対応できるfastTextなど、 さらに高度な単語埋め込み手法を習得していきましょう!

📝

学習メモ

自然言語処理(NLP) - Step 5

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE