2020-06-03 nlp_02之文本向量化的幾種方式:one-hot, 文本相似度(歐氏距離、餘弦相似度), tf-idf

NLP的核心是瞭解文本的語義

one-hot (以下幾種方式都屬於one-hot的範疇)

通過構建詞典的順序,找出對應單詞的位置,

詞典:中文有20萬-30萬個常用詞, rnn和lstm中,也有使用字符集的,常用字符大概5000個

例子

詞典(只有7個單詞,即7個維度):[今天, 天氣, 不錯, 挺,風和日麗,的, 明天]

每個單詞的表示:

今天:[1, 0, 0, 0, 0, 0, 0]

不錯:[0, 0, 1, 0, 0, 0, 0]

的:    [0, 0, 0, 0, 0, 1, 0]

句子的表示:兩種方式:

1、boolean, 不管出現多少次,在相應位置都爲1

2、count, 記錄單詞出現的頻率

而一句話:今天 的 天氣 不錯 挺 風和日麗 的。用ont-hot表示的話就是:

1、boolean   [1, 1, 1, 1, 1, 1, 0]       2、count    [1, 1, 1, 1, 1, 2, 0]   

 

文本相似度

優缺點:多數使用count方法,但是count方法中,無關的詞出現的頻次會比較多,比如的,他,他們等。而比較重點的詞可能爲動詞。 也就是說出現次數少的,並不代表它的貢獻值就越小。 

1、歐式距離: d = |s1 -  s2|    d:距離    s1  s2 句子

通過boolean法或者count法獲得句子向量後(s1和 s2的長度爲詞典的長度)

例:

s1 = [x1, x2, x3]              s2 = [y1, y2, y3]

d = |s1 -  s2|  = √(x1-y1)^2 + (x2-y2)^2 + (x3-y3)^2......

缺點:只有向量大小,沒有方向。 值越小,相似度越大

2、餘弦相似度: 即考慮向量的方向,又考慮向量的大小, 值越大,相似度越大,

方向和大小折中的一種方法,  值越大,相似度越大,

d = (s1 · s2) / ( |s1| * |s2|)             # (s1 · s2) 內積,考慮方向                   ( |s1| * |s2|)  考慮向量大小

例:

s1 = [x1, x2, x3]              s2 = [y1, y2, y3]

d =  x1y1 + x2yx + x3y3 / (√x1^2 + x2^2 + x3^2  * √y1^2 + y2^2  + y3^2)

問題 並不是出現的越多,就越重要; 並不是出現的越少,就越不重要

於是就引出來-- tf-idf

 

TF-IDF  逆文本序

公式: tf-idf(w) = tf(d, w) * idf(w)

tf(d, w) : 文檔d中w的詞頻

idf(w) : log(N / N(w))   考慮單詞的重要性   N:語料庫中文檔的總數,  N(w) : 詞語w出現在多少個文檔中

1、構建詞典, 即所有文檔中的分詞後的總量total_words

2、通過 計算每篇文章的向量: 向量總長度爲total_words, 每個位置的向量是tf-idf值, 即當前文章中該詞出現的頻率 * log(總文檔數/ 有多少篇文章出現過該詞語)          如:[1*log(100/5),1*log(100/3),2*log(100/50),1*log(100/100),  0, .....]

 

ont-hot的缺點:

1、one-hot 無法確定兩個單詞的語義相似度

2、ont-hot的稀疏性    由於中文詞典過於龐大,可能有10^5 至10^6個,而一個文本只有寡寡幾個單詞的時候,矩陣就會變得非常的稀疏

 

如何評價兩個單詞之間的語義相似性?

1、歐式距離   都一致, 爲根號2

2、餘弦相似度, 都一直, 爲0   

 

怎麼解決? 

請見下篇文章,詞向量~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章