本文講述短短文字相似度計算是基於:word2vec基礎之上。
word2vec是谷歌開源的基於兩層神經網路。採用skip-gram模型訓練,遍歷訓練文件內容,相鄰詞之間的視窗滑動。每個詞對映到一個向量,可以用來表示詞於詞之間到距離關係。
基礎準備:
1、專有詞庫建立:建立專有的個性化詞庫(依據業務的特徵針對性梳理,詞、短句、短語都可以作為最小單位的詞)。
2、切詞:不建議使用第三方切詞工具,可以開發一個切詞工具,最大化匹配切詞(可以baidu一下,後續我也會整理開源出來)。
3、word2vec的java版本,模型訓練建議採用線上資料訓練(生產環境),理由:資料量比較大,如果採用文字匯出的形式,費時費力,而且,失敗的機率很大(個人踩坑體驗)。
相似度演算法設計
由於詞向量可以計算詞與詞之間的距離。但是,現階段的需求是需要計算文字相似度。
計算過程:
句子A 詞01、詞02、詞03
句子B 詞10、詞11、詞12
1、解決問題
1、詞向量之間的距離計算方式:
a、向量乘積計算方式(未找到資料依據,但是,經過測試結果較準確)。
b、歐式距離計算方式(經典演算法)。
c、餘玄夾角計算方式(可以做嘗試,對結果做分析)。
2、詞向量權重設計標準
詞向量到權重能夠明顯改進相似度演算法的準確性。
例如:美國爆發金融危機(權重:0.9)、樓市崩盤(權重:0.8)、股災(權重0.75)、普通名詞(權重0.6),權重越大越將加強句子的相似度。
3、文字之間的相似度計算方式
方法一:首先,計算每個句子的句子向量,過程為:每個句子切詞後,將句子對應每個詞的第i列向量列數值做累加,形成的向量作為句子的句子向量。其次,就是句子向量之間的餘玄計算。
方法二:首先,對句子A做切詞,形成集合1,對句子B做切詞,形成集合2。
從集合1獲取第一個詞X1,計算詞X1到集合2裡面的最近的詞的距離。並做距離*詞權重累加為SUM1。
權重1累加= 集合1每個詞的權重的累加WEIGHT_SUM1。
從集合2獲取第一個詞Y1,計算詞Y到集合1裡面的最近的詞的距離。並做距離*詞權重累加為SUM2.
權重2累加=集合2每個詞的權重的累加WEIGHT_SUM2。
距離= (SUM1 + SUM2) / (WEIGHT_SUM1 + WEIGHT_SUM2);