搜索意圖識別淺析

此文已由做者趙斌受權網易雲社區發佈。
golang

歡迎訪問網易雲社區,瞭解更多網易技術產品運營經驗。算法


對於搜索引擎來說,不少狀況下只須要用戶在搜索輸入框內輸入所須要查詢的內容就能夠了,其他的事情就所有交給搜索引擎去處理。理想的狀況下,搜索引擎會優先返回用戶想要的結果。理想很豐滿,但總會存在一些骨感的現實,用戶經過搜索沒法找到最想要的結果。若是應用中壓根不存在用戶搜索的內容,倒還能夠理解。反之的話,就是一個大寫的尷尬。本文主要談論和解決的是使人尷尬的問題。安全


爲何會搜索不到


一、不一樣的用戶對同一種訴求的表達每每是有差異的,每每會存在一種比較常見的現象,用戶輸入的query並不能清晰準確的表達需求。session


二、搜索系統對用戶query的理解能力較弱,沒法挖掘出用戶的真實需求。架構


三、召回結果集的排序不合理,可能用戶需求的內容被排在後面而未曝光。機器學習


以上幾點大概是用戶沒法找到需求內容的主要緣由,本文主要討論的是前兩點,主要是想解決如何更好的理解用戶的需求並進行準確的召回,進而對第三點所涉及到的排序起到積極做用。學習


用戶做爲一個使用主體,其知識水平和表達能力會有差別,當不一樣用戶想搜索同一個商品時所輸入的query會存在差異,具體以下所示:優化


Alt pic


可見,對於同一個商品每每會對應不一樣的query,相對精確的有「蔓越莓膠囊歐洲」、「blackmore蔓越莓」;品牌優先的有「blackMores」;功效優先的有「女士痛經」,"泌尿系統感染";輸入錯誤的有"蔓越梅",輸入別名的有"聖潔莓";輸入較模糊的有「婦科」,「炎症」。因此說用戶的輸入通常會存在表達差別,詞彙差別,需求明確性差別等。網站


要想解決這些問題就須要經過用戶輸入的query來獲取用戶的真實需求,本文把對用戶輸入的理解稱爲QueryParser,包含:query切分(分詞),query意圖識別,query改寫(query擴展/query糾錯/query刪除等),接下來本文主要針對query意圖識別和query改寫結合在考拉海淘搜索中的具體應用來和你們聊聊。搜索引擎


1.query意圖識別


本文主要針對垂直搜索進行介紹,不一樣的垂直引擎中的query會有本身的特色。像去哪兒網的日誌中確定有不少「城市a到城市b的機票」這種pattern的query,而電商網站中確定大部分是「產品/品牌/型號/款式/價格」等類型數據的組合,音樂類應用中大部分應該是藝人和歌曲名相關的query。相比通用搜索而言,垂直搜索可能更針對性的挖掘用戶的意圖。


1.1意圖識別的難點


一、輸入不規範,前文中已有介紹,不一樣的用戶對同一訴求的表達是存在差別性的。


二、多意圖,查詢詞爲:"水",是礦泉水,仍是女生用的化妝水。


三、數據冷啓動。當用戶行爲數據較少時,很難獲取準確的意圖。


四、沒有固定的評價標準。pv,ipv,ctr,cvr這種能夠量化的指標是對搜索系統整體的評價,具體到用戶意圖的預測上並無標準的量化指標。


1.2 意圖識別的方法


1.2.1 詞表窮舉法


這種方法最簡單暴力,經過詞表直接匹配的方式來獲取查詢意圖,同時,也能夠加入比較簡單而且查詢模式較爲集中的類別。


  • 查詢詞:德國[addr] 愛他美[brand] 奶粉[product] 三段[attr]

  • 查詢模式:[brand]+[product];[product]+[attr];[brand]+[product]+[attr]


固然查詢模式是能夠作成無序的。這種意圖識別的方式實現較爲簡單,可以較準確的解決高頻詞。因爲query通常是知足20/80定律,20%的query佔據搜索80%的流量。可是,80%得長尾query是沒法經過這種方式來解決的,也就是說這種方式在識別意圖的召回可能只佔20%。同時,須要人工參與較多,很難自動化實現。


