在文本處理中,比如商品評(píng)論挖掘,有時(shí)需要了解每個(gè)評(píng)論分別和商品的描述之間的相似度,以此衡量評(píng)論的客觀性。
評(píng)論和商品描述的相似度越高,說明評(píng)論的用語比較官方,不帶太多感情色彩,比較注重描述商品的屬性和特性,角度更客觀。
那么Python 里面有計(jì)算文本相似度的程序包嗎,恭喜你,不僅有,而且很好很強(qiáng)大。
這是從52nlp大神的博客里面發(fā)現(xiàn)的,其實(shí)具體的處理流程和程序和他的基本一致,只要仔細(xì)研讀他的這幾篇博客文章即可。
(竟然還沒提到程序包的名字,退票。。退票。。)
其實(shí)題目就講到了這個(gè)包的名字啦:gensim
真心好用,誰用誰知道。。。
接下來主要說一下針對(duì)商品評(píng)論和商品描述之間的相似度,怎么使用gensim來計(jì)算。
原理
1、文本相似度計(jì)算的需求始于搜索引擎。
搜索引擎需要計(jì)算“用戶查詢”和爬下來的眾多”網(wǎng)頁“之間的相似度,從而把最相似的排在最前返回給用戶。
2、主要使用的算法是tf-idf
tf:term frequency 詞頻
idf:inverse document frequency 倒文檔頻率
主要思想是:如果某個(gè)詞或短語在一篇文章中出現(xiàn)的頻率高,并且在其他文章中很少出現(xiàn),則認(rèn)為此詞或者短語具有很好的類別區(qū)分能力,適合用來分類。
第一步:把每個(gè)網(wǎng)頁文本分詞,成為詞包(bag of words)。
第三步:統(tǒng)計(jì)網(wǎng)頁(文檔)總數(shù)M。
第三步:統(tǒng)計(jì)第一個(gè)網(wǎng)頁詞數(shù)N,計(jì)算第一個(gè)網(wǎng)頁第一個(gè)詞在該網(wǎng)頁中出現(xiàn)的次數(shù)n,再找出該詞在所有文檔中出現(xiàn)的次數(shù)m。則該詞的tf-idf 為:n/N * 1/(m/M) (還有其它的歸一化公式,這里是最基本最直觀的公式)
第四步:重復(fù)第三步,計(jì)算出一個(gè)網(wǎng)頁所有詞的tf-idf 值。
第五步:重復(fù)第四步,計(jì)算出所有網(wǎng)頁每個(gè)詞的tf-idf 值。
3、處理用戶查詢
第一步:對(duì)用戶查詢進(jìn)行分詞。
第二步:根據(jù)網(wǎng)頁庫(文檔)的數(shù)據(jù),計(jì)算用戶查詢中每個(gè)詞的tf-idf 值。
4、相似度的計(jì)算
使用余弦相似度來計(jì)算用戶查詢和每個(gè)網(wǎng)頁之間的夾角。夾角越小,越相似。
實(shí)戰(zhàn)
主要分成三步。
第一步,計(jì)算所有評(píng)論的tf-idf 值。
第二步,使用所有評(píng)論的tf-idf 值算出商品描述的tf-idf 值。
第三步,計(jì)算每一個(gè)評(píng)論和商品描述之間的tf-idf 余弦相似度。
第一步
① 商品評(píng)論的儲(chǔ)存形式(把Excel 中的評(píng)論數(shù)據(jù)分詞并去停用詞存儲(chǔ)在txt 文檔中):
txt 文檔。每條評(píng)論為一行。分詞并去除停用詞。效果如下圖:
② 使用gensim 計(jì)算所有評(píng)論的tf-idf 值
第二步
① 整個(gè)商品描述只有一行,經(jīng)過分詞和去停用詞處理,得到與上面相似的txt 文檔。只是它只有一行。
② 把商品描述看成是查詢,把商品評(píng)論看成是網(wǎng)頁,即可計(jì)算商品描述的tf-idf 值。
第三步
① 計(jì)算相似度,然后寫入txt 文檔中
② 寫入文檔后相似度如圖:
最后總的程序如下:
gensim
包計(jì)算文本相似度基本也是這個(gè)步驟。而且gensim 除了提供了tf-idf 算法之外,還提供了LDA,LSV等更先進(jìn)的方法。請(qǐng)各位客官慢慢享用。。。
|
|