LinkedIn前不久發布兩篇文章分享了自主研發的文本分析平臺Voices的概覽和技術細節。LinkedIn認為傾聽用戶意見回饋很重要,發現反饋的主要話題、用戶的熱點話題和痛點,能夠做出改善產品、提高用戶體驗等重要的商業決定。下面是整理后的技術要點。
文本分析平臺及主題挖掘
文本數據挖掘是,計算機通過高級數據挖掘和自然語言處理,對非結構化的文字進行機器學習。文本數據挖掘包含但不局限以下幾點:主題挖掘、文本分類、文本聚類、語義庫的搭建。LinkedIn的Voices文本分析平臺架構如下圖,本文將側重講述Voices平臺中的主題挖掘模塊(Topic Mining)。
在機器學習和自然語言處理等領域,主題挖掘是尋找是主題模型,主題模型是用來在一系列文檔中發現抽象主題的一種統計模型。如果一篇文章有一個中心思想,那么一些特定詞語會更頻繁的出現。簡單而言,主題挖掘就是要找到表達文章中心思想的主題詞。主題挖掘的主要原因有兩個:首先,文件數量迅速增長,已經依靠人工的方式實現對全部文本信息高效閱讀和理解,將該流程自動化已經勢在必行。其次,主題挖掘可以提高文字重度依賴應用的使用效率和產出影響,比如搜索加索引、文本總結、聚類、分類和情感分析。
從大量文字中找到主題是一個高度復雜的工作,不僅因為人的自然語言具有多層面特性,而且很難找到準確體現資料核心思想的詞語。目前現有方案如:TF-IDF(Term Frequency–Inverse Document Frequency)、互信息(co-occurrence)和LDA(隱含狄利克雷分布Latent Dirichlet allocation);但是,這些算法要么是無法做到只提煉出重要主題,要么是不具高度擴展性和高效性。Voices的主題挖掘模塊由LinkedIn自主研發,通過Hadoop和Spark實現,可以幫助LinkedIn規模化地進行用戶反饋分析。
實現主題挖掘的四個技術步驟
Voices文本挖掘平臺中的主題挖掘模塊處理工作,是一個流水線處理系統,由多個自然語言模型組成的來完成。Voices的模塊化步驟如下:
一. 詞性標注(POS:Part-of-speech)
句子被切割成單獨的詞語之后,需要為每個詞語加上詞性標注。常見的POS為名詞、動詞、形容詞、副詞等。我們使用Java實現了斯坦福日志-線性化詞性標注。每一個被分析的文件,先被切割成句子,然后分別標上詞性。POS標簽采用的是英文賓州樹庫標記。譬如,“我昨天去過了華盛頓公園”分詞之后變成“我/PRP 昨天/NN 去過了/VBD 華盛頓/NNP 公園/NN” 。
二. POS模式匹配
接下來的目標是根據預定義的分詞詞性模式,選擇出符合的POS詞性標注順序。POS模式采用正則表達式的格式,表達式可能會包含一個可遞歸的名詞短語、一個動賓短語或者一個主謂短語等。我們觀察發現,客戶的反饋中,最重要的主題都是由實體名詞構成,比如“主頁”、“簡介”;或者是事件 - 由動詞名詞組成的短語或動作,比如“注銷賬戶”、“同意付款”。這使得我們創立最佳模式去尋找類似的實體詞或者事件短語。為了更好地匹配,LinkedIn創立了兩種不同的POS模式。
第一種適用于實體詞,可遞歸的名詞短語,名詞前面可以加零或若干個修飾限定語。這樣,“第二個賬號”分詞加標簽之后為“第二個/JJ賬號/NN”,最終模式匹配之后我們得到的兩個短語“賬號”、“第二個賬號。
第二種定義的是可遞歸的動詞短語,即包含一個或者多個連續動詞。比如,短語“已經通過”對應為“已經/VBZ通過/VBN”;該短語滿足模式匹配可以得出兩個短語“通過”、“已經通過”。
基于上面模式對名詞、動詞短語的匹配方式,我們為兩類不同的主題創建了下面的三種匹配模式。
實體詞主題:一個名詞短語,比如“郵箱”、“信用卡”等。 事件主題I:一個名詞前面加一個動詞的主謂結構。常見的關系到一個實體詞的動作,如“申請失敗”、“用戶關閉”或者“上次交易失敗”。 事件主題II:一個動詞后面加上若干限定詞及若干名詞,動賓結構表示一件事情。此種情況下,限定詞及名詞可以脫離動詞存在。比如“合并我的賬戶”、“關閉我們的舊賬戶”。POS模式匹配會對所有句子的POS標簽進行掃描,尋找是否有與上述三種模式匹配。每一個匹配的短語都會被當成一個候選主題。
三. 主題抽取
接下來,我們需要減少重復部分、去掉短語中無關緊要的詞。主題抽取步驟如下:
詞干提取:這是信息提取和數據挖掘中的關鍵技術步驟。在LinkedIn的主題挖掘中,“查看簡歷(view profile)”、“查看所有簡歷(view profiles)”、“已查看簡歷(viewed profile)”會被分入到同一個候選主題“查看簡歷(view profile)”。LinkedIn采用的是Java實現Porter詞干提取算法。在詞干提取合并候選主題時,會選擇詞頻較高的詞語作為最終的主題。如“view”和“profile”組成view profile。
去掉停止詞:在選擇候選主題時,還需要去掉停止詞。比如文章常見的停止詞:介詞、代詞、連詞、小品詞或其他輔助詞語。如果最終“注銷這個賬戶”“注銷他的賬戶”都能被劃入“注銷賬戶”的候選主題中。LinkedIn采用的是Lextek標準版停止詞。
合并同類詞:為了進一步簡化候選主題的整理,LinkedIn還自行添加了234個特定領域的停止詞。去掉那些不會給候選主題添加價值的詞語,比如社交網絡領域的停止詞“附加信息”、“聯系我們”、“原消息”、“同樣問題”、“網站”、“其他站點”、“點擊鏈接”和“com”等。
合并語義相近的詞條:最終,候選主題需要被提煉到沒有同類或同義詞。比如“郵箱地址”、“郵箱賬號”需要被合并為一個共同主題。同樣地,還可以借助WordNet之類的語庫對詞條進行合并,如“link”、“connection”、“association”、“partnership”和“relationship”等。LinkedIn手動添加了75組同義詞。
合并特定域同類詞和語義相近詞可以很好地幫助候選主題的提煉,可是大部分的主題提取系統都沒有重視這兩項候選主題的清理策略。
四. 主題排序
經過上述步驟,最終留下來的候選主題已經都最優化。接下來,需要一個標準進行主題排序,然后可以衍生出一套主題。LinkedIn通過兩個步驟進行候選主題排序:
我們計算每個文件中候選主題的TF-IDF值,然后根據我們的經驗,我們會保留TF-IDF值最高的五個主題。TF-IDF是文件為單位的計算值,而沒有考慮到文件所在的文件整個集合。 需要為整個文件集合產生一個單獨的主題列表。LinkedIn引入了文件頻率這個參數來進行整個文件集合的主題TF-IDF值的計算。主題挖掘的業務價值
乍眼一看,這套多模塊的流水線處理系統中任何模塊都可以單獨工作,但會有人擔心無預過濾的TF-IDF計算會產生干擾和不準確的主題;不過,LinkedIn使用該系統對論壇討論、組信息更新、博客中的用戶意見文本進行主題挖掘,實踐效果很好。
LinkedIn不需要人工的預覽內容就可以簡單地實現主題生成,同時根據文件來源的不同可以產生不同的主題。比如,賬號使用者抱怨的主題可能有“主要賬號”、“次要賬號”、“合并賬號”、“關閉賬號”、“復制賬號”等;簡歷瀏覽者可能關心的主題是“刪除聯系人”、“通訊錄”、“導入聯系人”、“發送邀請”和“待處理邀請”。最終,這些主題會以輪子視圖的形式呈現出來,輪子內圈是實體詞主題,外圈是每個實體詞對應的動作。
生成主題之后,對用戶抱怨反饋按照這些主題進行分類,客戶服務代表據此辨別整理主題的各種情緒,從而便于用戶反饋的搜索或者內容總結的生成。
此外,主題隨時間的變化情況還可以用來開展趨勢算法的研究。這樣可以在網絡媒體和社區反饋中獲取重要信息。最后,還可以使用主題進行文本分類,從而降低信息維度、提高處理效率。
查看英文原文:Voices Part II: Technical Details for Topic Mining