1.2.2 規則解析法


這種方法比較適用於查詢很是符合規則的類別,經過規則解析的方式來獲取查詢的意圖。好比:


  • 北京到上海今天的機票價格,能夠轉換爲[地點]到[地點][日期][汽車票/機票/火車票]價格。

  • 1噸等於多少公斤,能夠轉換爲[數字][計量單位]等於[數字][計量單位]。


這種靠規則進行意圖識別的方式對規則性較強的query有較好的識別精度,可以較好的提取準確信息。可是,在發現和制定規則的過程也須要較多的人工參與。


1.2.3 機器學習方法


意圖識別其實能夠看作是一個分類問題,針對於垂直產品的特色,定義不一樣的查詢意圖類別。能夠統計出每種意圖類別下面的經常使用詞,對於考拉海淘而言,能夠統計出類目詞,產品詞,品牌詞,型號詞,季節時間詞,促銷詞等等。對於用戶輸入的query,根據統計分類模型計算出每個意圖的機率,最終給出查詢的意圖。 可是,機器學習的方法的實現較爲複雜,主要是數據獲取和更新較困難,數據的標註也須要較準確才能訓練出較好地模型。


2. query意圖識別在考拉海淘中的應用


考拉海淘是一個電商類的產品,目前其搜索意圖相對單一爲產品購買。本文主要討論考拉海淘中用到的query改寫,類目相關,命名實體識別和Term Weight等內容。 考拉的搜索系統有大量的用戶訪問,咱們但願經過對用戶query的意圖分析來提升搜索體驗,目前,考拉系統的架構包含下圖所示的幾個部分: Alt pic


2.1 實體詞識別


經過對日誌分析,將用戶經常使用的搜索詞分爲如下四類:地址(澳洲),品牌詞(愛他美),產品詞(奶粉),屬性詞(三段)。當用戶輸入query時,若是能準確的識別每一個實體詞,就能去索引裏面精確匹配對應的字段,從而提升召回的準確率,在排序中也能夠用到實體詞進行優化。 舉一個栗子:有一個商品的標題是」AYAM BRAND 雄雞標 辣椒金槍魚「,它的類目是「冷麪/熟食/方便菜 其餘熟食」。當用戶搜「辣雞面」的時候,經過單字邏輯召回這款商品。經過實體識別會獲得這個商品的產品詞是「金槍魚」,而query要搜的產品詞是「面」。這樣就能夠判斷出其實這是一個誤召回,進而能夠將這個商品進行過濾或者是排序的時候放到較後的位置。


咱們的實體詞識別模型是經過crf來進行訓練的,語料是用戶搜索的真實query,用一個相對準確的詞典(品牌詞/產品詞/屬性詞/地址詞)去標註語料。具體的標註預料以下所示:


  • 愛 B-brand 他 I-brand 美 I-brand 奶 B-product 粉 I-product 三 B-attr 段 I-attr


訓練出的模型對於地址,品牌詞,產品詞的識別準確率平均95%左右,英文屬性詞的識別準確率還有待提升,crf模型還有一個比較好的地方是具備必定的泛化能力。另外,模型的訓練是使用考拉平臺上的商品數據,因此對非考拉平臺的產品和品牌識別的準確率也不理想。可是,最重要的是識別本平臺已有的實體,儘量準確的向用戶展現最準確的商品搜索結果。


2.2 query改寫


query改寫包括:query糾錯,query擴展,query刪除,query轉換。本文主要討論在考拉中經常使用的query擴展,query刪除和query轉換。


2.2.1 query擴展


搜索召回依賴索引數據,商品數據依賴於編輯運營的錄入,數據的完整性很可貴到保障,也就是說很難從各個角度來描述這個商品。


仍是用例子說明,一個商品的標題是「Fisher-Price 費雪 碎花兒童學步鞋」,因爲用戶輸入的差別性存在,會有用戶搜索"嬰兒鞋","寶寶鞋"。很明顯這個學步鞋偏偏用戶所需的商品,可是由於數據的不完整性而沒法被召回。這就是前文提到的有商品卻沒法展現給用戶,這是最不但願遇到的狀況。這時候就須要用到query擴展,咱們會維護一個同義詞擴展表,當用戶輸入一個query的時候,會進行同義詞擴展,從而儘量召回全部與用戶相關的商品。


