📋 このステップで学ぶこと
分散表現(Distributed Representation)の概念
Word2Vecの2つのアーキテクチャ(CBOW、Skip-gram)
ネガティブサンプリング(Negative Sampling)
Gensimを使った実装
単語の類似度計算と単語演算(king – man + woman = queen)
事前学習済みモデルの利用
練習問題: 5問
🎯 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つのモデル
CBOW(Continuous Bag of Words): 周辺 → 中心を予測
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:分散表現の特徴
分散表現 の説明として正しくない ものはどれですか?
意味的に近い単語は近いベクトルになる
ベクトルは高次元でスパース(ほとんどが0)
低次元の密なベクトルで表現される
単語演算が可能(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 の特徴として正しい ものはどれですか?
周辺の単語から中心の単語を予測する
中心の単語から周辺の単語を予測する
CBOWより学習が速い
大規模データには向かない
解答を見る
正解:b
Skip-gram は、中心の単語から周辺の単語を予測します。
比較:
CBOW: 周辺 → 中心(a.の説明)
Skip-gram: 中心 → 周辺(b.の説明)✅
他の選択肢について:
c. Skip-gramの方が学習は遅い (正しくは逆)
d. Skip-gramは大規模・小規模どちらにも対応
問題3:ネガティブサンプリング
ネガティブサンプリング の目的は何ですか?
精度を向上させる
計算量を削減して学習を高速化する
より多くの単語を学習する
ベクトルの次元数を減らす
解答を見る
正解:b
ネガティブサンプリングの目的は計算量の削減 です。
問題:
出力層のsoftmaxで、語彙全体(10万語)と比較する必要がある
→ 計算量が膨大
解決策:
正解の単語と少数のランダムな単語(5〜20個)だけを比較
→ 計算量が数千分の1に削減!
問題4:単語の類似度
Word2Vecで単語間の類似度を計算する際、一般的に使われる 指標はどれですか?
ユークリッド距離
マンハッタン距離
コサイン類似度
ジャカード係数
解答を見る
正解:c
Word2Vecではコサイン類似度 が一般的に使われます。
コサイン類似度:
2つのベクトルの角度を測る指標
値の範囲: -1〜1
1に近い → 非常に似ている
0付近 → 無関係
-1に近い → 逆の意味
なぜコサイン類似度?
ベクトルの長さに依存せず、方向(意味)の類似性を測れるため。
問題5:Word2Vecのパラメータ
一般的な使用において、Word2Vecのvector_size (ベクトルの次元数)として最も適切 な値はどれですか?
10〜50次元
100〜300次元
1,000〜5,000次元
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など、
さらに高度な単語埋め込み手法を習得していきましょう!