如何基於匹配預設句式,動態提取用戶評價標籤

網絡經濟的發展使我們的消費渠道早已不止於實體場景。來自於用戶的線上評價,成爲如今影響我們消費行爲決策的重要因素。

背景

在網上購物時,即使你已經瀏覽了商家對於商品的描述,你還是不會立即決定購買它,因爲你不確定這些描述是否準確。這時你會尋找其他購買過此商品的用戶評論,這些評論可能纔會最終說服你。

購買旅行類產品也是一樣。每天都有大量用戶在馬蜂窩平臺用“評論”的方式,記錄和評價他們在旅行中的感受和體驗。而基於對評論內容深度挖掘產生的標籤,則用一種更爲簡潔、直觀的方式彙總評論信息中的重要內容,展示給更多的用戶作爲參考依據。

因此,如何在保證標籤內容準確性的同時,體現出更符合用戶語言習慣、讓用戶更容易理解的標籤含義,對於提升用戶在馬蜂窩平臺的體驗,做出更符合自身需求的旅行決策,以及提升平臺轉化率、更好地監管商家服務品質等方面,都有很大價值。

從評價中提取標籤的方式有很多,但在實際應用中存在一些問題,比如:

1. 預設標籤

  • 做法:預先定義好一些固定標籤,由用戶在發表點評時自主選擇。
  • 不足:固定標籤數量受限,無法覆蓋用戶全部需求,並且標籤和用戶內容可能不匹配。

2. 句法分析

  • 做法:對用戶發佈的點評內容進行解構,提取主題詞和描述詞組合後作爲標籤。
  • 不足:在評價量非常大的時候,這種方法會產生大量標籤,對計算性能要求高,並且維護不便。

3.多層級標籤定義

  • 做法:預先定義標籤大類,在逐級細分,最後產生具體標籤。
  • 不足:產生大量維護工作。並且定義的層級靈活性欠佳,而且匹配的標籤是關鍵詞加指標詞,不能很好地表達用戶的言語習慣。

爲了解決以上問題,馬蜂窩推薦和搜索研發團隊提出了一種通過匹配預設句式的模式,靈活、動態提取用戶評論標籤的方式,將每個預設句式歸宿到固定標籤分類,在分類顯示中動態地採用最大數標籤作爲整個分類標籤的顯示方式,極大減少了固定標籤的數量,並且每個句式是任意的多個詞組聯合組成,使最終提取的標籤內容在更符合用戶語言習慣的同時,更好地體現了不同評論內容標籤的個性化和差異化。

基於匹配預設句式模板動態提取用戶評價標籤 

首先和大家解釋幾個關鍵的概念。

  • 標籤:標籤可以理解成對一個給定信息進行的具體描述。比如“離望京地鐵站近”、“步行到大望路地鐵站 1 分鐘”等;
  • 句式:這裏,我們可以先簡單理解成是對同一類型標籤的集合,可以理解成“評價方式”,比如上句關於標籤的舉例,都是對“離地鐵站近”的評價;
  • 標籤類別:同樣,我們先簡單理解成是對同一類句式,也就是一類“評價”的集合,比如上述句式包含在“交通方便”這類評價裏。

三者關係可以描述爲,一個標籤類別包含了 m 個句式;一個句式會產生 n 個標籤,所以一個標籤類別最多會對應 m*n 個標籤。

標籤系統總體結構

系統主要有兩部分內容:標籤句式的定義和自動化的句式生成。今天主要介紹第一部分關於如何定義句式和產生標籤

<center>圖1 - 標籤系統結構</center>

具體做法和實施步驟

一、建立句式庫

顧名思義,句式庫是對所有預設句式的集合。接下來我們會具體講解如何定義句式和產生標籤。

<center>圖2 - 句式庫示意</center>

1. 建立詞庫

詞庫是由詞組以及其包含的詞語組成的。每個詞組和詞語分別具有唯一標識;詞組是對其包含的詞語的概括和彙總;詞語爲表示該詞組的近義詞、俗語、舶來詞、英語、縮寫等。例如:

詞組:表示“班車”的名稱集合

詞語:班車,擺渡車,接泊車,shuttlebus 等是詞組中的詞語

詞組也可以表示一類描述信息,比如:

詞組:表示“距離近”的集合

詞語:近,不遠,很近,走路 1 分鐘等

<center>圖3 - 詞庫示意</center>

<center>圖4 - 詞組示意</center>