2.2.2 query刪除


query刪除通常的應用場景是在當用戶輸入query過多時致使沒法正常召回,能夠經過丟詞的方式來篩選用戶的query,從而召回與query最相關的商品。


依舊用例子說明,當用戶的query爲"卡樂比水果麥片"時,因爲這款商品可能被下架,或者商品種類較少,經過query刪除,能夠把原query改寫爲「水果麥片」,進而能夠召回其餘品牌的水果麥片。query刪除是須要用到實體識別的,由於要決定query中的哪些數據被刪除才能對用戶原意圖形成的影響最小。像"卡樂比水果麥片",經過意圖識別獲得」卡樂比「是品牌,」水果麥片「是產品,顯然用戶更須要的是水果麥片,而不是「卡樂比」其餘類型的麥片。


2.2.3 query轉換


會存在這樣一種狀況,確實沒有商品是知足用戶的明確需求。 好比,用戶搜索"祖馬龍",考拉海淘並無這款商品。也沒法經過query同義詞擴展和query刪除來對原query進行處理。經過session數據能夠發現,用戶搜索「祖馬龍」後會伴隨着「香水」這個query出現,利用用戶行爲數據是能夠挖掘出「祖馬龍」和"香水"這兩個query是相關的。當用戶搜索"祖馬龍"而沒法召回時,是能夠把query轉換爲"香水"來儘量知足用戶的需求。


2.3 類目相關


當用戶搜索「Adidas」的時候,是想要搜索「運動鞋」,仍是「衣服」,又或者是「沐浴露」。固然,你可能說不一樣的用戶有不一樣的需求,這就涉及到個性化搜索的內容了,暫時不在本文的討論範圍內。若是用戶行爲數據足夠多,直接使用統計分析就能夠找到query對應的類目相關程度。固然,統計算法也是機器學習的一種。可是,仍有一部分問題是須要機器學習算法來完成的。


經過對用戶行爲數據的挖掘,發現「Adidas」對應的類目相關性排序爲:運動鞋>衣服>沐浴露。當用戶搜索「Adidas」的時候,會按照類目相關性的順序,將運動鞋排在最前面。固然,考慮到多樣性,排序時會經過類目打散將衣服和沐浴露適當的摻雜在運動鞋中。


query的類目相關性是經過用戶行爲數據進行挖掘的,一些長尾的類目雖然與query相關,因爲馬太效應卻沒法被挖掘。好比query「面膜」所挖掘出的相關性類目爲「男士面膜」/「女士面膜」/「面膜粉」等,而「孕婦面膜」這個類目卻一直處於不相關的狀態。其實,「男士面膜」/"女士面膜"/"面膜粉"/「孕婦面膜」在"面膜"這個維度都是相關的,咱們經過虛擬類目的作法來解決這種長尾問題。離線將這四個類目歸一爲一個虛擬類目,當用戶的query落在虛擬類目中的大部分類目時,認爲這個query與虛擬類目包含的其餘類目也具備相關性。


2.4 Term Weight


中文天然語言處理的第一步就是分詞,分詞的結果中,每一個詞的重要性顯然應該時候區別的。Term Weight就是爲了給這些詞不一樣的打分,根據分值就能夠判斷出核心詞,進而能夠應用到不一樣的場景。好比,有一個商品的標題爲「碗裝保溫飯盒套裝」,經過Term Weight能夠獲得核心詞爲「飯盒」。當用戶搜"碗"召回這個商品的時候,是能夠根據term weight來進行排序降權的。


經過以上幾點能夠看出,query意圖識別在一個搜索系統中是必不可少的,能夠說query意圖識別的精確程度高低決定着一次搜索質量的優劣。



免費體驗雲安全(易盾)內容安全、驗證碼等服務

11.1—11.15雲計算基礎服務全場5折起

更多網易技術、產品、運營經驗分享請點擊


相關文章:
【推薦】 從golang的垃圾回收提及(下篇)

相關文章
相關標籤/搜索