詞袋模型作爲NLP領域內比較經典的文本表示思想,有很多不同的表示方法。
BooleanVector
BooleanVector是基於布爾值與one-hot的思想而形成的。用一個詞表大小的向量來表示文本,文本中出現的詞彙在向量中對應的位置將其置爲1。比如句子1的表示結果如下:
BooleanVector(句子2) = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1]
BooleanVector的文本表示方法表示簡單,但是有很大的問題。例如,如果一個詞在文本中出現多次則和出現單次的文本表示結果一致。也就是說,如果一個句子是句子2本身,而另一個句子是句子2的兩倍複製,則最終表示的文本向量一致。
CountVector
CountVector表示方法改善了BooleanVector的缺陷。而是利用詞彙在句子中出現的數量來代替了布爾值。句子2可以表示爲如下的向量:
CountVector(句子2) = [0, 0, 0, 0, 0, 1, 1, 2, 1, 1, 1]
可以看出句子2在的
字出現的位置被置爲了2,這是由於“的”字本身在句子中出現了兩次。
TF-IDF
TF-IDF(term frequency–inverse document frequency)翻譯爲詞頻-逆文本頻率。在BooleanVector和CountVector的文本表示方法中,每個詞彙的重要性都是一樣的,這顯然不符合常識的。所以利用TF-IDF算法在語料中計算一下每個詞彙在當前文本中的權值,將其作爲文本向量的分量更爲合理。
TF-IDF的計算方法如下:
其中,TF代表了詞彙在文本中的頻率,分子部分爲當前詞彙出現的次數,分母爲文本中所有詞彙出現的次數之和,也就是當前文本的總詞數(不去重)。IDF代表了逆文檔頻率,N代表語料中有多少文本,表示語料中包含當前詞彙的文本數量。
TF揭示一個詞彙在文本中的頻率越高則越重要,IDF揭示一個詞彙出現在其他文本中的次數越多約不重要。
N-gram
由於上述的表示方式均沒有考慮詞序的不同,也就是說“北京/今天/的/天氣/比/昨天/的/好”和“好/昨天/的/天氣/比/今天/的/北京”兩個句子在文本的表示向量是一致的。這顯然不合理,詞序的不同也會導致文本含義的不同,同樣的向量不能體現文本的差異。所以N-gram的表示方式在一定程度上考慮了文本詞序的這一特徵。
以Bi-gram爲例,句子1和句子2的詞表就會有所變化:
Bi-gram詞表
我們,公司: 1
公司,坐落: 2
坐落,於 : 3
於,北京 : 4
北京,今天: 5
今天,的 : 6
的, 天氣 : 7
天氣, 比 : 8
比, 昨天 : 9
昨天,的 : 10
的,好 : 11
最終的句子1和句子2可以表示爲如下的向量:
Bi-gram(句子1) = [1,1,1,1,0,0,0,0,0,0,0]
Bi-gram(句子2) = [0,0,0,0,1,1,1,1,1,1,1]
詞帶模型它作爲NLP領域中最經典的文本表示方式,它的的思想和實現相對簡單,但是也有很多的不足:1.不能表示詞序信息,2.文本向量隨者詞表的增大而變大,3.不能很好的反映文本的語義。