文章を機械学習に入れるには数字にせなあかんのは分かる。ワンホット・BoW・n-gram・TF-IDF、それぞれどう数字にしてるん?
【疑問】単語を数字にする方法、ワンホット・BoW・n-gram・TF-IDF を同じ例で比べたい【G検定】
前提のおさらい。自然言語処理では、まず形態素解析などで文を語に分ける。ここから先は、分けた語をどう数字にするか
>>1
ワンホットは、語彙の数だけ並べた0の列のうち、その語の場所だけ1にする
語彙が「猫・犬・好き」の3語なら、猫 = (1, 0, 0)、犬 = (0, 1, 0)、好き = (0, 0, 1)
>>3
それやと、猫と犬が似てるかどうかが出んやろ。どの2語をとっても内積は0や
>>4
そう、ワンホットは語どうしの近さを表せん。しかも語彙が1万語なら、1万個のうち1つだけ1の、ほとんど0の長いベクトルになる
>>1
BoW(Bag of Words)は、文書の中で各語が何回出たかを数えて並べる。語の順番は捨てる
「猫が好き、猫は好き」なら(猫, 犬, 好き)=(2, 0, 2)
>>6
順番を捨てたら「犬が猫を追う」と「猫が犬を追う」が同じになるやん
>>7
それを少し補うのがn-gram。となり合うn個の語のまとまりを1つの単位として数える
2語ずつ(バイグラム)なら、「犬が/が猫/猫を」と「猫が/が犬/犬を」は別のまとまりになって、区別できる
そのかわり、まとまりの種類が爆発的に増える
TF-IDFは、BoWの回数に「その語がどれだけ珍しいか」を掛ける
は文書の数、df はその語が出てくる文書の数
>>9
文書が3つで計算してみる
全部の文書に出る「の」:。どれだけ出ても重みは0
2つに出る「猫」:
1つだけに出る「量子」:。その文書の特徴を表す語として重くなる
>>10
どこにでも出る語の重みを下げて、その文書らしい語を上げるわけか。検索で、質問と文書の近さをコサイン類似度で測るときによく使われる
>>11
どれも、語の意味の近さは表せんのは同じ。「車」と「自動車」は別の列になる。そこを解決するのが、語を短い数字の列で表す分散表現
管理人のひとこと
- ワンホットは語彙の数だけの列でその語の場所だけ1。語どうしの近さは表せず、ほとんど0の長いベクトルになる。
- BoWは文書の中の語の回数を並べ、順番は捨てる。n-gramはとなり合うn語のまとまりを数え、順番を少し残す(種類は増える)。
- TF-IDFは 。3文書なら、全部に出る語は0、2つに出る語は約0.41、1つだけなら約1.10。
- どれも意味の近さは表せない(「車」と「自動車」は別)。そこを分散表現が補う。