筆者が, IMDBデータセットを用いて, Word2Vec の学習を特に難しいことは考えずに行い, その後で単語表現の学習の際に考慮した方が良さそうなことについて勉強し, それについてまとめたのがこの記事である. メモ的側面強め.
分散表現を扱う際に
埋め込み層の単語の分散表現を, タスクに応じて学習するか否か
Embedding 層に (word2vec などで)事前学習した単語ベクトルを埋め込むが, これをタスクに用いるネットワークの学習と共に一つのパラメータとして学習するか, 固定するかの選択肢がある.また, 学習する場合には, また色々な選択肢がある.それは, 例えば,$\mathbf{E}' = \mathbf{ET}$として$\mathbf{T}$を分散表現の行列$\mathbf{E}$の代わりに学習するとかがある.
学習したほうが良さそうな場合として, 'good'と'bad'などの反義語の単語の分散表現が類似している時に学習によってそれらを引き離してやるとか, 学習によってよりタスクに適した分散表現にするだとかが考えられる.
正規化するか否か
分散表現の大きさを1に正規化するか否かの選択肢がある.だいたいの単語埋め込みでは, 大きさは,
単語の出現頻度を表す情報である場合があるみたいなので, 正規化するかどうかも検討するべき.
Word2Vec では, 多分大きさは頻度を表してないと思う.知らんけど.これを調べるには, 'the', 'a'みたいな IDF の値が小さそうな単語の分散表現の大きさを他の単語と比較してみると良いと思った.
Word2Vec で分散表現を得る際に
CBOW モデルと Skip-gram
CBOW モデルは, 文脈を各々の文脈ベクトルの和として解釈してしまうので, 文脈の前後関係の情報が失われている.
Skip-gram モデルは, 各々の文脈ベクトルを独立に扱う.
Skip-gram の方が実用ではよい成績を残している. Skip-gram はターゲットを入力として, 複数のコンテキストを推測するというタフな問題を扱っている為だと考えられる.
窓
窓の幅は, 得られるベクトルの類似度に大きな影響を与える.幅が大きいとその文書のトピックの類似度に近いもの, 幅が小さいと文法的な類似度が得られる傾向がある.
なので, タスクに応じて窓の幅を選択する必要がある.文書分類なら, 窓の幅は広い方が良いだろう.実際, 筆者がIMDBデータセットでウインドウサイズを5(ターゲットの両端の5単語)とした場合には, 'good'と'bad'の分散表現の類似度が高く, pos/neg 識別をする際には識別率を下げる原因の1つとなってしまった.
その他の手法
窓に位置情報(ターゲットの1つ前に現れた, とか)をつけることもできる. 位置情報付き窓.
他にも, 文字単位でベクトルを表現したりと色々ある.
分布論的限界
そもそも word2vec は, 分布仮説に基づいた手法なので, 分布論の限界がある. fだいたいは以下のようなもの.
- 類似性の定義. どの類似性の側面が引き出されるかは, 結果から判断するしかなく, 制御できない(操作主義的).
- 黒い羊. テキストデータから学習されたモデルには, 自明な情報が反映されない(羊をわざわざ白い羊と呼称することは不自然だが, 黒い羊と言う時にはそうではない. 羊が黒いことは, 自明ではないからである).
- 反義語. good と bad などの反義語が類似した単語と判断される
- コーパスのバイアス.学習に基づいた文書に依存した言語使用のバイアスを反映する.女性の名前は, 職業に関する単語よりも家庭に関する単語と近いとか.
- 文脈の欠如. 単語には, 複数の意味があるので, 1つの単語に対して1つのベクトルを割り当てることに問題がある.大量の文脈から学習しているのに, 結果的に得られるベクトルには, 文脈から独立したベクトルである. 例えば, 予約するという意味で用いられるbookと本として扱われるbookに対して同じベクトルを用いる. つまり, 文脈は考慮しないで, その単語が出てきたらその単語用のベクトルを使う, というように, 文脈と単語ベクトルは独立しているのである. 単語の完全な意味は, 文脈依存である.
参考文献
勉強した本
自然言語処理のための深層学習Word2Vec の実験をする際に参考にした本
ゼロから作るDeep Learning 2