自然語言處理-第十一期-攜程酒店訂單評價&LDA

背景

自然語言處理-第十一期-攜程酒店訂單評價&LDA

幾天沒更新了,主要原因是LDA模型沒有達到我的預期效果。我也一直在探索其原因和替代方案。最近研究LDA的過程對非監督學習也有了一個更深的感受:

  • 非監督學習. 無Labeled Data,所以無法簡單以準確率來判斷其算法的有效性和普適性;
  • 非監督學習的結果可能不可重複。特別是非監督學習算法中帶有神經網絡的部分,由於其初始參數為隨機值,並且有多個local optimal,導致反向傳遞的結果可能不一樣;
  • 非監督學習, 與半監督學習。 這種算法我只是遇到過,還沒有學習過。 但是由於大部分現實應用場景的數據都是無標籤的。我個人感覺,通過增加Semi-Supuervised Learning可以增加整個模型的準確率。

關於,監督學習、非監督學習、半監督學習以後會給大家帶來,最近還是以NLP主題為主。代碼在最後

LDA實踐及代碼

本來想用英文文本來實踐該模型,畢竟英文的數據很多,工具也多。但是找到了一個攜程的酒店訂單評價。雖然中文的很多sentence token, POS tag(詞性,如名詞)的工具都不好用,還是決定要試試。

LDA模型的搭建離不開Gensim lib。在gensim lib的幫助下搭建LDA模型也只需要三行代碼。如下圖,其中num_topics=10 指的是將文本分為10個主題。當然前面離不開文本的一些基礎處理,下圖的totalX就是一個包含所有文本的List

自然語言處理-第十一期-攜程酒店訂單評價&LDA

接下來給大家展示下模型運行的結果,下面的結果通過可視化展現出來

Topic1:

自然語言處理-第十一期-攜程酒店訂單評價&LDA

Topic 2:

自然語言處理-第十一期-攜程酒店訂單評價&LDA

Topic3:

自然語言處理-第十一期-攜程酒店訂單評價&LDA

我僅展示3個Topic的情況和對應的詞彙。大家可以從結果中看到,其中並沒有明顯的分區,或者說出現明顯不同的特徵值等情況。即,LDA沒有明顯得分區或者說沒有完成Cluster任務;

模型結論思模型考

當模型沒有出現預想的結果時,我也檢查了代碼,沒有發現什麼問題,都是按照Gensim官網來的。那麼我們又要回到LDA模型的方法論上面了。

LDA模型的兩個關鍵條件:

  • 該詞在所有文檔的範圍內,歸屬於哪個Topic;
  • 該詞所在的文檔歸屬於哪個Topic

大家可以想象基於上面兩個條件之後,會出現兩個趨勢:

  1. 同一個詞趨向于歸屬於同一個Topic
  2. 同一個文本單元趨向于歸屬於同一個Topic

最終的結果是,經常出現在一起的詞會趨向于歸屬於同一個主題。

所以LDA達到效果的前提或者說Topic Model的前提是,文本存在不同的主題,差異性較大的主題。比如運動、科技、歷史主題。但是就攜程酒店來講,我們理想中的狀態是,我們要挖掘客戶提到的不同特徵。但是實際情況並非如此,

所以總結下,LDA未達到效果的原因如下:

  • LDA的原理是將出現頻率在一起的詞歸位一類,但是對於“酒店”等高頻詞會出現在所有的主題中。反而客戶評價的“服務不好,網不好”等卻因為頻率太低,無法出現在Topic的list中;
  • LDA非常適用於不同主題的文本,而酒店的文本都歸屬於一個大主題:酒店。我們是希望找到其中的小主題,但是其會收到 酒店整體評價的影響;
  • 上面的LDA模型是以一整個訂單評價為一個單元。 那麼,就是LDA會認為該訂單會趨向同一主題。這個主題按照道理來講也肯定是酒店,不會是網速。

LDA優化

基於以上原因,我們可以提出一些優化:

  • 第一個就是將LDA的單元縮小,不是整個訂單評價,而是一個個句子。這背後的原理是,當整個訂單作為一個主題時,酒店這個詞會和所有的特徵相關聯。 所有討論到的特徵都會相互關聯。 如果縮小顆粒度,那麼句子與句子將不會相互影響;
  • 第二個是隻留下名詞。我們從上面的結果可以看到,我們經常收到 “是”,“不錯”等等的影響。

其中第二個優化,由於要用中文的POS Tagger,現在的工具都不好用,Stanford的模型我也還沒有學會用。所以,要後續給大家帶來。

下期預告

本期實際上是解釋了我探索LDA模型的過程和其中的困惑。雖然,沒有達到我預期的效果,但是我也瞭解了很多東西。

當然我們的任務還要延續下去,如何挖掘訂單評價信息,既然LDA不理解,我找到了一個較為傳統的Rule-Based-Aspect-Extraction方法。

需要代碼的朋友可以給我留言。


分享到:


相關文章: