機器學習之總結

lyzm5531 8年前發布 | 29K 次閱讀 數據挖掘 自然語言處理 機器學習

來自: http://blog.freesign.net/2016/01/31/機器學習之總結/

出于文本歸類和數據處理之需求,這段時間研究了下文本處理類的機器學習方面的東西。也快過年放假了,在此做一個總結和感受吧。

分詞

正如絕大多數的科學研究一樣,機器學習的算法絕大多數都是西方早在幾年、十幾年和幾十年發布出來,然后再經過西方工程化之后,國內再慢慢跟上路來。在中文和英文處理的最大問題在于中文需要分詞。當然可以將單個的漢字作為算法的處理單元,但是由于漢語的詞匯比起單詞含有多得多的信息,所以分詞算是漢語處理的第一步。目前漢語分詞算法實現的比較好的有:

  1. 中科院張華平博士的 ICTCLAS分詞
    這個算是國內公認做的最好的分詞實現了,在各項評測中指標都比較高,缺點是軟件是閉源的,而且掛這個license需要不斷更新,比較麻煩。這個還有個人做了個python的 調用接口 ,居然是個老外,想想也比較奇葩。
  2. 結巴分詞:
    口號是做 最好的 Python 中文分詞組件 ,調用接口可謂是最全面的,各種語言都可以用。由于是開源的,效果也還不錯,Python/C都支持,所以在程序中經常用。
  3. 其它:
    我個人也根據HMM原理和深度學習實現了兩個分詞程序,當然效果肯定沒有上面那么成熟,但作為HMM和深度學習練練手還是可以的。此外覺得在漢語的時候,中英文和數字的混排中,設想在第一步處理時候將其獨立開來,然后再用純粹的中文分詞處理,當然比較懶,沒有去做。

個人感覺,中文分詞目前已經到了90%以上的分詞精度,已經十分滿足工程應用了。但是語言是動態不斷變化的,而且網絡用語越來越多,變化也越來越快,分詞程序如果能夠快速跟蹤這些變化,還是十分有現實價值的。

情感分析和歸類

這里這樣列,但是實際上文本歸類和情感分析是一個問題,無非就是2類和多類的關系。文本歸類分為長文本歸類和段文本歸類:長文本比如一篇文章、一個博文之類的;短文本比如推ter和微博之類的。短文本的歸類比長文本的歸類難得多,長文本字詞豐富,一般采用多項式模型(詞頻統計);而短文本一般采用伯努利模型(詞出現與否)效果會好一些。在實現測試的過程中,以下幾種算法效果較好:

  1. 貝葉斯網絡

    算是最簡單的學習算法了,具有理論基礎清晰、實現簡單、計算量小、效果較好的有點。具有多項式模型和伯努利模型兩種實現方式。在實踐中,某東語聊好評差評兩分類能達到90%的分類精度、sogou分類語聊10分類也能達到70%多的分類精度。

  • Python實現
  • C/C++實現
    注意,當時Python實現速度比較的慢,但是用C/C++實現后,計算資源和速度都至少有十多倍的提升!!!
  1. 最大熵模型

    這個吳軍博士在《數學之美》中有介紹。用幾句話來概括就是:如果有先驗約束知識,就滿足這些約束,否則就不做任何假設,因為不做任何假設是最可靠的,而等概率分布時候的熵最大,稱之為最大熵模型。舉個例子:如果沒有任何條件限制,我問投一個骰子1向上的概率是多大,答案是1/6,然后我告訴你投一次出現3和4的概率之和是1/2,然后你肯定推算出這種約束下1向上的概率是1/8。正是秉著這樣的觀念,文獻說最大熵模型在單一模型算法中效果差不多是最好的。

    最大熵模型提出的比較早了,但是利用起來還不是很悠久,就是傳統的GIS迭代求解效率太低,而后面改進使得求解速度大大加快的時候,在實際中才慢慢被利用。代碼中是參照nltk的Python實現進行C/C++的移植的。

  1. LDA(Latent Dirichlet Allocation)

    也是一個比較流行的分類算法,這種算法和上面不同的是,不知道預先的類別種類和數目,有點類似聚類的意思。該算法在推ter和微博主題分類和主題發現中被廣泛使用,同時在廣告推薦和信息投放中也被大量應用。還有就是這個算法跟別的算法不同的是,涉及到的數學和統計的知識比較的多,要看明白還是需要些功夫的。

    推薦的文章:

  • Peacock:大規模主題模型及其在騰訊業務中的應用
  • 本人測試 發現效果不是特別的理想,包括一個改進的L-LDA,后面再看吧。

    深度學習

    深度學習在這些年真是越來越火了,隨著在圖像和語音識別上取得驕人的成績后,Deep Learning也在嘗試席卷NLP這最后一塊陣地。自然語言不同于圖像和語音部分,屬于比較高層次的信號,難度較大,所以很多專家不看好深度學習在自然語言上的處理。但是隨著RNN的不斷研究和改進,在分詞、情感識別、分類、標注、NER方面也有了不小的成就。簡單而言,目前我們不能給予深度學習從根本上解決自然語言的各種問題,但是給予以往自然語言的研究成果(比如特征提取等),再加上深度學習的強大建模能力,是會將自然語言處理提上一個新的高度的。
    目前實驗的功能:
  • 深度學習分詞
  • 自然語言生成
    第一塊的分詞結果已經在ReadMe列出來了,還是有些效果的;對于自然語言生成,是用一個語聊去訓練它,然后它就會根據語料的“口吻”創作出句子來(我還沒大規模訓練調試,效果不好)。我猜 Bosonnlp作詩 應該是這個原理。
    其實深度學習可以產生很多好玩的東西,比如 大作-1大作-2

總結

無論是不是個坑,深度學習都是當前機器學習的熱點和主流。讓我的最大感受就是:傳統的機器學習都是科學家們精妙的設計出各種數學模型和求解算法,而深度學習就是粗魯地用大數據和巨大計算量拼出一個畢竟訓練結果的模型而沒有任何理論去支持它。這又讓我想起了:

“我們(在考慮圖靈測試中的機器時)也應當允許這樣一種可能,那就是一些工程師可能會建造一臺機器,它能夠完成任務(通過圖靈測試),但其工作的原理卻未必能夠被其創造者所完全理解,這是因為他們采用了一種試驗的方式(來建造這臺機器)。“

PS:搞深度學習的話,先換臺好顯卡的電腦吧!

</div>

 本文由用戶 lyzm5531 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!