智能搜索聯想的需求分析以及解決方案

3 評論 12997 瀏覽 97 收藏 12 分鐘

在一些特殊行業,如果可以在特定場景下進行智能搜索和聯想的改造,那將能提高工作的效率。那么應該怎么搭建對話機器人,重點輸入智能聯想功能呢?

人機交互無非文字、語音、圖像?,F如今對話機器人越來越普及,各類智能音箱也如雨后春筍般上市,圖像識別最多的還是處于手勢指令階段。最超前的猜想是機器人能夠和人心有靈犀,識別人的思維想法,能夠想我所想,這樣人就可以隨心所欲了。

當然這個實現過程還很長,但是如果能夠實現提前預知人的想法那就會更智能一些。

看如下藥品名稱:諾氟沙星、甲氧氯普胺、氫氧化鋁、多潘立酮、硫酸沙丁胺醇、噴托維林,字雖然不難寫,但是用拼音打字要一個個打。這對于醫生來說,每天要打上數百遍,就比較浪費時間了。

今年5月9日下午,搜狗輸入法正式推出醫生版。這款輸入法專為廣大醫務工作者打造,就是為了幫助廣大醫生群體實現高效輸入而生,擁有海量醫療詞庫,與醫療場景進行精準匹配,很大程度的提高了醫生的輸入效率。

如下圖所示:

搜狗輸入法醫生版具有強大的超級聯想功能,可以提供多個醫療專用名詞,無論是專業醫生還是護士、藥劑師等醫務工作人員,再復雜的專業詞匯都能通過搜狗輸入法一氣呵成。

比如:輸入“zuoyang”后,候選詞匯中就會出現“左氧氟沙星”、“左氧氟沙星注射液”等詞,然后一鍵選擇快速輸入,節省很多選字時間。

同理,在一些特殊行業完全可以在特定場景下進行智能搜索和聯想的改造。

例如:以下保險產品名稱,對于在人機對話型智能保險機器人中出現的頻率是比較多的。

  • 國壽福祿寶寶兩全保險(分紅型);
  • 國壽康寧定期健康保障計劃;
  • 康健一生(多倍保)終身重大疾病保險;
  • 同方全球“康健一生”終身重大疾病保險;
  • 史帶“眾悅人生”白領健康保障計劃;
  • 泰康e順女性疾病保險;
  • 安聯“致青春”重疾保險計劃。

那么應該怎么搭建對話機器人重點輸入智能聯想功能呢?

其實對話型機器人,就是一個現代型的智能搜索引擎,要想變得更智能,必須建立更好的建模搜索結果的語義相關性和更直接地給用戶答案。

我們先說語義相關性,就是不論查詢詞是否包含在相應文檔中,只要查詢詞與文檔擁有語義相關性,就能將其找到。就是用戶在搜索框里只是輸入單個漢字、單詞、拼音簡寫、拼音以及一段文字時系統自動給出用戶更加準確的關鍵詞,讓用戶可以快速的知道自己要搜索的主題。

為了讓用戶更快速的輸入自己想要了解的保險產品的相關問題,可以基于solrcloud實現保險產品智能搜索聯想模塊??梢杂靡环N基于solr前綴匹配,查詢關鍵字智能提示(Suggestion)實現。

所以解決以上問題,我們可以用以下解決方案來實現:

需求分析

(1)支持前綴匹配原則

在搜索框中輸入“國壽”,搜索框下面會以同方為前綴,展示“國壽祥泰終身壽險”、“國壽鴻宇兩全保險(分紅型)”、“國壽鴻友B款保障計劃”等等搜索詞;輸入“太平”,會提示“太平福運金生B款年金保險”、“太平福盈一生終身年金保險”、“太平康愛衛士老年防癌疾病保險”等搜索詞。

(2)同時支持漢字、拼音輸入

由于中文的特點,如果搜索自動提示可以支持拼音的話,會給用戶帶來更大的方便,免得切換輸入法。比如:輸入“renshou”提示的關鍵字和輸入“人壽”提示的一樣,輸入“太平”與輸入“太平”提示的關鍵字一樣。

(3)支持大小寫輸入提示

比如:輸入“e生?!被蛘摺癊生?!倍寄芴崾境觥捌桨病癳生保”2017版”。

(4)支持拼音縮寫輸入

對于較長關鍵字,為了提高輸入效率,有必要提供拼音縮寫輸入。比如:輸入“rs”應該能提示出“人壽”相似的關鍵字,輸入“tp”也一樣能提示出“太平”關鍵字。

