Natural-Language

量化詞袋的相似度

  • July 7, 2017

我有兩個數據集,其中包含最常見的單詞及其在兩篇不同文章中出現的頻率。

例如:

A = [apple: 23, healthy: 15, tasty: 4]
B = [apple: 19, healthy: 21, bad: 7]

兩個數據集都包含相似的單詞。我想找到一個衡量標準,讓我了解這兩篇文章是否在談論同一件事。在這種情況下,他們可能正在討論蘋果及其健康益處。

我可以得到一個簡單的衡量標準,similarity = words in A and B / total number of words但是有沒有更正式的衡量標準,也許是利用頻率作為權重的衡量標準?

讓我通過描述詞袋和文檔(計數)向量的四個可能最常見的相似性指標來解決這個問題,即比較離散變量的集合。

餘弦相似度通常最常使用,但您應該始終首先測量並確保沒有其他相似度可以為您的問題產生更好的結果,評估您是否可以使用一些更複雜的度量。除了 Jaccard 的集合相似性之外,您可以(實際上,可能想要)在使用這些度量之前對文檔計數/向量應用某種形式的TF-IDF 重新加權 (ff) 。TF 加權項甚至可能是 Okapi-BM25,IDF 項替換為corpus entropy,但最終與手頭的原始問題(BoW 相似性度量)關係不大。

請注意,第一個度量 Jaccard 相似度有一個明顯的缺點:它受文檔長度差異的影響最大,並且也沒有考慮詞頻。對於餘弦相似度和-距離您可以(或者更確切地說,應該)通過將向量標準化為單位長度(即,除了TF-IDF 重新加權)來調整向量。但即便如此,與較長的文檔相比,較短的文檔將具有更多的稀疏計數(即向量中的更多零),原因很明顯。(解決這種稀疏性差異的一種方法可能是僅包含高於某個最小截止值的單詞,使用隨文檔長度增加的動態截止值。)

在我們討論度量之前,應該提到的是,這個討論只關注對稱度量,而不對稱度量也存在(特別是KL-divergence)。

1.杰卡德相似度

這是最簡單的度量:收集兩個文檔(推文、句子……)中所有單詞的集合,和,並測量兩組共有單詞的比例:

通過收集字符(或單詞)集,此度量也適用於單詞(和文檔)-克,其中通常是 1、2 甚至可能是 3。但請注意,Jaccard 相似度有其局限性;如果順序曾經和那個只是,它們的 Jaccard 相似性仍然是完美的(即,),除非您使用剛剛描述的 n-gram“技巧”。

最後,需要注意的是Dice 係數是 Jaccard 相似度的一個稍微複雜的版本,但也沒有考慮字數,它可以很容易地從作為:.

2.餘弦相似度

餘弦相似度可能是迄今為止最流行的指標。從兩個文檔(推文、句子……)中收集所有字數的*有序集,*和,也就是說,實際上是兩個“文檔 向量”和,並測量兩個向量之間的餘弦角:

現在,因為您可以將向量歸一化為單位向量(即部分)做這個計算之前,你實際上只需要計算兩個向量之間的點積來計算相似度——無非就是所有對的乘積之和。在現代 CPU 上可以特別有效地計算點積。

  1. Spearman 等級相關係數

不是使用每個單詞的計數,而是按每個文檔的計數對每個文檔的單詞進行排序,從而為每個文檔的每個單詞分配一個排名,和. 因此,您不必對文檔向量進行長度標準化。讓我們使用 Wikipedia 命名法並調用排名生成函數(查找給定單詞的排名來自 (word, count) 元組列表,或文檔向量). 其次,讓我們定義那個距離同一個詞之間在這兩個文件中. 那是,兩個等級之間的差異,如果相等則為零,否則為非零。有了這個,係數可以從整數計算為:

請注意,這個公式有一個很強的要求:所有的排名必須是不同的,所以即使對於 tie(如果兩個詞在同一個文檔中具有相同的計數),您也需要為它們分配不同的排名;我建議,您在這些情況下使用字母數字排序。對於僅出現在一個文檔中的單詞,您將它們放在另一個文檔中的最後一個位置(再次使用相同的字母數字順序)。應該注意的是,在計算這種相似度之前,通過使用 TF-IDF 重新加權計數,可以減少非零計數單詞之間的聯繫。

如果您想保持聯繫(即,不想“人為地”使所有等級不同),或者如果您使用截止來刪除一些(單詞,計數)元組或僅選擇頂部最常見的詞,但是,您應該使用標準公式(並定義作為一個函數,它為文檔的所有字母數字順序(單詞、計數)元組生成完整的排名向量文檔向量中):

在哪裡是兩個文檔的等級之間的協方差,並且是(可能截止)等級的標準偏差(有關係)文件.

簡而言之,您可以將這種方法視​​為介於 Jaccard 相似度和余弦相似度之間的方法。特別是,它(更多一點 - 見下一個措施)對文檔之間字數之間的分佈差異具有魯棒性,同時仍將整體字頻考慮在內。然而,在大多數作品中,餘弦相似度似乎優於 Spearman 的秩校正 - 但您應該對此進行測試,並且使用 TF-IDF 和 Spearman 可能會獲得良好的結果,同時,如前所述,這種方法不需要您進行長度歸一化您的文檔向量。

  1. (皮爾遜的基於測試)距離

到目前為止,我們所有的相似性度量都假設詞頻的同質性,即假設我們的詞數的方差在集合(“語料庫”)的所有文檔中是相等的,這(希望,直覺上)不是情況。也就是說,早些時候,Kilgarriff (1997)已經證明,比我們的上述措施更適合比較字數。請注意,如果您正在關注當前的研究,對於今天的語料庫比較(例如,進行特徵選擇),您可能應該使用Bootstrap測試而不是.

基爾加里夫比較也可以應用於文檔(假設只有兩個“類”,即您的兩個文檔,因此,),並且由於它的魯棒性,它可能比迄今為止顯示的相似性度量更可取。請注意,此方法為您提供了一個距離,因此要將此值轉換為相似度,您必須取其倒數(即,此距離越大,文檔相似度越小)。讓我們定義文檔中所有單詞的計數作為和兩份文件的總和和作為. 然後,一個- 兩個文檔(文檔向量)的基於統計的距離可以從 Pearson 的基本公式得出作為:

但是,這種計算的計算成本要高得多,這本身可能解釋了為什麼大多數方法都堅持餘弦相似度,如果您可以驗證您的分類/檢索/聚類結果不會從後一種距離測量中獲益,則更是如此。此外,如鍊接的論文所示,這種距離度量似乎並沒有超過 TF-IDF 重新加權的餘弦相似度。但請注意,鏈接的論文使用“原始”術語頻率計數來計算此距離度量,並將其與 TF-IDF 重新加權餘弦相似度進行比較。正如已經討論過的,首先根據字數(即長度)對文檔向量進行歸一化通常是一個好主意,以獲得好的結果,即變換首先(您甚至可以嘗試在此之前應用 TF-IDF 文檔向量重新加權),在這種情況下,上面的公式(有點)簡化為:

引用自:https://stats.stackexchange.com/questions/289400

comments powered by Disqus