人類自誕生以來就伴隨著各種信息的生產(chǎn)和獲取,如今這個信息爆炸的 DT 時代,人們更是被各種信息所包圍。我們知道,人獲取信息的方式主要有被動獲取和主動獲取兩種,其中被動獲取就是推薦的方式、主動獲取就是搜索的方式。
獲取信息是人類認知世界、生存發(fā)展的剛需,搜索就是最明確的一種方式,其體現(xiàn)的動作就是“出去找”,找食物、找地點等,到了互聯(lián)網(wǎng)時代,搜索引擎(Search Engine)就是滿足找信息這個需求的最好工具,你輸入想要找的內(nèi)容(即在搜索框里輸入查詢詞,或稱為 Query),搜索引擎快速的給你最好的結(jié)果,這樣的剛需催生了谷歌、百度這樣的互聯(lián)網(wǎng)巨頭。
此次結(jié)合達觀在垂直搜索引擎建設(shè)方面的經(jīng)驗,圍繞以下內(nèi)容進行展開:
- 用戶搜索意圖的理解及其難點解析
- 如何識別用戶搜索意圖
- 達觀數(shù)據(jù)用戶搜索意圖理解引擎介紹
用戶搜索意圖的理解及其難點解析
首先,從偏技術(shù)的角度來看看搜索引擎發(fā)展的幾個階段:
第一個階段,使用倒排索引解決匹配的效率問題,使用文檔模型解決基本的相關(guān)性,使搜索引擎變得可用、可擴展,代表比如 Infoseek 。但這一階段只保證了基本的文字相關(guān)性,搜索的真正效果是無法保證的。
第二個階段,使用超鏈模型,比如谷歌的 pagerank 和百度的超鏈分析。解決權(quán)威性問題,使搜索質(zhì)量提升一個檔次。從這一階段搜索引擎開始快速普及與并進入商業(yè)化,為谷歌和百度這樣的公司帶來了豐厚的利潤。
第三個階段,一方面使用更復(fù)雜的規(guī)則和機器學(xué)習(xí)排序模型,綜合考慮了用戶的行為特征,如商品評論、點贊、收藏、購買等,使得搜索引擎的結(jié)果再次提升一個檔次,這些在電商等垂直搜索上表現(xiàn)的會更加明顯;另一方面,基于各種先進的自然語言處理技術(shù),充分挖掘用戶搜索行為日志,對 query 進行分析改寫以召回更多更好的結(jié)果。
第四個階段,從“有框”搜索時代步入更加人工智能的“無框”搜索時代。人機交互方式也將更多的是問答式的自然語言加語音的方式,而搜索引擎也更像一個智能機器人,理解人的自然語言問題,提供更加直接有效的知識和答案。這一階段目前尚處于起步階段,谷歌、Amazon 以及一些優(yōu)秀的創(chuàng)業(yè)公司都在進行積極的探索。
搜索引擎涉及的技術(shù)非常繁復(fù),既有工程架構(gòu)方面的,又有算法策略方面的。綜合來講,一個搜索引擎的技術(shù)構(gòu)建主要包含三大部分:
- 對 query 的理解;
- 對內(nèi)容(文檔)的理解;
- 對 query 和內(nèi)容(文檔)的匹配和排序。
本片文章主要探討其中的 Query Understanding,即對 query 的理解。對 query 的理解, 換句話說就是對用戶搜索意圖的理解。先看垂直搜索中的一些例子:
“附近的特價酒店”
“上海到揚州高速怎么走”
“小龍蝦最新報價”
“華為最新款手機”
“水”
這幾個例子都不能直接根據(jù) query 的字面意思去搜索,而是要理解用戶輸入文字背后的真實意圖。不過要準(zhǔn)確理解 query 背后的用戶搜索意圖可不是那么容易的。
我們來分析一下理解用戶搜索詞背后的真實意圖識別存在哪些難點:
- 用戶輸入不規(guī)范,輸入方式多樣化,使用自然語言查詢,甚至非標(biāo)準(zhǔn)的自然語言。比如上面提到的“附近的特價酒店” 、“上海到揚州高速怎么走”都是自然語言查詢的例子,又如 “披星 ( ) 月”、“吾嘗終日而思矣, 下面“。
- 用戶的查詢詞表現(xiàn)出多意圖,比如用戶搜索“變形金剛”,是指變形金剛的電影還是游戲? 搜索“仙劍奇?zhèn)b傳”是指游戲還是游戲軟件? 電影? 小說? 電商網(wǎng)站搜索“水”是指礦泉水?還是女生用的護膚水?
- 意圖強度,表現(xiàn)為不同用戶對相同的查詢有不同的需求強度。比如:宮保雞丁。宮保雞丁菜,菜譜需求占 90%。宮保雞丁歌曲,歌曲下載需求占 10%。又比如:荷塘月色。荷塘月色歌曲,歌曲下載需求占 70%。荷塘月色小區(qū),房產(chǎn)需求占 20%。荷塘月色菜,菜譜需求占 10%。
- 意圖存在時效性變化,就是隨著時間的推移一些查詢詞的意圖會發(fā)生變化。比如:華為 P10 國行版 3 月 24 日上市。3 月 21 日的查詢意圖:新聞 90%,百科 10%3 月 24 日的查詢意圖:新聞 70%,購買 25%,百科 5%5 月 1 日的查詢意圖:購買 50%,資訊 40%,其他 10%5 年以后的查詢意圖:百科 100%。
- 數(shù)據(jù)冷啟動的問題,用戶行為數(shù)據(jù)較少時,很難準(zhǔn)確獲取用戶的搜索意圖。
- 沒有固定的評估的標(biāo)準(zhǔn),CTR、MAP、MRR、nDCG 這些可以量化的指標(biāo)主要是針對搜索引擎的整體效果的,具體到用戶意圖的預(yù)測上并沒有標(biāo)準(zhǔn)的指標(biāo)。
如何識別用戶搜索意圖
首先我們來看一下用戶搜索意圖有哪些分類。一般把搜索意圖歸類為 3 種類型:導(dǎo)航類、信息類和事務(wù)類。雅虎的研究人員在此基礎(chǔ)上做了細化,將用戶搜索意圖劃分如下類別:
1.?導(dǎo)航類:用戶明確要去某個站點,但又不想自己輸入 URL,比如用戶搜索“新浪網(wǎng)“。
2.?信息類:可以細分為如下幾種子類型。
1)直接型:用戶想知道關(guān)于一個話題某個方面明確的信息,比如“地球為什么是圓的”、“哪些水果維生素含量高”。
2)間接型:用戶想了解關(guān)于某個話題的任意方面的信息,比如粉絲搜索“黃曉明”。
3)建議型:用戶希望能夠搜索到一些建議、意見或者某方面的指導(dǎo),比如“如何選股票”。
4)定位型:用戶希望了解在現(xiàn)實生活中哪里可以找到某些產(chǎn)品或服務(wù),比如“汽車維修”。
5)列表型:用戶希望找到一批能夠滿足需求的信息,比如“陸家嘴附近的酒店”。
3.?資源類:這種類型的搜索目的是希望能夠從網(wǎng)上獲取某種資源,又可以細分為以下幾種子類型。
1)下載型:希望從網(wǎng)絡(luò)某個地方下載想要的產(chǎn)品或者服務(wù),比如“USB 驅(qū)動下載”。
2)娛樂型:用戶出于消遣的目的希望獲得一些有關(guān)信息,比如“益智小游戲”。
3)交互型:用戶希望使用某個軟件或服務(wù)提供的結(jié)果,用戶希望找到一個網(wǎng)站,這個網(wǎng)站上可以直接計算房貸利息。
4)獲取型:用戶希望獲取一種資源,這種資源的使用場合不限于電腦,比如“麥當(dāng)勞優(yōu)惠券”,用戶希望搜到某個產(chǎn)品的折扣券,打印后在現(xiàn)實生活中使用。
查詢意圖理解的過程就是結(jié)合用戶歷史行為數(shù)據(jù)對 query 進行各種分析處理的過程,包括查詢糾錯、查詢詞自動提示、查詢擴展,查詢自動分類、語義標(biāo)簽等。
上面這張圖是一個具體的例子說明 query understanding 的工作過程:
稍微解釋一下這張圖:
- 用戶的原始 query 是 “michal jrdan”
- Query Correction 模塊進行拼寫糾錯后的結(jié)果為:“Michael Jordan”
- Query Suggestion 模塊進行下拉提示的結(jié)果為:“Michael Jordan berkley”和 “Michael Jordan NBA”,假設(shè)用戶選擇了“Michael Jordan berkley”
- Query Expansion 模型進行查詢擴展后的結(jié)果為:“Michael Jordan berkley”和 “Michael I. Jordan berkley”
- Query Classification 模塊進行查詢分類的結(jié)果為:academic
- 最后語義標(biāo)簽(Semantic Tagging)模塊進行命名實體識別、屬性識別后的結(jié)果為:[Michael Jordan: 人名][berkley:location]:academic
下面我們逐一的來看看這面這些模塊內(nèi)部細節(jié)。
首先看一下 Query Correction 模塊,也即查詢糾錯模塊。
對于英文,最基本的語義元素是單詞,因此拼寫錯誤主要分為兩種:一種是 Non-word Error,指單詞本身就是拼錯的,比如將“happy”拼成“hbppy”,“hbppy”本身不是一個詞。另外一種是 Real-word Error,指單詞雖拼寫正確但是結(jié)合上下文語境確是錯誤的,比如“two eyes”寫成“too eyes”,“too”在這里是明顯錯誤的拼寫。
而對于中文,最小的語義單元是字,往往不會出現(xiàn)錯字的情況,因為現(xiàn)在每個漢字幾乎都是通過輸入法輸入設(shè)備,不像手寫漢字也許會出錯。雖然漢字可以單字成詞,但是兩個或以上的漢字組合成的詞卻是更常見的語義元素,這種組合帶來了類似英文的 Non-word Error,比如“大數(shù)據(jù)”寫成“大樹據(jù)”,雖然每個字是對的,但是整體卻不是一個詞,也就是所謂的別字。
query 糾錯的具體方案有:
- 基于編輯距離
- 基于噪聲信道模型
1. 編輯距離的方法
編輯距離包括刪除(del)、增加(ins)、替換(sub)和顛倒(trans)四種轉(zhuǎn)移操作,對應(yīng)四種轉(zhuǎn)移矩陣。這些轉(zhuǎn)移矩陣的概率可以通過對語料庫統(tǒng)計大量的正確詞和錯誤詞對來得到。
中文詞語的編輯距離轉(zhuǎn)換存在較大的轉(zhuǎn)義風(fēng)險。比如,雷鋒 ->雷峰塔。中文糾錯通常以拼音為基礎(chǔ),編輯距離等其他方式為輔的策略。
2. 基于噪聲信道模型的糾錯方法
噪聲信道模型(Noisy Channel Model)最早是香農(nóng)為了模型化信道的通信問題,在信息熵概念上提出的模型,目標(biāo)是優(yōu)化噪聲信道中信號傳輸?shù)耐掏铝亢蜏?zhǔn)確率。對于自然語言處理而言,噪聲信道模型如下圖,其中 I 表示輸入,O 表示經(jīng)過噪聲信道后的輸出,I’表示經(jīng)過解碼后最有可能的輸入。
自然語言處理中的機器翻譯,詞性標(biāo)注,語音識別等多個問題都可以使用信道噪聲模型來解決,對于糾錯問題也可以使用信道噪聲模型來解決,相應(yīng)的求解問題可以用公式表達:
其中 p(x|w) 是正確的詞編輯成為錯誤詞 x 的轉(zhuǎn)移概率,p(w) 是正確詞的概率,p(x) 是錯誤詞的概率。
噪聲信道模型和 Non-word 糾錯類似,只是計算目標(biāo)從某個候選詞的最大概率變成不同位置候選詞組合形成的句子 p(s) 的最大概率,這個問題可以使用 HMM(Hidden Markov model,隱馬爾可夫模型)求解。
除了上述 2 種方法,真實的場景中,還會結(jié)合搜索日志的 session 分析和點擊模型來進行糾錯結(jié)果的排序調(diào)整。這里不再展開。
現(xiàn)在我們再看看 Query Suggest 模塊,Query Suggest,也即輸入下拉提示,根據(jù)用戶輸入的查詢詞前綴自動提示用戶最有可能輸入的完整查詢詞列表。
這里涉及幾個問題:
- Suggest 詞條來從哪里來
- 如何根據(jù)當(dāng)前的輸入快速匹配到候選 suggest 詞條列表
- 如何對候選 suggest 詞條列表進行排序
suggest 詞條通常主要來自用戶搜索歷史 query log,但存在數(shù)據(jù)冷啟動的問題,開始時缺少 query log 時如何處理?對于一些垂直的應(yīng)用場景,比如小說搜索中,suggest 詞條也可以是作品的標(biāo)題、標(biāo)簽、作家名等,電商搜索中可以是品牌詞庫、產(chǎn)品列表等。
對于 suggest 詞條列表的存儲結(jié)構(gòu)與快速匹配,如果 suggest 詞條列表不是很大,Trie 樹(又稱字典樹)是一個不錯的選擇,用 Trie 樹實現(xiàn)的主要優(yōu)點是利用字符串的公共前綴來降低查詢時間的開銷以達到提高效率的目的,實現(xiàn)也比較簡單,但缺點是節(jié)點數(shù)增加到一定程度內(nèi)存開銷會成為瓶頸。如果 suggest 詞條列表很大,可以選擇 Ternary Tree(又稱三叉搜索樹), 三叉搜索樹對 Trie 的內(nèi)存問題(空的指針數(shù)組)進行了專門優(yōu)化,具體細節(jié)大家可以 google,這里不再深入。
Suggest 候選詞的排序通常根據(jù)候選詞項的整體熱門指數(shù),即搜索的多的排在前面。當(dāng)然實際應(yīng)用場景中的排序會考慮更多的排序因素,比如個性化的因素,當(dāng)下熱門指數(shù)等因素。
Query Expansion 查詢擴展模塊
查詢詞擴展技術(shù)通過將與用戶查詢詞相近、相關(guān)的詞擴展到用戶查詢詞中的方法, 更準(zhǔn)確地描述用戶的信息需求, 去除用戶查詢詞的多義性, 從而更精確地查詢用戶所需信息。在信息檢索技術(shù)中, 查詢詞擴展是一種能夠有效提高查詢效率的技術(shù)。通過用戶搜索日志和點擊日志可以挖掘出查詢擴展詞。
我們在實踐中采用一種基于搜索日志會話局部上下文和全局上下文為語料庫使用 word2vec 構(gòu)建 skip-gram 詞向量模型,根據(jù)詞向量模型可以取得與查詢詞最相似的前 N 個詞構(gòu)成初步的相關(guān)候選詞表,然后再利用 K 近鄰算法從相關(guān)詞候選詞表選取出語義最相關(guān)的候選詞作為查詢詞的擴展詞。
搜索日志會話局部上下文是指與當(dāng)前 query 在同一個會話上下文中的共現(xiàn) query, 也是用戶對 query 的查詢重構(gòu),比如初始 query 為“變形金剛”,用戶在查詢會話中可能將 query 變換為 “變形金剛電影”進行搜索,則“變形金剛電影”為原始 query 的局部上下文。
query 的全局上下文挖掘思路:
根據(jù)查詢詞和查詢所點擊的結(jié)果構(gòu)建二部圖,利用隨機游走模型計算出每個查詢詞的文檔分布作為查詢詞的查詢向量,再利用 KL 距離來計算兩查詢向量之間的相似性。
Query Classification 查詢意圖分類模塊
通常有基于規(guī)則模板的分類方法和基于機器學(xué)習(xí)的分類方法。
一種是基于規(guī)則模板的分類方法,這種方法比較適用于查詢非常符合規(guī)則的類別,通過規(guī)則解析的方式來獲取查詢的意圖。比如:今天天氣怎么樣, 可以轉(zhuǎn)化為 [日期][實體: 天氣][詢問詞: 怎么樣]上海到曼谷的機票價格, 可以轉(zhuǎn)化為 [地點] 到 [地點][機票 / 車票 / 火車票] 價格
這種方法的對比較明確的規(guī)則性強的方式有精確的識別度,缺點是覆蓋度低,用戶查詢稍作變換可能就不 match 了,另外規(guī)則的發(fā)現(xiàn)和制定主要靠人工進行。
另一種是基于機器學(xué)習(xí)分類的方法。
如果有確定的查詢類別體系,基于機器學(xué)習(xí)的查詢意圖分類是一個不錯的選擇,可以選擇 SVM 作為分類器,關(guān)鍵在分類特征的選擇, 還有訓(xùn)練樣本的準(zhǔn)確標(biāo)注。
這個和我們之前參加過的 2014 ACM CIKM 競賽的問題類似,那年 CIKM 競賽的題目是自動識別用戶的查詢意圖(Query Intent Detection,QID):給定一批標(biāo)注過類別的搜索日志包括查詢?nèi)罩竞忘c擊日志作為訓(xùn)練樣本,其中也有部分未標(biāo)注的,類別為 unknown。
在特征的選擇方面,除了基本的 Query 的長度、Query 的頻次、Title 的長度、Title 的頻次、BM-25、Query 的首字、尾字等,我們通過對 log session 上下文的分析,進行了 Query 間特征詞匯的挖掘,運用了 query 在相同 session 中的共現(xiàn)關(guān)系,挖掘 query 之間的子串包含關(guān)系,query 和點擊的 title 之間的文本特征關(guān)系等。
在分類模型的選擇方面,我們選擇了 Ensemble 框架。Ensemble 的基本思想是充分運用不同分類算法各種的優(yōu)勢,取長補短,組合形成一個強大的分類框架。不過 Ensemble 不是簡單的把多個分類器合并起來結(jié)果,或者簡單將分類結(jié)果按固定參數(shù)線性疊加 (例如不是 a1 * ALGO1 + a2 * ALGO2 + a3 * ALGO3),而是通過訓(xùn)練 Ensemble 模型,來實現(xiàn)最優(yōu)的組合。
在 Ensemble 框架下,我們分類器分為兩個 Level: L1 層和 L2 層。L1 層是基礎(chǔ)分類器,L2 層基于 L1 層,將 L1 層的分類結(jié)果形成特征向量,再組合一些其他的特征后,形成 L2 層分類器(如 SVM)的輸入。這里需要特別留意的是用于 L2 層的訓(xùn)練的樣本必須沒有在訓(xùn)練 L1 層時使用過。
Semantic Tagging 模塊
這個模塊主要是對 query 中的命名實體進行識別,比如對電商搜索 query 中的品牌詞、產(chǎn)品詞、屬性詞、地址進行識別。對 query,用一個相對準(zhǔn)確的詞典 (品牌詞 / 產(chǎn)品詞 / 屬性詞 / 地址詞) 去標(biāo)注語料。
比如對于 ”新西蘭安佳奶粉二段“ 標(biāo)注語料如下所示:新 B-loc 西 I-loc 蘭 I-loc 安 B-brand 佳 I-brand 奶 B-product 粉 I-product 二 B-attr 段 I-attr實體詞識別模型可以通過 crf 來進行訓(xùn)練。
至此,第二部分 如何識別用戶搜索意圖 也講完了總結(jié)一下,我們首先簡單說明了用戶搜索意圖的主要分類:導(dǎo)航類、信息類、資源類,然后對搜索意圖識別的主要功能模塊查詢糾錯、查詢詞自動提示、查詢擴展,查詢自動分類、語義標(biāo)簽等實現(xiàn)思路分別進行了介紹。
達觀搜索意圖識別引擎
達觀通過 RESTAPI 接口的方式向客戶提供基于公有云和私有云的搜索服務(wù)。其中語義分析模塊包含了對用戶 query 意圖的離線挖掘和在線預(yù)測。
達觀 query 意圖識別引擎內(nèi)部組合了多粒度分詞、多歧義分詞、命名實體識別、詞匯間緊密度分析、詞匯重要性分析、同義近義詞分析、拼寫糾錯、拼音轉(zhuǎn)寫、高頻詞動態(tài)省略分析、需求詞識別、相關(guān)搜索詞、直達搜索詞分析等多個功能模塊。
引擎底層基于達觀統(tǒng)一的文本語義挖掘算法平臺:
達觀數(shù)據(jù)文本語義挖掘算法平臺是一個融合了多種算法的集成學(xué)習(xí)平臺,既包括經(jīng)典的 SVM、LR、RF、LDA 等算法,也包括 CNN、RNN、LSTM、BILSTM 等深度學(xué)習(xí)算法。比如在實踐中,我們嘗試將線性統(tǒng)計模型 CRF 和神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu) LSTM 相融合的方法,在 LSTM 的輸出端將 softmax 與 CRF 結(jié)合起來,使用 LSTM 解決提取序列的特征問題,使用 CRF 有效利用了句子級別的標(biāo)記信息,取得了不錯的效果。