使用Lucene的新FreeTextSuggester查找长尾建议
Lucene的“ 建議”模塊提供了許多有趣的自動建議實現,以便在用戶將每個字符輸入搜索框時為他們提供實時搜索建議。
例如, WFSTCompletionLookup將所有建議及其權重編譯到一個緊湊的有限狀態傳感器中 ,從而可以對基本建議進行快速前綴查找。
AnalyzingSuggester使用Analyzer對建議和用戶查詢進行規范化, Analyzer對此進行了改進,以使Analyzer確定的空白,大小寫,停用詞,同義詞等瑣碎差別不會阻止建議匹配。
最后, AnalyzingInfixSuggester允許綴相匹配,以便每個建議(不只是前綴)內部的話可以觸發匹配更進一步。 您可以在我最近創建的Lucene / Solr Jira搜索應用程序 (例如嘗試使用“ python”)中看到該動作, 該動作可以吃我們自己的狗糧 。 這也是迄今為止唯一支持突出顯示的建議程序實現( 事實證明 ,這對其他建議程序具有挑戰性 )。
但是,所有這些建議者的共同限制是,他們只能從有限的一組先前構建的建議中提出建議。 如果您的建議是過去的用戶查詢,并且您有很多建議(例如,您是Google),那么這可能不是問題。 或者,如果天生就封閉了建議的范圍(例如Netflix搜索將建議的電影和電視節目名稱或電子商務網站上的所有產品名稱),則建議使用一組封閉的建議。
N-Gram語言模型
對于其他所有人,其中大部分傳入查詢都落入了前所未有的長尾巴中 ,Lucene的最新建議者FreeTextSuggester可以為您提供幫助! 它使用此Google博客文章中描述的方法。
與其精確匹配先前的建議,不如從所有建議中構建一個簡單的統計n-gram語言模型 ,并查看最后的標記(加上用戶鍵入的任何最終標記的前綴,如果存在),以預測最可能的下一個標記令牌。
例如,到目前為止,用戶的查詢可能是:“ flashforge 3d p”,并且由于flashforge是3D打印機的罕見品牌,因此從未向建議者添加此特定建議前綴。 但是,“ 3d打印機”在其他情況下(不同品牌)是一個經常出現的短語。 在這種情況下,即使從未明確添加“ flashforge 3d打印機”作為建議, FreeTextSuggester仍將為下一個標記看到“ 3d”和“ p”前綴并預測打印機。
創建建議者時,您可以指定模型的順序(N):N的值越大,需要更多的數據來進行正確訓練,但可以做出更準確的預測。 還構建了所有低階模型,因此,如果指定N = 3,則將得到三字母組,二元組和單字母組,它們都被編譯為單個加權FST,以最大程度地共享文本令牌。 當然,更大的N將創建更大的FST。 在實踐中,N = 3是您應該追求的最高水平,除非您同時擁有大量的建議來訓練和RAM以保持最終的FST。
為了處理稀疏數據,在給定上下文(前N-1個單詞)的出現頻率不足以做出準確的預測的情況下,建議者使用愚蠢的退避語言模型 (是的,這確實是它的名字,是的,它的表現很好!)。
我希望使用此新的FreeTextSuggester的最佳方法將是回退:您將首先使用現有的完全匹配建議者之一,但是當這些建議者找不到給定查詢的任何建議時,因為它“不尋常”且已交叉從長尾巴上FreeTextSuggester ,然后又回到FreeTextSuggester 。
谷歌似乎用這樣的模式方法的建議,以及:如果鍵入“flashforge 3D P”你應該看到這樣的事情,其中每個建議涵蓋整個查詢到目前為止(事實上,谷歌已經聽到了flashforge品牌的3D打印機!):
但是,如果您繼續輸入并輸入“ flashforge 3d打印機電源u”,則建議會發生變化:Google不會建議一個完整的查詢,而是匹配我鍵入的所有內容,而是建議最后一兩個字:
和往常一樣,此功能是非常新的功能,可能包含令人興奮的錯誤! 有關詳細信息, 請參見Jira問題LUCENE-5214 。 如果您使用這個新的建議者,請在Lucene的用戶列表上開始討論!
翻譯自: https://www.javacodegeeks.com/2014/01/finding-long-tail-suggestions-using-lucenes-new-freetextsuggester.html
總結
以上是生活随笔為你收集整理的使用Lucene的新FreeTextSuggester查找长尾建议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10怎么修改DNS地址?
- 下一篇: 北京二类医疗器械备案要求(北京二类医疗器