引言git
好友們在聊你不認識的明星八卦,想參與討論又不知所措?github
產品剛投入市場,想了解用戶最真實的反饋而不僅是抽樣調查?正則表達式
平臺上運營着數萬家電商,想從中挑出口碑好、潛力大的客戶針對性重點扶持?算法
……數據庫
互聯網時代,用戶產生了海量的評論信息。電商、美食、酒店、旅遊、購物……面對這些海量的評論數據,若是沒有優質的天然語言處理(NLP)技術,它們就只能靜靜地躺在數據庫裏,沒法創造價值。那麼如何從這些海量的文本數據中提取有價值的信息?api
以分析明星口碑爲例,開發人員能夠經過爬蟲獲取大量關於這個明星的網友評論和媒體報道,而後運用情感分類模型,就能直接獲得用戶對明星的情感傾向。網絡
更進一步,若是對這些數據按照時間排序,分別統計天天的口碑數值,咱們就能獲得該明星的輿情走勢圖,甚至預測其將來趨勢。框架
一樣,對於剛投入市場的新品、擁有大量用戶評論的電商,咱們均可以分析它們的輿情及其趨勢。分佈式
百度在2018年7月開源了其基於語義和大數據的情感分類系統——Senta,將模型和源碼經過Github進行免費技術開放。若是以爲拿模型跑太麻煩,百度AI開放平臺上也免費開放了評論觀點抽取服務,直接調用其api就可以實現情感分類,可以實現最快速的原型開發。學習
那若是想更進一步,獲得用戶對產品或商家的具體觀點呢?就涉及到了情感分析的高階技術:評論觀點抽取。
該技術能夠大體理解成兩個過程:首先是抽取出評論中的一些涉及觀點的名詞形容詞短語,而後經過情感分類技術肯定其觀點的情感傾向。如觀點是「味道不錯」仍是「味道很差」,是「上菜速度快」仍是「上菜速度慢」。百度AI開放平臺上免費開放的評論觀點抽取api,就能夠支持電商、美食、酒店、旅遊、購物等13個場景的評論觀點抽取。
以此爲基礎,就能夠基於海量的評論數據,創建精細的用戶畫像和商戶畫像,進而改善營銷和服務策略,豐富個性化推薦場景,最終創造更大的商業價值。
目前的人工智能技術都是基於大量的數據訓練複雜的模型,以此來支持不一樣場景的應用。所以其核心困難包括模型和數據兩個方面。
首先,情感是人類的一種高級智能行爲,須要模型可以在語義層面理解文本的情感傾向。這不是靠寫幾個正則表達式就能完成的。
另外一方面,不一樣領域(如餐飲、體育)的情感表達方式各不相同,即使是同一場景的表達也極其複雜。因此須要有大規模覆蓋各個領域的優質數據支撐模型訓練。而這些數據又不是通常的開發者所能具有的。
那百度Senta是怎麼解決這些問題並造成核心技術的?
百度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 的實戰,能夠參考[另外一篇文章],使用百度Senta 系統的開源代碼進行情感分析任務。[陳1]
百度在情感分析領域開展了漫長而深刻的技術研發。而在將來,百度將繼續深刻研發更加普遍通用的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)
[陳1]連接下一篇文章。