搜索引擎之同義詞、近義詞、上位詞挖掘

? ? ? ?在搜索引擎中,我們會碰到大量的同義詞需求。用戶在描述同一個東西的時候,會有各種各樣的描述。

? ? ? 在電商搜索環境中,同義詞分成好幾類:

? ? ?1. 品牌同義詞:nokia=諾基亞,Adidas=阿迪達斯

? ? ?2. 產品同義詞:投影儀≈投影機,電話≈cell phone;?automobile 和car。

? ? ?3.舊詞和新詞:自行車? -> 腳踏車

? ? ?4.南方用詞和北方用詞:番茄-> 西紅柿。

? ? ?5.傳統的同義詞:儲物柜和收納柜。

? ? ?6.錯別字同義詞:瑜伽和瑜珈(錯誤寫為斜王旁)

? ? ? ?對應英文來說,還有詞干提取,如單復數、動詞原形和ing形式;英文還有一個特殊的現象,例如兩個單詞可以分開寫,也可以合并在一起,例如keychain和key chian(鑰匙鏈),boyfriend 和boy friend。

? ? ? ?近義詞就比較多了:?包括size 大碼≈大號;短褲和熱褲;邊疆和邊疆。

? ? ? 上位詞:蘋果手機上位詞 是手機。

? ? ? ?反義詞:寬松和修身。當我們做query改寫的時候,改寫千萬不能改寫出反義詞。


? ? ? ?如果我們仔細觀察,我們會發現有的詞可以互相替換,有些詞是只能單向替換(換一個方向就不對了,例如周杰倫可以替換為周董,但是周董只能在一定情況下替換為周董)。

如何挖掘得到同義詞呢?

? ? ? ? 我們可以從用戶搜索詞、商品標題、搜索和點擊來獲取。最根本的來源還是商家對商品標題的優化,聰明的商家會把同義詞堆疊在標題中,以期望獲取到更多的流量。

? ? ? ? 從點擊日志上看,如果w1和w2是同義詞,那么搜索w1和搜索w2,理論上會有大量的共同點擊的商品x1、x2、x3等等。

? ? ? ? ?標題商品標題得到大量的語料,例如投影儀和投影機,拉桿箱(draw bar box)和旅行箱(luggage)。


? ? ? ?通過統計或者word2vec訓練詞的相關性,找到高相關度的詞。統計這些詞在標題中共同出現次數,即w1和w2的共現次數。

以下代碼查看word2vec的效果


fromgensim.test.utilsimportcommon_texts,get_tmpfile

fromgensim.modelsimportWord2Vec

model_path="./data/word2vec_en_50d.model"

model=Word2Vec.load(model_path)

model.wv['computer']

Out[6]:

array([-0.48867282, -0.10507897, -0.23138586, -0.10871041,? 0.1514824 ,

? ? ? -0.01487145, -0.385491? ,? 0.01792672, -0.32512784, -0.9063424 ,

? ? ? -0.5428677 ,? 0.6565156 ,? 0.02183418,? 0.07939139,? 0.03485253,

? ? ? ? 0.319492? , -0.27633888,? 0.52685845, -0.0582791 , -0.4844649 ,

? ? ? ? 0.249212? ,? 0.8144138 , -0.03233343, -0.36086813,? 0.34835583,

? ? ? -0.07177112,? 0.0828275 ,? 0.6612073 ,? 0.74526566, -0.12676844,

? ? ? -0.08891173, -0.08520225, -0.04619604,? 0.13580324,? 0.183159? ,

? ? ? ? 0.15528682,? 0.01727525, -0.43599448, -0.2579532 , -0.23192754,

? ? ? -0.32965428,? 0.09547858,? 0.00419413, -0.06285212,? 0.18150753,

? ? ? -0.21699691,? 0.60977536, -0.06555454,? 0.35746607, -0.06610812],

? ? ? dtype=float32)

In[13]:

model.wv.similarity('case','cover')? ? # case 和cover在描述手機殼的時候基本是同義詞

Out[13]:

0.8538678

In[22]:

defget_top_sim(word):

similary_words=model.wv.most_similar(word,topn=10)

forw,sinsimilary_words:

print(word,"=",w,s)

?

get_top_sim('case')

case = holder 0.8879926800727844

case = clamshell 0.887456476688385

case = tablet 0.8748524188995361

case = storage 0.8703626990318298

case = carrying 0.8672872185707092

case = hardcase 0.8580055236816406

case = carring 0.8558304309844971

case = seal 0.8552369475364685

case = cover 0.8538679480552673

case = stand 0.8476276993751526


? ? ? ? 通過word2vec,我們可以找出原始詞和最相似的10個單詞,然后我們統計origin 和substitute(原始詞和替代詞)在標題中的共現次數,通過這種挖掘,我們找到大量的候選詞對,這種詞通過人工review可以作為同義詞的候選。

? ? ? ?對這種情況稍微做一些擴展,我們就能得到同義query到同義query之間的對應關系。


? ? ? ? 統計分析上位詞,統計每個商品類目下的產品詞,出現次數top n的產品詞w,對應到商品的類目詞c,那么w -> c很可能 就是一個上位詞關系。

人工詞表

? ? ? ?在維護詞表的時候,我們一定不能忘記人工詞表。人工詞表的維護必須要有后臺工具。

我們如何應用人工詞表:

? ? ? ? 1、在商品標題對應的索引詞中做同義詞擴展,當不用不管用同義詞的哪一個來搜索的時候都可以搜索到。

? ? ? ? 2、在QueryProcess模塊中,對詞做同義詞擴展、做近義詞改寫,改寫出來的近義詞的權重要比原始詞的權重更小。在改寫中,我們還會遇到一個問題,Q(分詞為w1,w2,w3)改寫成q1(w1,w2)和q2(w2,w3)的時候,我們會遇到q1和q2分別和Q如何計算相關性的問題。

? ? ? ? ?3、當query 做同義詞改寫的時候,需要一些詞做context(上下文)。如“周董的新歌”可以修改為“周杰倫的新歌”,但是“周董的公司”就未必是周杰倫的公司了。

參考文獻:

1、搜索引擎同義詞反饋機制【百度搜索研發部】

2、https://www.docin.com/p-1136208118.html

3、面向檢索信息的同義詞挖掘

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容