word2vec相似度計算 短文相似度匹配

2021-10-11 02:36:04 字數 1620 閱讀 4981

一開始這樣的乙個思路,很清晰明了,而且網上相應的資料也很多,然後就開搞吧。

1、把所有短文本去掉標點符號,用jieba分詞分好詞,去除停用詞,得到分好的文字;

2、按一定規則抽取特徵詞彙,作為後期向量的每一維;

3、用sklearn庫中的原生方法countvectorizer、tfidfvectorizer等得到矩陣;

4、每個短文本計算對應得到的向量,採用k-means聚類的方法進行非監督學習。

文字分類的大致思路基本上就如上所述,具體的細節調整就視實際情況而定。然而,想法是美好的,現實是殘酷的,全部分好詞的文字,抽取的特徵詞較多,即向量的維度較大,且向量是稀疏的,在使用k-means時,會出現有個別cluster下的文字數量特別大;

經過多次嘗試之後,對countvectorizer生成的詞頻矩陣使用lda進行降維,即使用topic對文字進行建模,向量的維度是各個topic,每個維度的值就是該文字和該topic的近似度,該向量並不是稀疏的,一定程度上避免了稀疏性導致的兩文字很難匹配上的問題,實際的測試結果也證明,lda可以解決上述個別cluster下文字數量異常大的問題,相比於pca降維效果更好。

解決了乙個問題後,就是要改進以提高分類的精確度。由於短文本的先天性特徵詞數量少的原因,所以,首先要解決的就是提公升短文本的資訊量;最開始是想到的是近義詞替換,網上找到現成的近義詞詞典,把相近的詞都替換為乙個,增大短文本之間有重疊部分的概率,但是由於現成的近義詞詞典的侷限性,對於當前專案適配性不是很好,所以測試結果一般。

而後看到短文本擴充的方法,根據現有短文本的詞彙去找出關聯的幾個詞,填充的現有的短文本中去,增大文字的資訊量;word2vec,網上很多例子都是用word2vec尋找某個詞的關聯詞,所以我把近義詞替換改為了使用word2vec尋找關聯詞,但是實際結果也是一般,因為插入新詞之後,同時也會引入更多的雜訊,收效甚微。

頭疼。。。

最後,終於開竅了,發現之前使用word2vec相當於繞了一圈,使用word2vec計算出的詞向量找關聯詞,還不如直接使用詞向量,

然後,網上一搜,發現word embedding,原來如此,得到短文本每個詞的詞向量,然後做最簡單的均值處理,得到文字向量,然後用文字向量去和其他文字求相似度,效果秒殺之前的所有好嘛!!!終於可以睡個安穩覺了

相比於之前的方案,簡單高效,直接用語料庫訓練處model,然後使用該model計算出短文本中各個詞的詞向量,然後求乙個equal weighted的mean值,刪**刪的我都肉疼==!

word2vec使用的是gensim中的,還挺方便,不過大家也可以自己用tensorflow或keras自己寫乙個網路來訓練;具體的準確度還取決於語料庫的大小。

現在有乙個更快的庫就是fasttext,github上有pre-trained的各語言的model,大家可以直接拿來用。

---------2019.03.22更新---------

上文中對各個詞向量求equal weighted的mean值,是最簡單的方案;如果有需求可以加上權重,但是情況就很複雜了,比如根據不同的詞性來定相應的權重;但是這樣引出的麻煩點就是資料量達到一定的級別之後,滿足不了產線的效率要求了。

兩兩求相似度,那麼就會引出笛卡爾積的資料量巨幅膨脹的問題,解決的方向就是縮小兩兩相似度的範圍。

方案一:對於得到的文字向量,先做一次粗略的k-means聚類;然後再在每個cluster內部去做相似度的計算。

與word2vec 原來word2vec那麼簡單

說到word2vec,它可謂非結構化資料裡面的佼佼者,尤其是在推薦和nlp當中,足以體現它的優勢所在,並且多年一直備受工業界喜愛.那麼word2vec到底是怎麼個原理的,發現身邊總是有很多人問,確不能準確的說出為什麼是兩個矩陣,到底是怎麼自動反向傳播的,以及對於softmax之後那麼大的維度資料,是...

Word2Vec提取關鍵詞,詞語相似度

import sys try reload sys sys.setdefaultencoding utf 8 except pass import codecs from textrank4zh import textrank4keyword,textrank4sentence from gensi...

word2vec全部彈幕比較句子相似度情感五分類

usr bin python coding utf 8 importsys importcodecs 可以以特定編碼開啟檔案 importjieba importjieba.possegaspseg reload sys zzh說這種方法不好,不要再用了!可是真的很好用啊 qaq delmodel ...