1. 程式人生 > >自然語言處理之Bag-of-words,TF-IDF模型

自然語言處理之Bag-of-words,TF-IDF模型

轉自:https://blog.csdn.net/m0_37744293/article/details/78881231

Bag-of-words,TF-IDF模型

Bag-of-words model (BoW model)忽略文字的語法和語序,用一組無序的單詞(words)來表達一段文字或一個文件,近年來BoW 模型被廣泛應用於計算機視覺中,與應用於文字的BoW 類比,影象的特徵(feature)被當作單詞(Word)。 
應用於文字的BoW model

John likes to watch movies. Mary likes too.

John also likes to watch football games.
  • 根據上述兩句話中出現的單詞,構建一個字典(dictionary):

{"John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also": 6, "football": 7, "games": 8, "Mary": 9, "too": 10}

該字典中包含10個詞,每個單詞有唯一索引,注意它們的順序和出現在句子中的順序沒有關聯,根據這個詞典,我們將上述兩句話重新表達為下面的兩個向量:

 [1, 2, 1, 1, 1, 0, 0, 0, 1, 1]

 [1, 1, 1, 1, 0, 1, 1, 1, 0, 0]
  •  

這兩個向量共包含10個元素, 其中第i個元素表示字典中第i個單詞在句子中出現的次數. 因此BoW模型可認為是一種統計直方圖 (histogram). 在文字檢索和處理應用中, 可以通過該模型很方便的計算詞頻。 
應用於計算機視覺的BoW model 
影象可以類比於文件(document),影象中的單詞(words)可以定義為一個影象塊(image patch)的特徵向量,那麼影象的BoW模型即是“影象中所有影象塊的特徵向量得到的直方圖”。建立BoW模型主要為如下幾個步驟: 
1. 特徵提取 
假設有N張影象, 第i張影象影象可由n(i)個image patch組成, 也即可以由n(i)個特徵向量表達. 則總共能得到sum(n(i))個特徵向量(即單詞). 
特徵向量可以根據特徵問題自行設計, 常用特徵有Color histogram, SIFT, LBP等. 
2. 生成字典/碼本(codebook) 
對上一步得到的特徵向量進行聚類(可以使用K-means等聚類方法), 得到K個聚類中心, 用聚類中心構建碼本. 
3. 根據碼本生成直方圖 
對每張圖片, 通過最近鄰計算該圖片的每個 “單詞”應該屬於codebook中的 “哪一類”單詞, 從而得到該圖片對應於該碼本的BoW表示。 
tf-idf模型

 
目前,真正在搜尋引擎等實際應用中廣泛使用的是tf-idf模型。tf-idf模型的主要思想是:如果詞w在一篇文件d中出現的頻率高,並且在其他文件中很少出現,則認為詞w具有很好的區分能力,適合用來把文章d和其他文章區分開來。該模型主要包含了兩個因素: 
1) 詞w在文件d中的詞頻tf (Term Frequency),即詞w在文件d中出現次數count(w, d)和文件d中總詞數size(d)的比值: 
tf(w,d) = count(w, d) / size(d) 
2) 詞w在整個文件集合中的逆向文件頻率idf (Inverse Document Frequency),即文件總數n與詞w所出現檔案數docs(w, D)比值的對數: 
idf = log(n / docs(w, D)) 
tf-idf模型根據tf和idf為每一個文件d和由關鍵詞w[1]…w[k]組成的查詢串q計算一個權值,用於表示查詢串q與文件d的匹配度: 
tf-idf(q, d) 
= sum { i = 1..k | tf-idf(w[i], d) } 
= sum { i = 1..k | tf(w[i], d) * idf(w[i]) }