當(dāng)Elasticsearch遇見智能客服機(jī)器人
共 2086字,需瀏覽 5分鐘
·
2022-02-09 17:41
內(nèi)容來源:2017年6月10日,趨勢科技個(gè)人消費(fèi)者部機(jī)器學(xué)習(xí)工程師楊文俊在“Elastic Meetup 南京”進(jìn)行《Elasticsearch輔助的智能客服機(jī)器人》演講分享。IT 大咖說作為獨(dú)家視頻合作方,經(jīng)主辦方和講者審閱授權(quán)發(fā)布。
閱讀字?jǐn)?shù):1605 | 4分鐘閱讀
獲取嘉賓演講視頻及PPT,請點(diǎn)擊:http://t.cn/RDLShYJ
摘要
本次分享主要會介紹一下ES是如何幫我們完成NLP的任務(wù)的。在做NLP相關(guān)任務(wù)的時(shí)候,ES的相似度算法并不足以支撐用戶的搜索,需要使用一些與語義相關(guān)的方法進(jìn)行改進(jìn)。但是ES的很多特性對我們優(yōu)化搜索體驗(yàn)是非常有幫助的。
簡介-Dr.cleaner/Dr.X系列產(chǎn)品
我們主要服務(wù)的項(xiàng)目是MAC上的APP——Dr.cleaner以及Dr.X系列產(chǎn)品。
Dr.cleaner在多個(gè)國家、地區(qū)的清理類MAC APP中排名第一,日活接近百萬。
幸福的煩惱:客服
多語言、跨時(shí)區(qū):我們的APP在國內(nèi)可能還不是非常出名,它的目前的客戶基本都在海外,其中美國是主要客戶,同時(shí)也有其它國家跟地區(qū)的用戶。
數(shù)量跟不上:隨著用戶數(shù)的急劇增加,客服的數(shù)量跟不上用戶數(shù)的增長。
解決方案:客服機(jī)器人
客服機(jī)器人首要能解決產(chǎn)品相關(guān)的問題,其次要能解決MAC/IOS相關(guān)的技術(shù)問題,多語言的問題需要通過翻譯API翻譯成英語再嘗試給出解決方案。
知識庫的構(gòu)成
任何智能客服如果沒有足夠的知識庫支撐,即使它的算法再強(qiáng)大也不行。所以我們把很多MAC相關(guān)的網(wǎng)站抓下來塞進(jìn)我們的數(shù)據(jù)庫中。
各種爬蟲
StackExcangeApple分論壇(公開數(shù)據(jù)源)、Apple Discussion、Mac world、WikiHow…
文檔搜索
當(dāng)用戶問題出現(xiàn)的時(shí)候,我們?nèi)绾螐奈臋n知識庫中找出我們需要的東西?我們之前嘗試過直接使用ES,但是距離語義還是太遠(yuǎn)了,效果并不好。
WMD也有明顯缺點(diǎn),它的算法復(fù)雜度非常高,計(jì)算速度很慢。WMD不是銀彈,即使WMD之后也可能會得到一些不太好的結(jié)果。
我們的知識庫會先經(jīng)過ES過濾一層。原始的知識庫大概是幾十萬級別,如果直接用WMD計(jì)算的話速度會非常慢。ES在一定程度上保證了它的字面差得不會那么離譜,當(dāng)字面比較相近的時(shí)候它還是能匹配出一些東西。
ES具體操作
這個(gè)是最原始的mapping,我們基于這個(gè)mapping一步步去做優(yōu)化。
優(yōu)化:BM25 or TFIDF
采用BM25之后,當(dāng)一個(gè)詞的出現(xiàn)頻率越高,到一定的閾值之后,它的影響是非常小的。
我們做了一個(gè)實(shí)驗(yàn),修改了mapping,分別使用BM25 or TFIDF。從知識庫中隨機(jī)選取100個(gè)問題和10個(gè)回答,讓ES進(jìn)行查詢,然后對比兩邊的結(jié)果。
我們一共進(jìn)行了10輪,每輪會有100個(gè)回答。如上圖可見,兩個(gè)算法的重復(fù)度大概是91%。
根據(jù)實(shí)驗(yàn)得出,BM25的作用還是比較明顯的,最終我們采用了BM25去做相似度的算法。
優(yōu)化:拼寫檢查與糾錯(cuò)
我們的方案:Term Suggester + Custom Analyzer
使用Term Suggester
支持直接輸入一句話:How to replace macbookk SSD?
Term Suggester自身調(diào)整
設(shè)定最小出現(xiàn)次數(shù)為3,修改了”string_distance”,把它改為”jarowinkler”。它默認(rèn)的相似度是基于編輯距離的一些定制化,編輯距離默認(rèn)會輸出整數(shù)。
改進(jìn)方法
增加用戶行為數(shù)據(jù)的支撐。Google的算法很大一部分就是有用戶行為數(shù)據(jù)支撐。
“瞻前顧后”,從我們的角度來說,要考慮前后兩個(gè)詞的關(guān)系。
優(yōu)化:輸入標(biāo)準(zhǔn)化
解決方案
首先使用Gensim生成備選詞組,然后使用規(guī)則過濾出比較精確的候選詞組。當(dāng)我們獲得一個(gè)正確的詞組后,可以根據(jù)候選詞組生成常見的錯(cuò)誤寫法。最后再實(shí)時(shí)處理用戶輸入和批量處理ES存儲的知識庫。
規(guī)則
規(guī)則就是純英文字符,去掉數(shù)字。主要是品牌名和版本號。
POS Tagging + 詞性過濾
WHY?
WMD的計(jì)算強(qiáng)度比較大,如果我們在輸入詞中能把一些不重要的詞去掉,就可以降低WMD的計(jì)算強(qiáng)度。
在我們的一些知識庫中,它的表達(dá)方式不一樣。但重要的詞換一個(gè)表達(dá)方式,能夠提高準(zhǔn)確率。
解決方案
當(dāng)前我們的解決方案用Python NLTK進(jìn)行分析過濾,輸出每個(gè)詞的詞性,ES存儲結(jié)果。
我們更為推薦的是使用ES分析、過濾、存儲一條龍解決方案,但是這種解決方案需要自己寫一個(gè)ES的Pos插件。
推薦方案的優(yōu)點(diǎn)
性能:Java實(shí)現(xiàn)的東西一般來說要比純Python的快,特別是在比較消耗CPU資源的時(shí)候。
簡單:邏輯不需要在ES和Python兩邊同時(shí)維護(hù)。
節(jié)省空間:NLTK的模型文件也比較大,多個(gè)Docker鏡像就意味著占用多個(gè)內(nèi)存、磁盤。
優(yōu)化:同義詞
基于Word2vec的同義詞
人為地定義同義詞很難,我們是基于Word2vec生成“同義詞”。
查詢改寫方案
我們的同義詞方案是通過同義詞進(jìn)行查詢改寫。
其它一些優(yōu)化
LTR:Learning to Rank
基于Machine Learning的重排序,模型按照預(yù)測的點(diǎn)擊概率進(jìn)行重新排序。
我今天的分享就到這里,謝謝大家!
