🔰 初心者
Word2Vecで単語をベクトルにできるのはわかりましたが、Word2Vecにも弱点はあるんですか?
🎓 上級者
Word2Vecには大きく3つの弱点があるんだ。これらを解決するために様々なモデルが登場したよ。
Word2Vecの3つの弱点
① 未知語(OOV)に対応できない — 学習時に見なかった単語はベクトル化できない
② 文書全体の意味を表せない — 単語単位のベクトルしか作れない
③ 多義語を区別できない — 「bank(銀行/土手)」が1つのベクトルになってしまう
⚡ FastText
🔰 初心者
Word2Vecで学習していない新しい単語が出てきたらどうなるんですか?
🎓 上級者
それがOOV(Out-of-Vocabulary / 未知語)問題だよ。Word2Vecでは学習時の語彙にない単語はベクトル化できない。FastTextはこれを解決したんだ。
OOV(Out-of-Vocabulary)問題
学習時の語彙に含まれない未知語を処理できない問題。
例えば「コロナ禍」のような新造語や、「走れ」「走った」のような活用形がすべて別単語扱いになってしまう。
Word2Vecは単語単位で学習するため、未知語にはベクトルが割り当てられない。
Word2Vec
単語をそのまま1つの単位として学習
- 「走る」「走った」「走れ」は全部別の単語
- 学習していない単語 → ベクトル化不可能
- 新語・専門用語に弱い
FastText
単語を「文字のn-gram(部分文字列)」に分解して学習
- 「走る」→「<走」「走る」「る>」等の部品に分解
- 未知語でも部品の組み合わせでベクトル化可能
- 活用形・新語・誤字にも対応
FastText(Facebook / Meta、2016年)
サブワード(文字n-gram)を活用してOOV問題を解決した単語分散表現モデル
仕組み:単語を文字レベルの部品(サブワード)に分解し、各部品のベクトルの合計で単語を表現する。
メリット:
- 未知語でも部品の組み合わせでベクトル化できる(OOV問題を解決)
- 活用形・派生語が共通の部品を共有するため、語形変化に強い
- 誤字・スペルミスにもある程度対応できる
学習方法:Word2Vecと同じくCBOWとスキップグラムに対応。
📄 Doc2Vec
🔰 初心者
Word2Vecは単語のベクトルですよね。文書全体を1つのベクトルにできないんですか?
🎓 上級者
Doc2Vec(Paragraph Vector)がまさにそれだよ。Word2Vecのアイデアを拡張して、文書全体を1つの固定長ベクトルにできるんだ。
Word2Vec
単語 → ベクトル
- 1つの単語に1つのベクトル
- 文書全体を扱うには工夫が必要
- (単語ベクトルの平均を取る等)
Doc2Vec
文書 → ベクトル
- 文書全体に1つのベクトルを割り当て
- 文書の意味をまるごと捉えられる
- 文書分類・類似文書検索に有用
Doc2Vec / Paragraph Vector(Le & Mikolov、2014年)
Word2Vecを拡張して文書全体を固定長のベクトルに変換するモデル
仕組み:CBOWの入力に「文書ID」を追加して、周辺語+文書情報から中心語を予測する。学習後、文書IDのベクトルが文書全体の意味を表す。
用途:文書分類、類似文書の検索、文書のクラスタリング
🔄 双方向RNN(BiRNN)
🔰 初心者
RNNは前の単語から順に処理しますよね。でも文の意味って後ろの単語も重要じゃないですか?
🎓 上級者
その通り!通常のRNNは左→右(順方向)にしか情報を伝えられない。でも「彼は___を飲んだ」の空欄を埋めるには、右側の「飲んだ」という情報も必要だよね。そこでBiRNN(双方向RNN)が登場したんだ。
BiRNN(Bidirectional RNN / 双方向RNN)
順方向と逆方向の2つのRNNを並列に走らせ、両方の隠れ状態を結合する手法
仕組み:同じ入力系列に対して、左→右(順方向)と右→左(逆方向)の2つのRNNを走らせる。各位置で両方の隠れ状態を結合して出力する。
メリット:各単語が「前の文脈」だけでなく「後ろの文脈」も考慮できるため、文の理解度が大幅に向上。
応用:BiLSTM(双方向LSTM)としてELMoやNERタスクなどで広く使用される。
🔗 Encoder-Decoder / Seq2Seq
🔰 初心者
機械翻訳って、入力が英語で出力が日本語ですよね。入力と出力の長さが違うのに、RNNで対応できるんですか?
🎓 上級者
普通のRNNでは難しい。そこでEncoder-Decoder(エンコーダー・デコーダー)モデルが登場したんだ。Seq2Seq(Sequence to Sequence)とも呼ばれるよ。
Seq2Seq / Encoder-Decoder モデル(Sutskever et al., 2014年)
入力系列を固定長の文脈ベクトルに圧縮し、そこから出力系列を生成するモデル
エンコーダー:入力系列(例:英語の文)をRNN/LSTMで処理し、最後の隠れ状態を文脈ベクトルとして出力。文の意味を1つのベクトルに圧縮する。
デコーダー:文脈ベクトルを受け取り、RNN/LSTMで出力系列(例:日本語の文)を1単語ずつ生成する。
用途:機械翻訳、文章要約、対話システム、質問応答
弱点:長い文の情報を1つの文脈ベクトルに押し込むため、長文で情報が失われやすい → Attention機構で解決(後に発展)
🌐 GNMT(Google Neural Machine Translation)
🔰 初心者
Seq2Seqモデルが翻訳に使えるのはわかりましたが、実際のGoogle翻訳にもこの仕組みが使われているんですか?
🎓 上級者
Google翻訳は2016年にGNMT(Google Neural Machine Translation)という、Seq2Seqを大幅に強化したモデルに切り替えたんだ。これにより翻訳品質が劇的に向上したよ。
GNMT(Google Neural Machine Translation / Google, 2016年)
Seq2SeqにAttention機構と深い層を追加し、Google翻訳を劇的に改善したモデル
構成:8層のLSTMエンコーダー(第1層はBiLSTM)+ Attention機構 + 8層のLSTMデコーダー
Attention機構:Seq2Seqの弱点(長い文の情報が文脈ベクトル1つに圧縮されて失われる問題)を解決。デコーダーが出力を生成するたびに、入力のどの単語に注目すべきかを動的に決定する。
その他の工夫:
- 残差接続:ResNetと同じ仕組みで、深い層でも学習を安定させる
- Wordpiece:単語をサブワード単位に分割してOOV問題にも対応
成果:従来のフレーズベース統計翻訳から大幅に翻訳品質が向上し、Google翻訳に実装された。
Attention機構とは?
翻訳時に「入力文のどの部分に注目すべきか」を自動的に学習する仕組み。
例:「I love cats」→「私は猫が好きです」を翻訳するとき
・「猫」を出力する時 → 入力の「cats」に高い注目度
・「好き」を出力する時 → 入力の「love」に高い注目度
文脈ベクトル1つに圧縮するのではなく、毎回入力全体を参照できるため、長文でも情報が失われにくい。
この考え方はその後のTransformerの基盤になった。
🧠 ELMo
🔰 初心者
Word2Vecだと「bank」が銀行でも土手でも同じベクトルになっちゃうんですよね。文脈に応じて変わるようにはできないんですか?
🎓 上級者
それを実現したのがELMoだよ。Word2Vecは学習後にベクトルが固定される「静的な表現」だけど、ELMoは文脈に応じてベクトルが変わる「動的な表現」なんだ。これを文脈化された単語表現と呼ぶよ。
Word2Vec(静的な表現)
1つの単語 = 常に同じベクトル
- 「bank」は常に1つのベクトル
- 文脈を考慮しない
- 多義語の区別ができない
ELMo(文脈化された表現)
同じ単語でも文脈によって異なるベクトル
- 「I went to the bank」→ 銀行のベクトル
- 「river bank」→ 土手のベクトル
- 前後の文脈を考慮してベクトルが変わる
ELMo(Embeddings from Language Models / Peters et al., 2018年)
双方向LSTMを使って文脈に応じた動的な単語表現を生成するモデル
仕組み:大規模コーパスで事前学習した双方向LSTM(BiLSTM)の各層の出力を重み付けして結合することで、文脈に応じた単語ベクトルを生成する。
特徴:
- 浅い層 → 構文的な特徴(品詞など)を捉える
- 深い層 → 意味的な特徴(多義語の意味など)を捉える
- 全層を重み付けして結合 → タスクに最適な表現を自動で獲得
意義:「事前学習+ファインチューニング」パラダイムの先駆け。この後のBERTやGPTにつながる重要なモデル。
📊 モデル全体比較
| モデル | 解決した課題 | アプローチ | 特徴 |
| FastText | OOV(未知語)問題 | サブワード(文字n-gram) | 未知語・活用形に対応可能 |
| Doc2Vec | 文書レベルの表現 | Word2Vec+文書ID | 文書全体を固定長ベクトルに |
| BiRNN | 片方向の文脈しか見れない | 順方向+逆方向のRNNを結合 | 前後両方の文脈を考慮 |
| Seq2Seq | 入出力の長さが異なるタスク | エンコーダー+デコーダー | 翻訳・要約・対話に活用 |
| GNMT | 長文の翻訳品質 | Seq2Seq+Attention+深い層 | Google翻訳に実装。Attention機構で長文にも対応 |
| ELMo | 多義語(文脈依存の意味) | 双方向LSTMの多層出力 | 文脈に応じた動的なベクトル |
📝 まとめ
G検定で押さえるべきポイント
- OOV問題:学習時の語彙にない未知語を処理できない問題
- FastText:サブワード(文字n-gram)で単語を分解し、未知語でもベクトル化可能にした
- Doc2Vec:Word2Vecを拡張し、文書全体を1つの固定長ベクトルにするモデル
- BiRNN:順方向+逆方向の2つのRNNを結合し、前後の文脈を両方考慮
- Seq2Seq(Encoder-Decoder):入力をエンコーダーで文脈ベクトルに圧縮し、デコーダーで出力を生成。翻訳・要約に活用
- GNMT:Seq2Seq+Attention機構+深い層でGoogle翻訳を大幅改善。Attentionは「どの入力に注目すべきか」を動的に決定
- ELMo:双方向LSTMで文脈に応じた動的な単語ベクトルを生成。「事前学習+ファインチューニング」の先駆け
- Word2Vecは静的な表現(常に同じベクトル)、ELMoは文脈化された表現(文脈で変わる)