百度開源情感分析Senta,讓你更懂使用者

pythontab發表於2018-12-13

  引言

  好友們在聊你不認識的明星八卦,想參與討論又不知所措?

  產品剛投入市場,想了解使用者最真實的反饋而不只是抽樣調查?

  平臺上運營著數萬家電商,想從中挑出口碑好、潛力大的客戶針對性重點扶持?

  ……

  網際網路時代,使用者產生了海量的評論資訊。電商、美食、酒店、旅遊、購物……面對這些海量的評論資料,如果沒有優質的自然語言處理(NLP)技術,它們就只能靜靜地躺在資料庫裡,無法創造價值。那麼如何從這些海量的文字資料中提取有價值的資訊?

  情感分類技術:區分好評差評的利器

  以分析明星口碑為例,開發人員可以透過爬蟲獲取大量關於這個明星的網友評論和媒體報導,然後運用情感分類模型,就能直接得到使用者對明星的情感傾向。

  更進一步,如果對這些資料按照時間排序,分別統計每天的口碑數值,就能得到該明星的輿情走勢圖,甚至預測其未來趨勢。

  同樣,對於剛投入市場的新品、擁有大量使用者評論的電商,可以分析它們的輿情及其趨勢。

  百度在2018年7月開源了其基於語義和大資料的情感分類系統——Senta,將模型和原始碼透過Github進行免費技術開放。如果覺得用模型跑太麻煩,百度AI開放平臺上也免費開放了評論觀點抽取服務,直接呼叫其API就能夠實現情感分類,能夠實現最快速的原型開發。

  評論觀點抽取:精細刻畫使用者口碑

  那如果想更進一步,得到使用者對產品或商家的具體觀點呢?就涉及到了情感分析的高階技術:評論觀點抽取。

  該技術可以大致理解成兩個過程:首先是抽取出評論中的一些涉及觀點的名詞形容詞短語,然後透過情感分類技術確定其觀點的情感傾向。如觀點是“味道不錯”還是“味道不好”,是“上菜速度快”還是“上菜速度慢”。 百度AI開放平臺上免費開放的評論觀點抽取API,就可以支援電商、美食、酒店、旅遊、購物等13個場景的評論觀點抽取。

  以此為基礎,就可以基於海量的評論資料,建立精細的使用者畫像和商戶畫像,進而改善營銷和服務策略,豐富個性化推薦場景,最終創造更大的商業價值。

  情感分類技術為什麼難

  目前的人工智慧技術都是基於大量的資料訓練複雜的模型,以此來支援不同場景的應用。因此其核心困難包括模型和資料兩個方面。

  首先,情感是人類的一種高階智慧行為,需要模型能夠在語義層面理解文字的情感傾向。這不是靠寫幾個正規表示式就能完成的。

  另一方面,不同領域(如餐飲、體育)的情感表達方式各不相同,即便是同一場景的表達也極其複雜。所以需要有大規模覆蓋各個領域的優質資料支撐模型訓練。而這些資料又不是一般的開發者所能具備的。

  那百度Senta是怎麼解決這些問題並形成核心技術的?

  核心技術一:強大的DNN語義模型和深度學習框架

  百度Senta系統採用的是近年取得重大突破的深度學習技術。深度學習的特點是可以不依賴繁複的人工特徵工程,而直接從最原始的文字資料中獲取語義層面的資訊,進而進行情感傾向的判斷。

  圖3 基於bi-LSTM的情感分類模型

  圖3展示了基於bi-LSTM的情感分類模型。它是在大規模語料上有顯著效果的經典深度學習模型。它的特點是能夠提取語句中詞語順序相關的資訊,考慮詞與詞之間較長上下文的依賴。

  但是光有好的模型設計還不夠,還需要好的深度學習框架來實現。百度Senta情感分析系統基於同樣由百度開源的深度學習框架PaddlePaddle Fluid所實現。PaddlePaddle Fluid具有一些特別適合於自然語言處理的特性,比如在深度學習模型的訓練過程中,為了充分利用硬體的計算資源,一般需要進行批次(batch)計算,即一次同時輸入多個句子進行計算。但是情感分類這類場景所處理的大量文字的長度都是不固定的,一般的深度學習框架需要將一個batch內的句子補長(padding)成同樣的長度再輸入到神經網路中進行處理。這種padding方式帶來了額外的儲存和計算開銷。而PaddlePaddle Fluid框架用獨有的LoDTensor原生支援多層級的不等長序列,使得變長文字不需要經過padding即可饋入深度學習模型進行訓練或預測,從而可以顯著地節省儲存空間和計算時間。而對常見的padding資料的支援,PaddlePaddle Fluid 也在不斷地完善中。

  另外 PaddlePaddle Fluid對單機多裝置及多機分散式訓練的支援也非常友好。對於單機訓練,框架提供的並行執行器 ParallelExecutor會自動處理引數的分發與聚合,相對於單裝置訓練,使用者幾乎不用對模型進行任何修改,使得使用者可以低成本地實現單機多CPU/GPU訓練;而對於多機分散式訓練,也只需要簡單的配置即可實現,這使得使用者能夠方便地從模型構建快速過渡到多種環境下的模型執行。

  另一方面,現實的NLP應用場景往往十分複雜。可能單獨一個情感傾向分析模型很難解決所有問題,需要多種NLP技術綜合運用。而很多現成的NLP應用,比如文字分類、神經機器翻譯、閱讀理解、自動問答等,在PaddlePaddleFluid中都很容易找到相關的網路介面和文件。預訓練詞向量也整合在其中,方便模型熱啟動。百度Senta系統甚至直接把情感傾向分析模型的網路結構及其引數都開源,方便對其呼叫與再開發;並且整合了百度詞法分析系統 (LAC),方便使用者直接處理未分詞的語料。這使得開發者的精力能夠放在構建深度學習模型的高層部分而不必過多關注底層細節上,因此很適合於工業應用,尤其是需要快速開發的場景。

  當然,百度還實驗了各種其他的情感分類模型,包括CNN、hierarchical-LSTM、self-attention等。它們都在百度Senta系統的開原始碼中,以滿足使用者不同的選擇。並且百度開源了訓練資料,使用者可以直接在此基礎上訓練自己的模型,以適應自己的場景。

  核心技術二:海量優質標註資料

  在AI界有一句話,“資料決定了你的模型上限,而模型只是在逼近這個上限”。可見大資料的重要性。然而資料標註是一件十分耗費人力的事。為了提高標註效率,百度基於強大的NLP技術積累,能夠基於有限的種子資料大量擴充標註資料。

  簡單地說,就是先獲得一部分標註好的資料,再找到與這些資料相似評論,進而擴充優質的標註資料。

  那麼第一批種子資料從哪裡來?其實,網際網路上天然有大量的弱標記評論資料,比如使用者會對某個商品給予評論,同時給予評分。根據評分的高低就能確定評論的正負傾向。

  接下來就是計算那些沒有被標註情感傾向的評論資料與這些種子資料的相似度。這涉及到另一個模型——語義相似度模型。這個模型也是百度的核心技術(百度AI開放平臺也開放了相關api)。它是透過百度積累的龐大的搜尋引擎標註資料訓練得到的。因此模型準確度非常高。

  更進一步,可以將這些評論資料根據相似度連線成圖結構,最後透過標記傳播演算法,將原來未標記資料轉化為標註資料。經實驗發現,這種方法獲取的資料質量很高。

  圖4 基於標記傳播的情感標記資料探勘

  因此,百度Senta系統在各種垂類準確率非常高,整體效果業界領先。而開源專案Senta中,既包含了簡單高效的情感分類語義模型,也包含了百度基於獨有大資料語料訓練好的高精準模型,可以適應不同場景的需求。另外,使用者甚至可以將自己場景的資料加入到訓練集中,使得模型更符合自身的應用場景。即便自己沒有訓練機器,也可以上傳自身的資料到百度AI開放平臺進行定製化,然後呼叫定製化好的api即可。

  關於 PaddlePaddle Fluid 的實戰,可以參考文章《 PaddlePaddle Fluid實戰:使用百度 Senta 情感分析系統》,使用百度 Senta 系統的開原始碼進行情感分析任務。

  展望

  百度在情感分析領域開展了漫長而深入的技術研發。而在未來,百度將繼續深入研發更加廣泛通用的NLP技術和深度學習框架,以適應豐富多樣的業務場景,創造更多價值。同時,百度將及時開源基於PaddlePaddle的最前沿的NLP技術,共同推進AI產業的發展。

  附:

  百度AI開放平臺(http://ai.baidu.com/)

  情感傾向分析(http://ai.baidu.com/tech/nlp/sentiment_classify)

  評論觀點抽取(http://ai.baidu.com/tech/nlp/comment_tag)

  Senta系統(https://github.com/baidu/Senta)


相關文章