另外還會建立排除詞庫。排除詞庫中,以後不對這些詞進行處理,排除詞庫大部分是無具體意義詞,比如“我們”,“他們”之類的代詞、“呀”“耶”“哦”之類的語氣助詞,“之後”“然後”“所以”這樣沒有轉折意義的連詞等等。

2. 對句式分類,得到標籤類別

標籤類別爲用戶點評信息的概括和歸類,將同一類型的句式歸類爲一個標籤類別,每個標籤類別代表了一類相近評價內容。

比如“服務好”類,代表所有描述服務好的評價信息,該標籤類別由多個句式組成,例如“{老闆}{熱情}”,“{前臺}{專業}”,表示的都是關於酒店和民宿服務這一類評價的句式,則這些句式產生的標籤都會歸屬到相同的類型上,但不同業務的 UGC 產生的具體標籤會各具特色。

<center>圖5 - 句式分類示意</center>

3.基於詞組進行句式組合

每個句式表示一種邏輯語義,通過詞組之間的組合定義句式,表達不同內容,並具有唯一標識。

每個句式的詞組中用具體的詞語組合得到的結果定義爲其產生的標籤,如“距離牡丹園地鐵站近”“離牡丹園地鐵站很近”等均爲{離}{地鐵站}{近}句式產生的標籤。

參與句式組合的詞組分爲四類,分別是普通詞組、獨立詞組、POI、固定文字。構建句式時,並列關係的詞組之間用 OR 表示,可減少句式的定義數量。例如:

  • 句式:{提供}[{地鐵站}OR{碼頭}OR{公交站}OR{火車站}OR{機場}OR{市中心}]{班車}
  • 普通詞組:“提供”、“班車”
  • 獨立詞組:當匹配到該句式的獨立性詞組時,均需要單獨顯示,突出標籤的特色性。即“地鐵站”“碼頭”等。

    當匹配到“提供-地鐵站-班車”以及“提供-碼頭-班車”時,其表示的是不同含義或者特別含義,雖然都在提供班車同一個標籤分類下,但需要單獨顯示。同理匹配到POI(感興趣點,爲目的地下的一些景點、地點等,如故宮、泰山、火車站、公交站、醫院等)中的任意一條記錄,則該標籤均需要單獨顯示。

二.句式匹配,生成標籤

1. 生成標籤

從 UGC 內容中提取一條評價文本,按照常用標點符號加用戶常用符號爲拆分依據,得到若干子句。

<center>圖6 - UGC 評價原文</center>

1). 依次匹配

標籤類別庫中的每個句式從第一個詞組開始,用詞組中的每個詞語按長度排序後依次與子句進行匹配。

如果某一個句式中的詞語與子句中的相匹配,則記錄該詞語及這個詞語在子句中的位置,之後按句式的詞組順序,繼續匹配下一個詞組中的詞語,且匹配的開始位置是上次匹配詞語的結束位置的後一位,繼續逐個匹配詞組中的詞語信息,依此類推,不斷循環這個過程,直到這個句式的每個詞組中的一個詞語匹配成功,則記錄的每個詞組中的匹配詞語組合就是這個句式匹配的標籤。

比如句式{服務}{好},第一個詞語 {服務}匹配到的詞語是詞組中的“酒店服務”,第二個詞組{好}匹配到的詞語是“不錯”,則生成標籤“酒店服務不錯”。在另外一個子句中可能匹配到的標籤是“酒店服務好”。雖然他們表現形式爲不同的標籤,但都是由一個句式產生的同一類型的標籤。

2). 順序匹配

比如“機場有班車去酒店”,和“酒店有班車去機場”雖然包含的漢字完全一樣,但表達的卻是不同含義。

3). 詞距閾值

在匹配的過程中,如果相鄰兩個詞組距離大於一定的閾值,則認爲不匹配。

例如句式是“{房間}{大}”,評價子句是“酒店房間裏有一幅畫着藍天和大海的油畫”。如果沒有詞距的判斷,則該評價子句將匹配到“{房間}{大}”的參考句式,但是該評價子句的意思與“房間大”這一標籤表達的意思明顯不同。假設將第二預定閾值設置爲三個字的詞距,評價子句中“房間”與“大”之間的詞距超過了三個字,就可以判斷參考句式與評價子句不相匹配,避免了錯誤匹配。

由於句式中的詞語之間可能有一定的位置相關性,通過判斷匹配詞之間的距離是否符合閾值,剔除那些子句中成功匹配到的詞語但是並不表示符合句式含義的內容。

4).一“否”即否

