- Fasttextとword2vecの差を調査する
- 実際にあそんでみよう
- Fasttext, word2vecで行っているディープラーニングでの応用例
- 具体的な応用例として、単語のバズ検知を設計して、正しく動くことを確認したので、紹介する
- Appendix
- Skip gramではある特定の単語の前後の単語の出現確率を測定することでベクトル化する
図1. ある目的の単語から、周辺の単語の確率を計算してベクトル化する
- Word2vecとfasttextではこれを実装したもの
- ただし、fasttextにはsubwordという仕組みが入っている
図2. softmaxで共起確率を計算する
2017年2~3月のTwitterのデータ3GByteを学習させたデータがあるので、遊んでみよう
学習、予想用のプログラムをgithubに、学習済みのmodelをpython3のpickle形式でdropboxにおいてある
ただの言葉の相関の他、言語の足し算引き算した結果、何の単語に近くなるか計算できます。
図3. word2vecの単語ベクトルの足し算引き算の例
ただの言葉の相関の他、言語の足し算引き算した結果、何の単語に近くなるか計算できます。
- fasttextはsubword分割という単語の中の一部が近いと近くなる特性がある
図4. 文脈(skip gram)に依存せず近くなるので、好ましく働くことも、好ましくなく働くこともある
- Word2Vecで“艦これ”の関連度を計算すると、同じような文脈で用いられる、他のゲームタイトルが多く混じってしまう
- これはメリットなのか、デメリットなのか、使用用途でわかれそう
- Word2Vecの特徴として、単語の演算が謎理論(理論的な裏付けが無いように見える)で演算できる
- fasttextもベクトル表現なので、足し算・引き算が可能なので比較する
- fasttextとw2vで結果が異なる
- CNN, RNNなどのディープラーニングの素性とする
- 例えば、100万語で、10単語の文章の判別問題の際、one-hotを利用すると、壊滅的なテンソルサイズになりGPUに乗らない
- そこで意味関係を内包しているという仮説がある、fasttext, w2vを使うことで、256次元程度にシュリンクできる
- Deep Learningの出力、特にRNNのテキスト生成系のモデルにおいて、出力次元が爆発してしまう問題に対応するため、出力
- 出力をLinear + mean square errorとすることで、直接ベクトルを当てに行くことができる(復元するにはconsine類似度などで逆引きする必要がある)
- 言葉はバズると使用法が変化する
- 今までの主流は単語の出現頻度の変化の観測
- 単語の使われ方の変化を観測する
- 2次元にエンベットされていると仮定すると、図のようになる
- 技術的な課題点の解決
-- 問題点:エンベッティングの際、初期値依存性があり、ベクトルが回転したり、端によったりすると歪んだりする。
-- 解決策:絶対座標に変換するため、基準となる単語を選択(16000単語前後)
-- 解決策:基準となる単語郡からのコサイン類似度の変化量を各観測したい単語ごとに作成
-- 解決策:このベクトルをZとする
- Z(プ)ベクトル(長いので略す)をデイリーで作成していき、n日のZ(プ)ベクトルをZ(プ,n)ベクトルとする
- Z(プ,n)ベクトルとZ(プ,n-1)ベクトルとのユークリッド距離を計算する
Dの大きさが大きいほど、使用法が変化したと考えることができ、バズや言葉の進化を定量的に観測することができる。
- これを日にちのタイムシリーズでグラフを描画すると下図のようになる
例えば、意味の変化量が少ない「ソシャゲ」という単語と、激しく文脈が変化した「プレミアムフライデー」という単語の変化量Dは大きく違う
- 図を見ると企業と企業の代表者の関係をみると、一定の法則があることがわかる
- 出現する単語の並びの関連に相関があるので、言語が異なっても似たような分布になる
文字の文化が共通していれば、翻訳可能?