単語の数学的表現メモ

はじめに

単語をベクトルや確率分布などの数学的表現で扱いたい場合があったりする。
しかし、「どのようなベクトル・確率分布にすべきか?」などはタスクに依存したりして、自明じゃない。
たくさんあって、派生や新しいものもどんどんでていると思うので、どんなものがあるか調べたかぎりメモ。

One hot表現

  • 各次元が「その単語か否か」を表すベクトルで表現
  • 素性のどれか1つしか1にならなくてスパースネスの問題がでる
  • 未知語はゼロベクトルになってしまう

文字nグラムによる表現

  • 単語の表層から得られる情報を利用
    • 単語に出現している文字nグラムを利用
    • カタカナ語とか有効そう
    • 例: スカイツリー = (「スカ」の出現回数, 「カイ」の出現回数, 「イツ」の出現回数, 「アア」の出現回数, ...) = (1,1,1,0,...)

文脈ベクトル

  • 対象単語の前後/周辺にでてくる単語を利用
    • 例: スカイツリー = (1つ左に「東京」がくる頻度, 1つ右に「クッキー」がくる頻度, ...)
    • 「よく似た共起語分布を持つ単語は、よく似た意味を持つ」という考え
  • 素性(各次元)は、だいたい人手でデザインされる
  • 素性
    • 文脈窓(context window,考慮している範囲)をどのようなものにするか
    • 文脈幅(context window size,考慮している範囲の大きさ)をどの程度にするか
    • 前後の区別
    • 対象単語との相対位置の区別
    • 複数回でてくる単語を区別するか(type,token)
    • 先頭末尾にダミー文字を考慮するか否か
  • 素性値
    • 出現回数
    • 出現するか否か
    • TFIDF
  • 構文情報などを利用

外部の情報を素性に使う

  • ベクトルの各次元(素性)として使える外部の情報はいろいろ考えられる
  • (こういう情報でベクトル表現するのはなんていうんだろう)
    • 品詞,活用形
    • シソーラス情報
    • 辞書の説明文
    • WordNet
    • KnowledgeBase(wikipedia)の情報
      • Explicit Semantic Analysis: 各要素が概念を意味し、単語とそれらとの関連度を値に持つような概念ベクトルが提案されている

Distributional表現

  • (文脈ベクトルとほぼ同じ意味で、)各行が単語w、各列が文脈を表す行列Fで表現
    • 「文脈」を何にするかは文脈ベクトルと同様に検討の必要がある
  • 行列Fの列を次元圧縮して次元dにする(f=g(F)する写像gを考える)ことも検討される
  • 関連表現と次元圧縮
    • 自己組織化セマンティックマップ
    • LSA, LSI, LDA
      • それぞれの結果をさらに単語表現に使うのもありうる(単語の各トピックでの生成確率をベクトルで表現とか)
    • Hyperspace Analogue to Language
    • 独立主成分分析(ICA)
    • Random Projection

確率分布による表現

Brownクラスタリング

  • 単語を階層的クラスタリング(ハードクラスタリング)すると、各階層で単語の集合(クラス)ができる
  • 各単語は、そのクラス情報を使って表現
  • Brown Clustring Model
    • p(w_1, w_2, ..., w_T) = Πe(w_i|C(w_i))*q(C(w_i)|C(w_{i-1}))
      • C(w) : 単語wのクラス番号を返す関数
      • e(w|c) : クラス番号がcの時の単語wの出現しやすさ
      • q(c'|c) : クラス番号cからクラス番号c'への連続のしやすさ
    • Cがどの程度イケてるかをQuality(C)で測る
      • Quality(C) = Σ_c Σ_c' p(c,c') log p(c,c')/(p(c)*p(c')) + Const.
      • p(c,c') : C(w)において、cにつづいてc'が現れる回数の全体での割合
      • p(c) : C(w)において、cが出現する回数の全体での割合
    • アルゴリズム
      • 最初に各単語は別々のクラスタにしておいて、クラスタ数があらかじめ定めたk個になるまでQuality(C)が最大と成る2つのクラスタをマージするのを繰り返す
      • 最初に頻度の多いm単語に別々のクラスタにしておいて、m+1単語目以降は1単語ずつQuality(C)が最大となる2つのクラスタをマージするのを繰り返す

分散表現

  • 単語を表現するベクトルの素性や素性値を機械学習によって学習
    • おおよその場合、低次元で密な実数ベクトルを得る事を目指す
    • 潜在的な特徴(意味的な、統語的な)を学習できる可能性がある(似た単語が似たベクトルを持つ)
  • Word Embeddingsとも呼ばれる
NeuralNetwork, DeepLearning系の言語モデル
  • 言語モデルの枠組みで、各単語をNeuralNetwork内の隠れ層や写像行列を通して変換させるようにして、学習させる
    • 学習された隠れ層や写像行列が各単語の分散表現として使える
    • FeedForward NN, Recurrent NN
      • Recurrentの方は、繰り返し、前の状態を入力するので、単語の周辺情報を広く考慮させる事ができている
    • Hierarchical log-bilinear(HLBL) model
Log-linear, Skip gramモデル

参考