(5)基于用戶的歷史搜索行為,按照關鍵字熱度進行排序

為了提供suggest關鍵字的準確度,最終查詢結果,根據用戶查詢關鍵字的頻率進行排序,如:輸入[太平,taiping,tp,] —> [“太平福運金生B款年金保險“(f1)”太平福盈一生終身年金保險“(f2)”太平康愛衛士老年防癌疾病保險”(f3)…],查詢頻率f1 > f2 > f3。

解決方案

(1)關鍵字收集

當用戶輸入一個前綴時,碰到提示的候選詞很多的時候,如何取舍,哪些展示在前面,哪些展示在后面?

這就是一個搜索熱度的問題。用戶在使用對話框詢問問題時,會輸入大量的關鍵字,每一次輸入就是對關鍵字的一次投票,那么關鍵字被輸入的次數越多,它對應的查詢就比較熱門,所以需要把查詢的關鍵字記錄下來,并且統計出每個關鍵字的頻率,方便提示結果按照頻率排序。

搜索引擎會通過日志文件,把用戶每次檢索使用的所有檢索串,都記錄下來,每個查詢串的長度為1-255字節。

(2)漢字轉拼音

用戶輸入的關鍵字可能是漢字、數字、英文、拼音、特殊字符等等,由于需要實現拼音提示,我們需要把漢字轉換成拼音,java中考慮使用pinyin4j組件實現轉換。

(3)拼音縮寫提取

考慮到需要支持拼音縮寫,漢字轉換拼音的過程中,順便提取出拼音縮寫,如:“taiping”—>”tp”。

(4)技術方案:?Trie樹 + TopK算法

Trie樹即字典樹,又稱單詞查找樹或鍵樹,是一種樹形結構,是一種哈希樹的變種。典型應用是用于統計和排序大量的字符串(但不僅限于字符串),所以經常被搜索引擎系統用于文本詞頻統計。

它有3個基本性質:

  1. 根節點不包含字符,除根節點外每一個節點都只包含一個字符;
  2. 從根節點到某一節點,路徑上經過的字符連接起來,為該節點對應的字符串;
  3. 每個節點的所有子節點包含的字符都不相同。

它的優點是:最大限度地減少無謂的字符串比較,查詢效率比哈希表高。Trie是一顆存儲多個字符串的樹,相鄰節點間的邊代表一個字符,這樣樹的每條分支代表一則子串,而樹的葉節點則代表完整的字符串。和普通樹不同的地方是,相同的字符串前綴共享同一條分支。

例如:給出一組單詞inn,int,at,age,adv,ant,我們可以得到下面的Trie:

從上圖可知,當用戶輸入前綴i的時候,搜索框可能會展示以i為前綴的“in”,“inn”,“int”等關鍵詞,再當用戶輸入前綴a的時候,搜索框里面可能會提示以a為前綴的“ate”等關鍵詞。如此,實現搜索引擎智能提示suggestion的第一個步驟便清晰了,即用trie樹存儲大量字符串,當前綴固定時,存儲相對來說比較熱的后綴。

TopK算法用于解決統計熱詞的問題。解決TopK問題主要有兩種策略:hashMap統計+排序、堆排序。

hashmap統計:先對這批海量數據預處理。

具體方法是:維護一個Key為Query字串,Value為該Query出現次數的HashTable,即hash_map(Query,Value),每次讀取一個Query,如果該字串不在Table中,那么加入該字串,并且將Value值設為1;如果該字串在Table中,那么將該字串的計數加一即可,最終在O(N)的時間復雜度內用Hash表完成了統計。

我們也可以為關鍵字建立一個索引collection,利用solr前綴查詢實現。solr中的copyField能很好解決我們同時索引多個字段(漢字、pinyin、abbre)的需求,且field的multiValued屬性設置為true時能解決同一個關鍵字的多音字組合問題。

效果如下圖所示:

 

作者:老張,宜信集團保險事業部智能保險產品負責人,運營軍師聯盟創始人之一,《運營實戰手冊》作者之一。

本文由 @老張 原創發布于人人都是產品經理。未經許可,禁止轉載

題圖來自 Pixabay,基于 CC0 協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 隨著日志數據的增加,前綴樹性能問題就凸顯出來了。這個方式比較low

    來自浙江 回復
  2. K-top算符沒太看懂,是不是要有代碼基礎才行?

    來自廣東 回復
  3. 厲害厲害。。

    回復