智能搜索聯(lián)想的需求分析以及解決方案
在一些特殊行業(yè),如果可以在特定場景下進行智能搜索和聯(lián)想的改造,那將能提高工作的效率。那么應該怎么搭建對話機器人,重點輸入智能聯(lián)想功能呢?
人機交互無非文字、語音、圖像?,F(xiàn)如今對話機器人越來越普及,各類智能音箱也如雨后春筍般上市,圖像識別最多的還是處于手勢指令階段。最超前的猜想是機器人能夠和人心有靈犀,識別人的思維想法,能夠想我所想,這樣人就可以隨心所欲了。
當然這個實現(xiàn)過程還很長,但是如果能夠實現(xiàn)提前預知人的想法那就會更智能一些。
看如下藥品名稱:諾氟沙星、甲氧氯普胺、氫氧化鋁、多潘立酮、硫酸沙丁胺醇、噴托維林,字雖然不難寫,但是用拼音打字要一個個打。這對于醫(yī)生來說,每天要打上數(shù)百遍,就比較浪費時間了。
今年5月9日下午,搜狗輸入法正式推出醫(yī)生版。這款輸入法專為廣大醫(yī)務工作者打造,就是為了幫助廣大醫(yī)生群體實現(xiàn)高效輸入而生,擁有海量醫(yī)療詞庫,與醫(yī)療場景進行精準匹配,很大程度的提高了醫(yī)生的輸入效率。
如下圖所示:
搜狗輸入法醫(yī)生版具有強大的超級聯(lián)想功能,可以提供多個醫(yī)療專用名詞,無論是專業(yè)醫(yī)生還是護士、藥劑師等醫(yī)務工作人員,再復雜的專業(yè)詞匯都能通過搜狗輸入法一氣呵成。
比如:輸入“zuoyang”后,候選詞匯中就會出現(xiàn)“左氧氟沙星”、“左氧氟沙星注射液”等詞,然后一鍵選擇快速輸入,節(jié)省很多選字時間。
同理,在一些特殊行業(yè)完全可以在特定場景下進行智能搜索和聯(lián)想的改造。
例如:以下保險產(chǎn)品名稱,對于在人機對話型智能保險機器人中出現(xiàn)的頻率是比較多的。
- 國壽福祿寶寶兩全保險(分紅型);
- 國壽康寧定期健康保障計劃;
- 康健一生(多倍保)終身重大疾病保險;
- 同方全球“康健一生”終身重大疾病保險;
- 史帶“眾悅人生”白領健康保障計劃;
- 泰康e順女性疾病保險;
- 安聯(lián)“致青春”重疾保險計劃。
那么應該怎么搭建對話機器人重點輸入智能聯(lián)想功能呢?
其實對話型機器人,就是一個現(xiàn)代型的智能搜索引擎,要想變得更智能,必須建立更好的建模搜索結果的語義相關性和更直接地給用戶答案。
我們先說語義相關性,就是不論查詢詞是否包含在相應文檔中,只要查詢詞與文檔擁有語義相關性,就能將其找到。就是用戶在搜索框里只是輸入單個漢字、單詞、拼音簡寫、拼音以及一段文字時系統(tǒng)自動給出用戶更加準確的關鍵詞,讓用戶可以快速的知道自己要搜索的主題。
為了讓用戶更快速的輸入自己想要了解的保險產(chǎn)品的相關問題,可以基于solrcloud實現(xiàn)保險產(chǎn)品智能搜索聯(lián)想模塊。可以用一種基于solr前綴匹配,查詢關鍵字智能提示(Suggestion)實現(xiàn)。
所以解決以上問題,我們可以用以下解決方案來實現(xiàn):
需求分析
(1)支持前綴匹配原則
在搜索框中輸入“國壽”,搜索框下面會以同方為前綴,展示“國壽祥泰終身壽險”、“國壽鴻宇兩全保險(分紅型)”、“國壽鴻友B款保障計劃”等等搜索詞;輸入“太平”,會提示“太平福運金生B款年金保險”、“太平福盈一生終身年金保險”、“太平康愛衛(wèi)士老年防癌疾病保險”等搜索詞。
(2)同時支持漢字、拼音輸入
由于中文的特點,如果搜索自動提示可以支持拼音的話,會給用戶帶來更大的方便,免得切換輸入法。比如:輸入“renshou”提示的關鍵字和輸入“人壽”提示的一樣,輸入“太平”與輸入“太平”提示的關鍵字一樣。
(3)支持大小寫輸入提示
比如:輸入“e生?!被蛘摺癊生保”都能提示出“平安“e生?!?017版”。
(4)支持拼音縮寫輸入
對于較長關鍵字,為了提高輸入效率,有必要提供拼音縮寫輸入。比如:輸入“rs”應該能提示出“人壽”相似的關鍵字,輸入“tp”也一樣能提示出“太平”關鍵字。
(5)基于用戶的歷史搜索行為,按照關鍵字熱度進行排序
為了提供suggest關鍵字的準確度,最終查詢結果,根據(jù)用戶查詢關鍵字的頻率進行排序,如:輸入[太平,taiping,tp,] —> [“太平福運金生B款年金保險“(f1)”太平福盈一生終身年金保險“(f2)”太平康愛衛(wèi)士老年防癌疾病保險”(f3)…],查詢頻率f1 > f2 > f3。
解決方案
(1)關鍵字收集
當用戶輸入一個前綴時,碰到提示的候選詞很多的時候,如何取舍,哪些展示在前面,哪些展示在后面?
這就是一個搜索熱度的問題。用戶在使用對話框詢問問題時,會輸入大量的關鍵字,每一次輸入就是對關鍵字的一次投票,那么關鍵字被輸入的次數(shù)越多,它對應的查詢就比較熱門,所以需要把查詢的關鍵字記錄下來,并且統(tǒng)計出每個關鍵字的頻率,方便提示結果按照頻率排序。
搜索引擎會通過日志文件,把用戶每次檢索使用的所有檢索串,都記錄下來,每個查詢串的長度為1-255字節(jié)。
(2)漢字轉拼音
用戶輸入的關鍵字可能是漢字、數(shù)字、英文、拼音、特殊字符等等,由于需要實現(xiàn)拼音提示,我們需要把漢字轉換成拼音,java中考慮使用pinyin4j組件實現(xiàn)轉換。
(3)拼音縮寫提取
考慮到需要支持拼音縮寫,漢字轉換拼音的過程中,順便提取出拼音縮寫,如:“taiping”—>”tp”。
(4)技術方案:?Trie樹 + TopK算法
Trie樹即字典樹,又稱單詞查找樹或鍵樹,是一種樹形結構,是一種哈希樹的變種。典型應用是用于統(tǒng)計和排序大量的字符串(但不僅限于字符串),所以經(jīng)常被搜索引擎系統(tǒng)用于文本詞頻統(tǒng)計。
它有3個基本性質:
- 根節(jié)點不包含字符,除根節(jié)點外每一個節(jié)點都只包含一個字符;
- 從根節(jié)點到某一節(jié)點,路徑上經(jīng)過的字符連接起來,為該節(jié)點對應的字符串;
- 每個節(jié)點的所有子節(jié)點包含的字符都不相同。
它的優(yōu)點是:最大限度地減少無謂的字符串比較,查詢效率比哈希表高。Trie是一顆存儲多個字符串的樹,相鄰節(jié)點間的邊代表一個字符,這樣樹的每條分支代表一則子串,而樹的葉節(jié)點則代表完整的字符串。和普通樹不同的地方是,相同的字符串前綴共享同一條分支。
例如:給出一組單詞inn,int,at,age,adv,ant,我們可以得到下面的Trie:
從上圖可知,當用戶輸入前綴i的時候,搜索框可能會展示以i為前綴的“in”,“inn”,“int”等關鍵詞,再當用戶輸入前綴a的時候,搜索框里面可能會提示以a為前綴的“ate”等關鍵詞。如此,實現(xiàn)搜索引擎智能提示suggestion的第一個步驟便清晰了,即用trie樹存儲大量字符串,當前綴固定時,存儲相對來說比較熱的后綴。
TopK算法用于解決統(tǒng)計熱詞的問題。解決TopK問題主要有兩種策略:hashMap統(tǒng)計+排序、堆排序。
hashmap統(tǒng)計:先對這批海量數(shù)據(jù)預處理。
具體方法是:維護一個Key為Query字串,Value為該Query出現(xiàn)次數(shù)的HashTable,即hash_map(Query,Value),每次讀取一個Query,如果該字串不在Table中,那么加入該字串,并且將Value值設為1;如果該字串在Table中,那么將該字串的計數(shù)加一即可,最終在O(N)的時間復雜度內用Hash表完成了統(tǒng)計。
我們也可以為關鍵字建立一個索引collection,利用solr前綴查詢實現(xiàn)。solr中的copyField能很好解決我們同時索引多個字段(漢字、pinyin、abbre)的需求,且field的multiValued屬性設置為true時能解決同一個關鍵字的多音字組合問題。
效果如下圖所示:
作者:老張,宜信集團保險事業(yè)部智能保險產(chǎn)品負責人,運營軍師聯(lián)盟創(chuàng)始人之一,《運營實戰(zhàn)手冊》作者之一。
本文由 @老張 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉載
題圖來自 Pixabay,基于 CC0 協(xié)議
隨著日志數(shù)據(jù)的增加,前綴樹性能問題就凸顯出來了。這個方式比較low
K-top算符沒太看懂,是不是要有代碼基礎才行?
厲害厲害。。