網絡經濟的發展使咱們的消費渠道早已不止於實體場景。來自於用戶的線上評價,成爲現在影響咱們消費行爲決策的重要因素。網絡
在網上購物時,即便你已經瀏覽了商家對於商品的描述,你仍是不會當即決定購買它,由於你不肯定這些描述是否準確。這時你會尋找其餘購買過此商品的用戶評論,這些評論可能纔會最終說服你。性能
購買旅行類產品也是同樣。天天都有大量用戶在馬蜂窩平臺用「評論」的方式,記錄和評價他們在旅行中的感覺和體驗。而基於對評論內容深度挖掘產生的標籤,則用一種更爲簡潔、直觀的方式彙總評論信息中的重要內容,展現給更多的用戶做爲參考依據。spa
所以,如何在保證標籤內容準確性的同時,體現出更符合用戶語言習慣、讓用戶更容易理解的標籤含義,對於提高用戶在馬蜂窩平臺的體驗,作出更符合自身需求的旅行決策,以及提高平臺轉化率、更好地監管商家服務品質等方面,都有很大價值。3d
從評價中提取標籤的方式有不少,但在實際應用中存在一些問題,好比:blog
作法:預先定義好一些固定標籤,由用戶在發表點評時自主選擇。排序
不足:固定標籤數量受限,沒法覆蓋用戶所有需求,而且標籤和用戶內容可能不匹配。產品
作法:對用戶發佈的點評內容進行解構,提取主題詞和描述詞組合後做爲標籤。自動化
不足:在評價量很是大的時候,這種方法會產生大量標籤,對計算性能要求高,而且維護不便。模板
作法:預先定義標籤大類,在逐級細分,最後產生具體標籤。效率
不足:產生大量維護工做。而且定義的層級靈活性欠佳,並且匹配的標籤是關鍵詞加指標詞,不能很好地表達用戶的言語習慣。
爲了解決以上問題,馬蜂窩推薦和搜索研發團隊提出了一種經過匹配預設句式的模式,靈活、動態提取用戶評論標籤的方式,將每一個預設句式歸宿到固定標籤分類,在分類顯示中動態地採用最大數標籤做爲整個分類標籤的顯示方式,極大減小了固定標籤的數量,而且每一個句式是任意的多個詞組聯合組成,使最終提取的標籤內容在更符合用戶語言習慣的同時,更好地體現了不一樣評論內容標籤的個性化和差別化。
首先和你們解釋幾個關鍵的概念。
標籤:標籤能夠理解成對一個給定信息進行的具體描述。好比「離望京地鐵站近」、「步行到大望路地鐵站 1 分鐘」等;
句式:這裏,咱們能夠先簡單理解成是對同一類型標籤的集合,能夠理解成「評價方式」,好比上句關於標籤的舉例,都是對「離地鐵站近」的評價;
標籤類別:一樣,咱們先簡單理解成是對同一類句式,也就是一類「評價」的集合,好比上述句式包含在「交通方便」這類評價裏。
三者關係能夠描述爲,一個標籤類別包含了 m 個句式;一個句式會產生 n 個標籤,因此一個標籤類別最多會對應 m*n 個標籤。
系統主要有兩部份內容:標籤句式的定義和自動化的句式生成。今天主要介紹第一部分關於如何定義句式和產生標籤。
圖1 - 標籤系統結構
顧名思義,句式庫是對全部預設句式的集合。接下來咱們會具體講解如何定義句式和產生標籤。
圖2 - 句式庫示意
1. 創建詞庫
詞庫是由詞組以及其包含的詞語組成的。每一個詞組和詞語分別具備惟一標識;詞組是對其包含的詞語的歸納和彙總;詞語爲表示該詞組的近義詞、俗語、舶來詞、英語、縮寫等。例如:
• 詞組:表示「班車」的名稱集合
• 詞語:班車,擺渡車,接泊車,shuttlebus 等是詞組中的詞語
詞組也能夠表示一類描述信息,好比:
詞組:表示「距離近」的集合
詞語:近,不遠,很近,走路 1 分鐘等
圖3 - 詞庫示意
圖4 - 詞組示意
另外還會創建排除詞庫。排除詞庫中,之後不對這些詞進行處理,排除詞庫大部分是無具體意義詞,好比「咱們」,「他們」之類的代詞、「呀」「耶」「哦」之類的語氣助詞,「以後」「而後」「因此」這樣沒有轉折意義的連詞等等。
2.對句式分類,獲得標籤類別
標籤類別爲用戶點評信息的歸納和歸類,將同一類型的句式歸類爲一個標籤類別,每一個標籤類別表明了一類相近評價內容。
好比「服務好」類,表明全部描述服務好的評價信息,該標籤類別由多個句式組成,例如「{老闆}{熱情}」,「{前臺}{專業}」,表示的都是關於酒店和民宿服務這一類評價的句式,則這些句式產生的標籤都會歸屬到相同的類型上,但不一樣業務的 UGC 產生的具體標籤會各具特點。
圖5 - 句式分類示意
3.基於詞組進行句式組合
每一個句式表示一種邏輯語義,經過詞組之間的組合定義句式,表達不一樣內容,並具備惟一標識。
每一個句式的詞組中用具體的詞語組合獲得的結果定義爲其產生的標籤,如「距離牡丹園地鐵站近」「離牡丹園地鐵站很近」等均爲{離}{地鐵站}{近}句式產生的標籤。
參與句式組合的詞組分爲四類,分別是普通詞組、獨立詞組、POI、固定文字。構建句式時,並列關係的詞組之間用 OR 表示,可減小句式的定義數量。例如:
句式:{提供}[{地鐵站}OR{碼頭}OR{公交站}OR{火車站}OR{機場}OR{市中心}]{班車}
普通詞組:「提供」、「班車」
獨立詞組:當匹配到該句式的獨立性詞組時,均須要單獨顯示,突出標籤的特點性。即「地鐵站」「碼頭」等。
當匹配到「提供-地鐵站-班車」以及「提供-碼頭-班車」時,其表示的是不一樣含義或者特別含義,雖然都在提供班車同一個標籤分類下,但須要單獨顯示。同理匹配到POI(感興趣點,爲目的地下的一些景點、地點等,如故宮、泰山、火車站、公交站、醫院等)中的任意一條記錄,則該標籤均須要單獨顯示。
1. 生成標籤
從 UGC 內容中提取一條評價文本,按照經常使用標點符號加用戶經常使用符號爲拆分依據,獲得若干子句。
圖6 - UGC 評價原文
1). 依次匹配
標籤類別庫中的每一個句式從第一個詞組開始,用詞組中的每一個詞語按長度排序後依次與子句進行匹配。
若是某一個句式中的詞語與子句中的相匹配,則記錄該詞語及這個詞語在子句中的位置,以後按句式的詞組順序,繼續匹配下一個詞組中的詞語,且匹配的開始位置是上次匹配詞語的結束位置的後一位,繼續逐個匹配詞組中的詞語信息,依此類推,不斷循環這個過程,直到這個句式的每一個詞組中的一個詞語匹配成功,則記錄的每一個詞組中的匹配詞語組合就是這個句式匹配的標籤。
好比句式{服務}{好},第一個詞語 {服務}匹配到的詞語是詞組中的「酒店服務」,第二個詞組{好}匹配到的詞語是「不錯」,則生成標籤「酒店服務不錯」。在另一個子句中可能匹配到的標籤是「酒店服務好」。雖然他們表現形式爲不一樣的標籤,但都是由一個句式產生的同一類型的標籤。
2). 順序匹配
好比「機場有班車去酒店」,和「酒店有班車去機場」雖然包含的漢字徹底同樣,但表達的倒是不一樣含義。
3). 詞距閾值
在匹配的過程當中,若是相鄰兩個詞組距離大於必定的閾值,則認爲不匹配。
例如句式是「{房間}{大}」,評價子句是「酒店房間裏有一幅畫着藍天和大海的油畫」。若是沒有詞距的判斷,則該評價子句將匹配到「{房間}{大}」的參考句式,可是該評價子句的意思與「房間大」這一標籤表達的意思明顯不一樣。假設將第二預約閾值設置爲三個字的詞距,評價子句中「房間」與「大」之間的詞距超過了三個字,就能夠判斷參考句式與評價子句不相匹配,避免了錯誤匹配。
因爲句式中的詞語之間可能有必定的位置相關性,經過判斷匹配詞之間的距離是否符合閾值,剔除那些子句中成功匹配到的詞語可是並不表示符合句式含義的內容。
4).一「否」即否
當一個句式匹配到一個標籤時,則判斷該句子和句式是否存在否認關係,若是有則認爲不匹配。好比飯菜很差吃,則匹配不到{包含飯菜的詞組}{包含好吃的詞組}這樣的句式上。
正確匹配以後,記錄這個子句和標籤的對應關係,並找到該句式在標籤類別庫中對應的標籤類別號,創建被匹配的子句與所屬的標籤類別之間的關係。若是子句沒有成功匹配到對應的句式,則保存到未匹配的子句存儲中,以後用來繼續挖掘可用標籤信息。
關於匹配方式這裏,有一些經驗和你們分享:
對於容易混淆的詞語,應首先創建好一個混淆詞語庫,好比「好」這個詞語,對應的混淆庫的詞語有「好像」,「好似」等等。在匹配到一個詞語時發現它是易混淆詞,則查看該詞語對應的混淆詞是否在這個詞語的位置上,若是成立則認爲不匹配,好比飯菜好像是以前的。則匹配不到{包含飯菜的詞組}{包含好吃的詞組}這樣的句式上。
對於一些繁體字的點評先轉成簡體漢字,以後進行匹配。
以前,咱們對一些其餘匹配方式也進行了調研。好比子句先分詞,以後用每一個詞去發現句式中的詞語是否存在,這樣的效率是比較高,由於用哈希方式查找。
但這樣要依賴分詞的準確性,也沒法知足用戶個性化的需求,尤爲在評價語句中,有大量的不符合語法的,口語化的表達和網絡詞語使用,因此分詞很難作到很是準確,最後獲得的標籤匹配效果也不理想。
圖7 - 產生的標籤
2. 肯定顯示標籤
在不一樣的目標下,會有不一樣評價方式,展現出來的標籤也應該體現出相應的個性化和差別化。咱們根據該目標全部評論對應的標籤類別號,統計每一個標籤類別中全部句式產生的標籤出現頻次,將出現頻次最高的標籤做爲該標籤類別的顯示名稱。
例如標籤類別「性價比好」有三個句式{性價比}{很好},{性價比}{高},{價格}{便宜},在某個目標下的評價統計中標籤「性價比不錯」「性價比高」「價格實惠」分別出現了 5 次,10 次,7 次,那麼關於這個標籤類別顯示的標籤爲「性價比高」。
這裏有一種特殊狀況:若是在同一個標籤類別下一個句式定義中,有須要獨立顯示的標籤,則該句式產生的標籤不會和其餘句式標籤合併,而是獨立顯示該句式中頻次最高的標籤。
好比句式{提供}{去}[{火車站}OR{飛機場}]{班車},其中設定{火車站}和{飛機場}是須要獨立顯示的標籤,則最後這兩個詞語對應產生的頻次最高的標籤的結果是「提供去車站班車」和「提供到機場的班車」,這兩個標籤不會和該類別(提供班車)下的其餘頻次最高標籤合併,好比「去車站方便」,而是做爲兩個標籤獨立顯示。
再如,標籤類別「位置好」中包含了兩個句式,{離}{POI}{近}和{POI}{步行}{3}{分鐘},由於POI是被設定須要獨立顯示的類別,若產生的標籤「離故宮近」的頻次爲 10,「離景山近」的頻次是 15,「故宮步行 3 分鐘」的頻次是 17,則在「位置好」標籤類別下,分別顯示標籤「故宮步行 3 分鐘」和「離景山近」。
3. 對未匹配子句分詞處理
對於未被匹配的子句進行自動產生句式處理,使用內容分類,句法分析,依存分析,詞義分析等方法自動產生標籤分類和每一個分類下的句式,用戶能夠對這些標籤句式審覈和調整。並可對已有詞組推薦近義詞等,豐富詞組的詞語數量。
4.定位子句
由於以前已經保存了標籤和被匹配子句之間的關係,當點擊標籤時,會高亮顯示對應的子句。
本文介紹的關於預設句式模板定義,經過靈活的詞組的組合方式,能夠動態的匹配大量標籤,很好的解決了標籤訂義量大的問題。
因爲句式的定義符合用戶對目標的評價習慣,因此能覆蓋更多的用戶點評,提升了召回率,且模板產生的標籤更符合評價語言的表達方式。
因爲文章篇幅所限,後期咱們會再介紹自動的句式生產。你們能夠訂閱馬蜂窩技術公衆號持續關注。謝謝。
本文做者:喬志軍,馬蜂窩搜索與推薦研發團隊內容挖掘工程師。
關注馬蜂窩技術,找到更多你想要的內容