日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

搜索词纠错、相关搜索的原理与实现

發布時間:2024/3/12 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搜索词纠错、相关搜索的原理与实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??相關搜索是檢索功能的一個擴展,用來告訴用戶自己輸入查詢詞的情況。

如果輸入錯了,可能會糾錯提示用戶:“想找的是不是”

? ? ?。

另外還會在顯著位置提供與輸入查詢詞相關的其他查詢詞,例如百度結果頁下面的提示,

? ? ?

而對于電商網站這兩個功能會合在一起,下面分別說說我對這兩個任務的理解。


一、糾錯功能,英文叫做spellcheck,在英文上做糾錯比較直接,就是看單詞的編輯距離,目標當然就是對于任意一個輸入,能在大量正確而靠譜的查詢詞中找出編輯距離滿足要求的一個或者幾個。

面對這樣的spellcheck任務,模型上就是要推算用戶輸入錯誤單詞w的條件下,是正確單詞c的概率,也就是argmaxc?P(c|w)。一般有兩種方案:一種,是http://norvig.com/spell-correct.html?介紹的辦法,另一種是lucene-suggest里spellchecker的方法。?

? ? ??1.?第一種,在norvig介紹的方法中,詳細的闡述了argmaxc?P(c|w)的轉換和求解辦法。?這個概率不好直接算,但可以根據貝葉斯定理等價于argmaxc?P(w|c)*P(c)?/?P(w),因為是比較各個c之間的大小所以P(w)可以省略,最后就變成求argmaxc?P(w|c)*P(c)就行了。P(c)可以看作是c在文本集合中出現的可能性;P(w|c)意味著本來心里想成是c結果打成了w的概率。那就很好辦了,P(c)可以從靠譜的語料中統計;P(w|c)可以用編輯距離來模擬關系,即編輯距離小的概率大。在實現上,對一個輸入word,產生出有編輯距離1的字符串,就包括幾種情況:刪除一個字符、交換臨近字符、把一個字符改成另一個、增加一個字符。這樣產生的候選集會比較大,接近80%的糾錯要求是滿足了。如果在編輯距離1的基礎上再產生編輯距離為2的更大的候選集,幾乎就覆蓋所有錯別字了。原文講得比較精細,建模思路也很清晰,建議仔細閱讀,這就不細說了。

? ? ??2.?第二種方案就是lucene的spellchecker方法,上面方案是把編輯距離的臨時產生到詞典中檢查,這種方案就是預先進行詞典索引,當然是ngram的,對一個word任意2位或者3位字符進行索引,對用戶輸入的一個字符,也同理按2或3位產生字符片段,利用OR的關系去檢索,命中多的word得分更高最可能是拼寫錯誤的。當然因為是OR查詢關系,所以會有很多也只“沾邊”的詞也被命中,所以最后除了考慮查詢命中高分的,還要對命中的和輸入的進行一步編輯距離閾值過濾。舉個例子“word”,我們會有n2:wo/n2:or/n2:rd/n3:wor/n3:ord?這些碎片進行索引,當用戶輸入一個worg,會產生n2:wo/n2:or/n2:rg/n3:wor/n3:org,這些檢索條件,會查到很多work, worth等等。細節上可以有一些增強,比如單詞兩頭的字符碎片權重更大等等。

這兩種求解argmax P(c|w)的辦法,norvig的辦法比lucene-spellcheck的辦法在線上的環節多一些,效率上估計還是差一點,但提供了很巧妙的求解思路,值得細細品味。


二、相關搜索的功能,學術界研究的比較多,有各種提法,query?rewrite,query?substitution,?query?extension等等,算法也五花八門,大多為了結果好看加入了復雜的計算,和針對數據情況的考量。一般工程上需要的是通用的辦法,再增加一些特殊的考慮來提高效果。過去曾經有幸看到一篇貌似不是很正規的論文,方法非常簡單,思路清晰,非常適合在實際工程上應用起來。論文也不記得標題了,不過思想還記得很清楚:就是尋找query詞之間的強弱聯系。

一般情況下構成query之間的關聯有三種主要的因素:

? ? ?1.?字面意思的關聯;如果一個query比另一個query?多了或者少了一個詞,那么這兩個詞肯定是有關聯的,長短語是短短語的具體化,反之是泛化,比如“筆記本?內存條?8G”就是“筆記本?內存條”的細化,反過來看“筆記本?內存條”不僅包括“8G”也包括其他容量,是更泛化的查詢詞。

? ? ?2.?用戶輸入行為的關聯;用戶在一個會話之中連續輸入的多個詞之間可以認為是有關聯的,即做一個人的需求反應在查詢詞上。比如用戶查詢了“鍵盤”他可能還有需要去買點別的,例如“鼠標”之類的,如果這樣的情況出現了多次,那么“鍵盤”和“鼠標”就可以看成是有強聯系的。

? ? ?3.?用戶點擊行為的關聯;用戶為了找一個東西的時候可能詞不對反復更換查詢詞,或者不同人用不同的表達,如果都點到一個結果,可以看做用了不同的辦法找到同樣的東西,殊途同歸的味道。那么這些落到同一結果的路徑,即query,也可以看做是有強關聯的。

這三種是比較通用的關聯關系,也很直接,并且數據能很容易獲得或者被日志記錄下來的。除了這幾種,還可以根據具體業務情況增加其他關聯考慮。最后,我們可以根據經驗或者統計分析調整多種關聯關系的權重。實現上,對一個query,需要讓查那些和它有關聯的queries,都能被找出來。于是想到可以用檢索系統,傳統的檢索系統是對文檔的內容直接分詞出一個個token后建索引,這里是對query,進行特殊“分詞”出那些關聯的token去建索引。

? ? ? 最后,如果要把糾錯和相關搜索結合在一起,就有很多綜合考慮了??傊嚓P搜索是檢索之外比較影響用戶體驗的一個服務,值得投入精力把它做好。

參考:http://blog.csdn.net/lgnlgn/article/details/8760785

總結

以上是生活随笔為你收集整理的搜索词纠错、相关搜索的原理与实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。