NLP系列文章(二)——詞袋模型


詞袋模型作爲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的計算方法如下:
TFIDF(wordi)=TF(wordi)×IDF(wordi)=count(wordi)incount(wordi)×log(NN(wordi))TF-IDF(word_i) = TF(word_i) \times IDF(word_i) \\= \frac{count(word_i)}{\sum_i^ncount(word_i)} \times \log(\frac{N}{N(word_i)})

其中,TF代表了詞彙在文本中的頻率,分子部分爲當前詞彙出現的次數,分母爲文本中所有詞彙出現的次數之和,也就是當前文本的總詞數(不去重)。IDF代表了逆文檔頻率,N代表語料中有多少文本,N(wordi)N(word_i)表示語料中包含當前詞彙的文本數量。

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.不能很好的反映文本的語義。

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