當一個句式匹配到一個標籤時,則判斷該句子和句式是否存在否定關係,如果有則認爲不匹配。比如飯菜不好吃,則匹配不到{包含飯菜的詞組}{包含好吃的詞組}這樣的句式上。

正確匹配之後,記錄這個子句和標籤的對應關係,並找到該句式在標籤類別庫中對應的標籤類別號,建立被匹配的子句與所屬的標籤類別之間的關係。如果子句沒有成功匹配到對應的句式,則保存到未匹配的子句存儲中,之後用來繼續挖掘可用標籤信息。

關於匹配方式這裏,有一些經驗和大家分享:

對於容易混淆的詞語,應首先建立好一個混淆詞語庫,比如“好”這個詞語,對應的混淆庫的詞語有“好像”,“好似”等等。在匹配到一個詞語時發現它是易混淆詞,則查看該詞語對應的混淆詞是否在這個詞語的位置上,如果成立則認爲不匹配,比如飯菜好像是之前的。則匹配不到{包含飯菜的詞組}{包含好吃的詞組}這樣的句式上。

對於一些繁體字的點評先轉成簡體漢字,之後進行匹配。

之前,我們對一些其他匹配方式也進行了調研。比如子句先分詞,之後用每個詞去發現句式中的詞語是否存在,這樣的效率是比較高,因爲用哈希方式查找。

但這樣要依賴分詞的準確性,也無法滿足用戶個性化的需求,尤其在評價語句中,有大量的不符合語法的,口語化的表達和網絡詞語使用,所以分詞很難做到非常準確,最後得到的標籤匹配效果也不理想。

<center>圖7 - 產生的標籤</center>

2. 確定顯示標籤

在不同的目標下,會有不同評價方式,展示出來的標籤也應該體現出相應的個性化和差異化。我們根據該目標所有評論對應的標籤類別號,統計每個標籤類別中所有句式產生的標籤出現頻次,將出現頻次最高的標籤作爲該標籤類別的顯示名稱。

例如標籤類別“性價比好”有三個句式{性價比}{很好},{性價比}{高},{價格}{便宜},在某個目標下的評價統計中標籤“性價比不錯”“性價比高”“價格實惠”分別出現了 5 次,10 次,7 次,那麼關於這個標籤類別顯示的標籤爲“性價比高”。

這裏有一種特殊情況:如果在同一個標籤類別下一個句式定義中,有需要獨立顯示的標籤,則該句式產生的標籤不會和其他句式標籤合併,而是獨立顯示該句式中頻次最高的標籤。

比如句式{提供}{去}[{火車站}OR{飛機場}]{班車},其中設定{火車站}和{飛機場}是需要獨立顯示的標籤,則最後這兩個詞語對應產生的頻次最高的標籤的結果是“提供去車站班車”和“提供到機場的班車”,這兩個標籤不會和該類別(提供班車)下的其他頻次最高標籤合併,比如“去車站方便”,而是作爲兩個標籤獨立顯示。

再如,標籤類別“位置好”中包含了兩個句式,{離}{POI}{近}和{POI}{步行}{3}{分鐘},因爲POI是被設定需要獨立顯示的類別,若產生的標籤“離故宮近”的頻次爲 10,“離景山近”的頻次是 15,“故宮步行 3 分鐘”的頻次是 17,則在“位置好”標籤類別下,分別顯示標籤“故宮步行 3 分鐘”和“離景山近”。

3. 對未匹配子句分詞處理

對於未被匹配的子句進行自動產生句式處理,使用內容分類,句法分析,依存分析,詞義分析等方法自動產生標籤分類和每個分類下的句式,用戶可以對這些標籤句式審覈和調整。並可對已有詞組推薦近義詞等,豐富詞組的詞語數量。

4.定位子句

因爲之前已經保存了標籤和被匹配子句之間的關係,當點擊標籤時,會高亮顯示對應的子句。

小結

本文介紹的關於預設句式模板定義,通過靈活的詞組的組合方式,可以動態的匹配大量標籤,很好的解決了標籤定義量大的問題。

由於句式的定義符合用戶對目標的評價習慣,所以能覆蓋更多的用戶點評,提高了召回率,且模板產生的標籤更符合評價語言的表達方式。

由於文章篇幅所限,後期我們會再介紹自動的句式生產。大家可以訂閱馬蜂窩技術公衆號持續關注。謝謝。

本文作者:喬志軍,馬蜂窩搜索與推薦研發團隊內容挖掘工程師。

<center>關注馬蜂窩技術,找到更多你想要的內容</center>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章