More Related Content Similar to 【論文紹介】Distributed Representations of Sentences and Documents (10) 【論文紹介】Distributed Representations of Sentences and Documents1. Distributed Representations of
Sentences and Documents
Proceedings of The 31st International Conference on
Machine Learning (ICML 2014), pp. 1188 – 1196, 2014
スライド作成:吉田 朋史
工学院大学大学院 工学研究科 情報学専攻
インタラクティブメディア研究室
Quoc Le, Tomas Mikolov
Google Inc.
1/46
論文紹介
2. 概要
文書をベクトルで表現 → Bag-of-Words (BOW) が一般的
⇒ 2つの大きな欠点
1. 単語の語順情報が失われる
2. 単語の意味を表現する事が苦手
2/46
提案手法:Paragraph Vector(doc2vec の中身)
◦ 可変長の文書 → 文書の固定長特徴ベクトル
◦ 文書中に出現する単語を予測するよう学習 → 特徴ベクトルを獲得
◦ 学習にはニューラルネットワークを使用
評価実験: 文書の極性(肯定 or 否定)判定 & 文書検索
◦ 短文・長文それぞれで既存手法を大幅に上回る
◦ 世界最先端の精度(筆者談)
4. 背景
4/46
文書のクラスタリング → 自然言語処理の重要なテーマ
◦ ウェブ検索・スパムフィルタリングなどの中核技術
◦ 文書をベクトルとして扱うアルゴリズムが多数
◦ K-means †
◦ ロジスティック回帰 ††
† HTTP://TECH.NITOYON.COM/JA/BLOG/2009/04/09/KMEANS-VISUALISE/
†† HTTP://QIITA.COM/HIK0107/ITEMS/9B6E1E989F4EAEFDC31D
7. n-gram
7/46
𝑛 単語を最小単位 → 1単語ずつずらして文章を分割
例)「This is a good pen」
◦ 𝑛 = 2 :This is / is a / a good / good pen
◦ 𝑛 = 3 :This is a / is a good / a good pen
日本語文章: 𝑛 文字を最小単位として文を分割
例)「今日は大雨です。」
◦ 𝑛 = 2 :今日/日は/は大/大雨/雨で/です/す。/。
◦ 𝑛 = 3 :今日は/日は大/は大雨/大雨で/雨です/です。/す。/ 。
◦ 形態素解析:今日/は/大雨/です/。
◦ 𝑛 = 2 → bigram と呼んだりする
16. Softmax 関数
16/46
𝑓
𝑥1
𝑥2
⋮
𝑥 𝑛
=
𝑒 𝑥1
𝑒 𝑥1 + 𝑒 𝑥2 + ⋯ + 𝑒 𝑥 𝑛
𝑒 𝑥2
𝑒 𝑥1 + 𝑒 𝑥2 + ⋯ + 𝑒 𝑥 𝑛
⋮
𝑒 𝑥 𝑛
𝑒 𝑥1 + 𝑒 𝑥2 + ⋯ + 𝑒 𝑥 𝑛
𝑓
10
2
1
=
0.9995 ⋯
0.0003 ⋯
0.0001 ⋯
例)
入力ベクトル → 確率分布を表す出力ベクトルに変換
◦ 各次元の値=0~1
◦ 各次元の値の総和=1
◦ 元の値の大小関係を保存
17. バックプロパゲーション
17/46
正解値との誤差を少なくするように重み 𝒘 𝟏, 𝒘 𝟐 の値を更新
◦ 訓練データから正解値 𝒑′
を算出 → 出力値 𝒑 との誤差を算出
◦ 𝑝1
′
:𝒅 𝟏 が「工学院大学」カテゴリに属する実際の確率
◦ 𝑝2
′
:𝒅 𝟏 が「日本工学院」カテゴリに属する実際の確率
𝒑 =
𝑝1
𝑝2
⋮
重み
𝒘 𝟏
出力層中間層入力層
𝒅 𝟏 =
𝑥1
𝑥2
⋮
𝑥 𝑛
︙
重み
𝒘 𝟐
Softmax
関数
確率分布に
変換
𝒑′
=
𝑝1
′
𝑝2
′
⋮
正解値
誤差
更新更新
誤差を減らすよう重みを更新
19. Harris の分布仮説
19/46
「飼っている◯◯と散歩」→ ◯◯に入る単語は?
◦ 「犬」「イヌ」「ポメラニアン」などなど
◦ 同じ文脈で使われる単語 → 似た意味を持つ傾向がある
◦ 同じ文脈 ≒ 共起する周辺単語が同じ
基本方針:ある単語 ⇄ 周辺単語を予測する NN を構築
◦ その過程で単語を表現するベクトルを上手いこと学習したい
◦ 大規模データで学習できるようにモデルはなるべく単純にしたい
HTTP://WWW.TANDFONLINE.COM/DOI/PDF/10.1080/00437956.1954.11659520
26. 入力層→中間層の重み
26/46
各単語の単語ベクトルを横に並べた行列
◦ 𝒘𝒊:単語 𝒙𝒊 を表現する 𝑁 次元列ベクトル(𝑁:200~400)
◦ 各次元は適当な初期値を与えておく
𝑾 = 𝒘 𝟏 𝒘 𝟐 ⋯ 𝒘𝒊 ⋯ 𝒘 𝑺
=
𝑤1,1 𝑤2,1 ⋯ 𝑤𝑖,1 ⋯ 𝑤𝑆,1
𝑤1,2 𝑤2,2 ⋯ 𝑤𝑖,2 ⋯ 𝑤𝑆,2
𝑤1,𝑁 𝑤2,𝑁 ⋯ 𝑤𝑖,𝑁 ⋯ 𝑤𝑠,𝑁
⋮ ⋮ ⋮ ⋮
⇒ こいつは一体何者?
27. 種明かし
27/46
入力(One-hot ベクトル)𝒙𝒊 を掛け算してみると・・・?
𝑾𝒙𝒊 =
𝑤1,1 𝑤2,1 ⋯ 𝑤𝑖,1 ⋯ 𝑤𝑆,1
𝑤1,2 𝑤2,2 ⋯ 𝑤𝑖,2 ⋯ 𝑤𝑆,2
𝑤1,𝑁 𝑤2,𝑁 ⋯ 𝑤𝑖,𝑁 ⋯ 𝑤𝑆,𝑁
0
⋮
0
1
0
⋮
0
=
𝑤𝑖,1
𝑤𝑖,2
⋮
𝑤𝑖,𝑖
⋮
𝑤𝑖,𝑁
= 𝒘𝒊
⇒ 単語 𝒙𝒊 に対応する単語ベクトル 𝒘𝒊 が取り出せた
28. 入力層の出力(中間層の入力)
28/46
𝑾 𝒙 𝟏 𝒙 𝟐 𝒙 𝟑 𝒙 𝟒 = 𝒘 𝟏 𝒘 𝟐 𝒘 𝟑 𝒘 𝟒
文脈ベクトル 𝒄 = 𝒘 𝟏 + 𝒘 𝟐 + 𝒘 𝟑 + 𝒘 𝟒 =
𝑤1+2+3+4,1
𝑤1+2+3+4,2
⋮
𝑤1+2+3+4,𝑁
入力単語 𝒙 𝟏 𝒙 𝟐 𝒙 𝟑 𝒙 𝟒 と重み 𝑾 の掛け算結果
結果を結合 →文脈ベクトル 𝒄 を出力(活性化関数は使わない)
◦ 前後の単語を考慮した文脈を表すベクトル
◦ 統合の方法には議論あり(総和 or 平均 or 連結(?))
◦ 現在では連結が採用されることが多いらしい(今回は総和で)
29. 中間層→出力層の重み
29/46
各単語ベクトルの転置ベクトルを縦に並べた行列
◦ 転置ベクトル:ベクトルの行と列を入れ替えたもの
◦ 入力層→中間層の重み 𝑾 の転置行列 𝑾 𝒕
𝑾 𝒕
=
𝒘 𝟏
𝒕
𝒘 𝟐
𝒕
⋮
𝒘𝒊
𝒕
⋮
𝒘 𝑺
𝒕
=
𝑤1,1 𝑤1,2
⋯ 𝑤1,𝑁
𝑤2,1 𝑤2,2
⋯ 𝑤2,𝑁
𝑤𝑖,1 𝑤𝑖,2
⋯ 𝑤𝑖,𝑁
𝑤𝑆,1 𝑤𝑆,2
⋯ 𝑤𝑆,𝑁
⋮
⋮
⋮
⋮
⋮
⋮
30. 中間層の出力(まで後一歩)
30/46
文脈ベクトル𝒄 = 𝒘 𝟏 + 𝒘 𝟐 + 𝒘 𝟑 + 𝒘 𝟒 と重み 𝑾 𝒕
の掛け算
𝑾 𝒕 𝒄 =
𝑤1,1 𝑤1,2
⋯ 𝑤1,𝑁
𝑤2,1 𝑤2,2
⋯ 𝑤2,𝑁
𝑤𝑖,1 𝑤𝑖,2
⋯ 𝑤𝑖,𝑁
𝑤𝑆,1 𝑤𝑆,2
⋯ 𝑤𝑆,𝑁
𝑣1+2+3+4,1
𝑣1+2+3+4,2
⋮
𝑣1+2+3+4,𝑁
=
𝒘 𝟏
𝒕
∙ 𝒄
𝒘 𝟐
𝒕
∙ 𝒄
⋮
𝒘𝒊
𝒕
∙ 𝒄
⋮
𝒘 𝑺
𝒕
∙ 𝒄
各次元の値 → 単語ベクトル 𝒘𝒊 と文脈ベクトル 𝒄 の内積
◦ 内積 → コサイン類似度の正規化する前の値
◦ 文脈と単語の共起度の強さを表すスコアのような役割
⋮
⋮
⋮
⋮
⋮
⋮
31. ようやく出番だ!Softmax 関数!
31/46
𝑓
𝒘 𝟏
𝒕
∙ 𝒄
𝒘 𝟐
𝒕
∙ 𝒄
⋮
𝒘𝒊
𝒕
∙ 𝒄
⋮
𝒘 𝑺
𝒕
∙ 𝒄
=
𝑒 𝑤1
𝑡∙𝑐
𝑒 𝑤1
𝑡∙𝑐 + 𝑒 𝑤2
𝑡∙𝑐 + ⋯ + 𝑒 𝑤𝑖
𝑡∙𝑐
+ ⋯ 𝑒 𝑤 𝑆
𝑡∙𝑐
𝑒 𝑤2
𝑡∙𝑐
𝑒 𝑤1
𝑡∙𝑐 + 𝑒 𝑤2
𝑡∙𝑐 + ⋯ + 𝑒 𝑤𝑖
𝑡∙𝑐
+ ⋯ 𝑒 𝑤 𝑆
𝑡∙𝑐
⋮
𝑒 𝑤𝑖
𝑡
∙𝑐
𝑒 𝑤1
𝑡∙𝑐 + 𝑒 𝑤2
𝑡∙𝑐 + ⋯ + 𝑒 𝑤𝑖
𝑡
∙𝑐 + ⋯ 𝑒 𝑤 𝑆
𝑡∙𝑐
⋮
𝑒 𝑤 𝑆
𝑡
∙𝑐
𝑒 𝑤1
𝑡∙𝑐 + 𝑒 𝑤2
𝑡∙𝑐 + ⋯ + 𝑒 𝑤𝑖
𝑡∙𝑐
+ ⋯ 𝑒 𝑤 𝑆
𝑡∙𝑐
=
𝑝1
𝑝2
⋮
𝑝𝑖
⋮
𝑝 𝑆
𝒘𝒊
𝒕
∙ 𝒄 → 確率値 𝑝𝑖 に変換
◦ 𝑝𝑖=ある文脈(周辺単語群)𝒄 において単語 𝒘𝒊 が出現する確率
◦ 内積の値の大小関係を考慮して確率に変換 ⇒ 出力層への入力
32. つまりこういうことだってばよ!!
32/46
𝑾 = 𝒘 𝟏 𝒘 𝟐 ⋯ 𝒘𝒊 ⋯ 𝒘 𝑺 の値を更新 → 単語ベクトル 𝒘𝒊 を獲得
◦ 正解値 → 学習データから算出した実際の確率
◦ 𝑝3(「犬」の出現確率)が高くなるように重み 𝑾 を更新
◦ 𝑾 𝒕 は 𝑾 の転置行列 → 更新する必要無し
誤差を減らすよう重みを更新
誤差
𝒑′
=
𝑝1
′
𝑝2
′
𝑝3
′
𝑝4
′
𝑝5
′
⋮
正解値
更新
𝒑 =
𝑝1
𝑝2
𝑝3
𝑝4
𝑝5
⋮
重み
𝑾
出力層中間層入力層
重み
𝑾 𝒕
Softmax
関数
「飼って」= 𝒙 𝟏
「いる」= 𝒙 𝟐
「と」= 𝒙 𝟒
「散歩」= 𝒙 𝟓
𝑤1+2+3+4,1
𝑤1+2+3+4,2
⋮
𝑤1+2+3+4,𝑁
34. doc2vec が学習するもの
34/46
文書ベクトル 𝒅𝒊 を全文書数 𝑈 個文並べた重み行列 𝑫
◦ 次元数 𝑁 は単語ベクトルと共通(文書 ≒ 新しい単語とみなす)
◦ 𝑈 次元 One-hot ベクトルを掛けると文書ベクトル 𝒅𝒊 が取り出せる
𝑫 = 𝒅 𝟏 𝒅 𝟐 ⋯ 𝒅𝒊 ⋯ 𝒅 𝑼
=
𝑑1,1 𝑑2,1 ⋯ 𝑑𝑖,1 ⋯ 𝑑 𝑈,1
𝑑1,2 𝑑2,2 ⋯ 𝑑𝑖,2 ⋯ 𝑑 𝑈,2
𝑑1,𝑁 𝑑2,𝑁 ⋯ 𝑑𝑖,𝑁 ⋯ 𝑑 𝑈,𝑁
⋮ ⋮ ⋮ ⋮
35. PV-DM(分散記憶モデル)
35/46
周辺単語 + 文書ベクトルを入力 →中間層で結合
◦ 周辺単語 + 文書ベクトル → 文書全体の文脈が加味される
◦ 文書ベクトル → 文脈を保持するメモリのように振る舞う
◦ word2vec の CBOW に対応(gensim のデフォルトはこっち)
中間層の入力
◦ 単語ベクトル 𝒘𝒋 , 𝒘𝒋+𝟏 , ⋯
◦ 文書ベクトル 𝒅𝒋
37. この後は?
37/46
𝑾 𝒕
=
𝒘 𝟏
𝒕
𝒘 𝟐
𝒕
⋮
𝒘𝒊
𝒕
⋮
𝒘 𝑺
𝒕
=
𝑤1,1 𝑤1,2
⋯ 𝑤1,𝑁
𝑤2,1 𝑤2,2
⋯ 𝑤2,𝑁
𝑤𝑖,1 𝑤𝑖,2
⋯ 𝑤𝑖,𝑁
𝑤𝑆,1 𝑤𝑆,2
⋯ 𝑤𝑆,𝑁
各単語ベクトルの転置行列 𝑾 𝒕
と掛ける
◦ word2vec の 𝑾 𝒕
と全く同じもの
◦ PV-DM:先に 𝑾 を学習してから 𝑫 を学習
◦ PV-DBOW: 𝑾 は初期値のまま更新せず 𝑫 だけ学習
◦ あとは Softmax 通して 𝑫 の重み更新して~の繰り返し
38. 評価実験 1:感情分析(単文)
38/46
使用データ:Stanford Sentiment Treebank Dataset
◦ Rotten Tomatoes(映画レビューサイト)のレビュー
◦ データ数:11,855文(0:Very Negative ~ 1:Very Positive のラベル付き)
◦ 訓練 / テスト / 検証用データ:8,544 / 2,210 / 1,110文
実験内容
◦ ラベルの5値分類:{ Very Negative, Negative, Neutral, Positive, Very Positive }
◦ ラベルの2値分類:{ Negative, Positive}
◦ PV-DM・PV-DBOW 共に文書ベクトルの次元数 = 400
◦ Window 幅 = 8(交差検証して決めたよ†)
◦ 学習した文書ベクトルをロジスティック回帰に入力 → ラベル値を予測
HTTP://GIHYO.JP/DEV/SERIAL/01/MACHINE-LEARNING/0021
40. 評価実験 2:感情分析(長文)
40/46
使用データ:IMDB Dataset
◦ IMDB(映画レビューサイト)のレビュー(全て複文)
◦ データ数:100,000文
◦ 訓練データ:75,000文(ラベル: Negative or Positive)
◦ ラベル有り / 無し:25,000 / 50,000文
◦ ラベル有りテストデータ:25,000文
実験内容
◦ ラベルの2値分類:{ Negative, Positive }
◦ PV-DM・PV-DBOW 共に文書ベクトルの次元数 = 400
◦ Window 幅 = 10(交差検証して決めたよ)
◦ 学習した文書ベクトルをロジスティック回帰に入力 → ラベル値を予測
42. 評価実験 3:情報検索
42/46
使用データ:ウェブページ
◦ 100万クエリ × 検索結果上位10件 = 10,000,000ページのスニペット
◦ これ絶対 Google からもらったろ
実験内容
◦ 3つの文書を用意
◦ 2つ → 同じクエリによりヒットしたページ(類似度高いはず)
◦ 残り1つ → 違うクエリによりヒットしたページ(類似度低いはず)
◦ 文書ベクトル間のコサイン類似度を算出 → 正しく類似度判定できるか
スニペット
44. その他の考察結果
44/46
PV-DM vs PV-DBOW → 基本的には PV-DM の方が強い
◦ PV-DM 単独で使ってもだいたい良い結果
◦ PV-DBOWと合わせて使うほうがオススメ
PV-DM での入力値の統合 → 総和より連結の方が良い
◦ 総和だと語順失われるから
◦ 結局 concatenation(連結)ってどういう操作なんですかね・・・
Window 幅は交差検証して決めようぜ!
◦ 多くのアプリケーションで上手くいく幅 → 5~12くらい
学習は並列化してやろうぜ!
◦ 16コアで25,000文書 × 平均230単語 → 平均30分で学習終了
◦ 初期の実装と比較して爆速になってる(重み更新アルゴリズムの進化)
45. まとめ
45/46
提案手法:パラグラフベクトル(doc2vec の中身)
◦ 可変長の文書 → 文書の固定長特徴ベクトル
◦ 文書中に出現する単語を予測するよう学習 → 特徴ベクトルを獲得
◦ 学習にはニューラルネットワークを使用
評価実験: 文書の極性(肯定 or 否定)判定 & 文書検索
◦ 短文・長文それぞれで既存手法を大幅に上回る
◦ BOW の欠点(語順・意味)を克服
◦ 他の NN を用いた最先端の手法を上回る精度
期待 → テキストデータ以外の時系列データへの適用
◦ 映像・音声データなど(データの前後関係に意味があるもの)