系統學習NLP(二十)--文字聚類
轉自:https://zhuanlan.zhihu.com/p/40991165
1:什麼是文字聚類
先說說聚類的概念,聚類又稱群分析,是資料探勘的一種重要的思想,聚類(Cluster)分析是由若干模式(Pattern)組成的,通常,模式是一個度量(Measurement)的向量,或者是多維空間中的一個點。聚類分析以相似性為基礎,在一個聚類中的模式之間比不在同一聚類中的模式之間具有更多的相似性。(以上來自百度百科).
再說到文字聚類,文字聚類其實也就是在文字方向上的應用,首先我們要把一個個文件的自然語言轉換成數學資訊,這樣形成高維空間點之後再去計算點與點之間的距離,然後將這些距離比較近的聚成一個簇,這些簇的中心成為簇心.而我們做的就是保證簇內點的距離足夠近,簇與簇的距離足夠遠.
我接到的任務是在評論文字上進行聚類操作,起初以為很簡單,但是發現其實還是不是很好操作的,有幾個原因,一方面是評論有些部分語義其實是重複的,這樣導致一些類別會重合,這樣使用聚類的方法往往是不準確的,另一方面是一些評論上的詞語使用近義詞和一些音譯字來替換詞語,比如”微信”會轉成”V信”等這些在分詞的時候會有一些問題.並且又因為聚類是一種非監督學習,往往給我們的資料太多(給我的評論資料有80w,有多少類,什麼類)我們都不知道,我們也只能輪廓係數不斷地測試,找到一個合適的結果出來.
並且我們用的一些演算法也有一些問題,比如我們使用的K-means方法,每一次選取的簇心是隨機的,這樣一來得到的結果也是每次不一樣的,所以聚類演算法也是比較難評價,這也是一些困難的部分.
2:文字聚類的過程
主要的過程如圖所示,其實主要的部分有三個:
第一部分,分詞處理,我們要把中文文章要進行分詞,這一點中文文章和英文文章有一些區別,因為英文單詞是單個構成的,也就不需要分詞了,而我們中文是需要分詞的,並且中文之間有一些詞儘管大量出現,但是對於文章的分類結構起不到太大的意義,比如”的”,”了”,”麼””應該”,這些詞去計算他們既浪費空間又浪費時間,出於+1s的因素,我們也要節約時間啊,首先我們就加入一個停用詞表,在進行分詞的時候進行去掉.
第二部分:分詞後將分詞轉換為詞向量
關於詞向量我們有一些比較常用的模型,比如one-hotm,BOW詞袋模型,連續詞袋模型(CBOW)和Skip-Gram模型和Word2vec模型,在這次任務中我是用的是BOW詞袋模型,在轉換為詞向量值我們要將其轉換成tfidf矩陣,tfidf其實可以看作是提取的特徵的一次加權,是根據一個單詞在當前文章中出現的頻率和該單詞在所有語料中出現的頻率評估一個單詞的重要性,當一個單詞在這篇文章中出現的次數很多的時候,這個詞語更加重要;但如果它在所有文章中出現的次數都很多,那麼它就顯得不那麼重要
第三部分:選擇聚類演算法
這裡的演算法大家常用的是K-means和DBSCAN,這兩種演算法用的最多,但是在高維空間裡邊K-means似乎並不是很好,究其原因是因為維度太高,簇與簇之間的距離太小了,如果直接去聚類,這一部分似乎效果不太好,這時候就需要用到主成分分析PCA,大致的思路是大致意思就是取這個高維向量中方差最大的方向經過一些數學變換將有用的部分保留,沒用的部分捨棄,這種辦法同樣適合分類演算法中尋找最大的特徵.
這一部分似乎也得單獨拿出一篇文章好好寫一下,畢竟太多坑了.
最後演算法評測,對於K-means,我們使用的是簇的距離進行評定,對於Brich層次聚類,我們使用的是輪廓係數來評定,最後發現,這真是一個調參活,感嘆真不容易.
最後效果:
紅色虛線是輪廓係數,柱狀圖是類別,儘量多的讓柱狀在輪廓係數附近,我們可以認為結果取得不錯.
相關文章
- 系統學習NLP(十九)--文字分類之FastText文字分類AST
- 系統學習NLP(二十一)--SWEM
- 系統學習NLP(十七)--文字相似度
- 系統學習NLP(十二)--文字表示綜述
- 推薦系統中的產品聚類:一種文字聚類的方法聚類
- 系統學習NLP(十六)--DSSMSSM
- 教你文字聚類聚類
- 系統學習NLP(十五)--seq2seq
- unit3 文字聚類聚類
- 系統學習NLP(十四)--句子向量與篇章向量
- kmeans實現文字聚類聚類
- 用scikit-learn學習DBSCAN聚類聚類
- 用scikit-learn學習BIRCH聚類聚類
- 用scikit-learn學習譜聚類聚類
- pyhanlp 文字聚類詳細介紹HanLP聚類
- 聯邦學習:多工思想與聚類聯邦學習聯邦學習聚類
- NLP-使用CNN進行文字分類CNN文字分類
- 物以類聚人以群分,透過GensimLda文字聚類構建人工智慧個性化推薦系統(Python3.10)LDA聚類人工智慧Python
- swift4.1 系統學習二十一 泛型Swift泛型
- NLP學習1
- 推薦系統之路 (2):產品聚類聚類
- Mahout學習之聚類演算法Kmeans聚類演算法
- 系統學習NLP(十)--詞性標註演算法綜述詞性標註演算法
- C#學習 [型別系統] 類(13)C#型別
- NLP與深度學習(一)NLP任務流程深度學習
- 【python資料探勘課程】二十四.KMeans文字聚類分析互動百科語料Python聚類
- Vue3學習(二十)- 富文字外掛wangeditor的使用Vue
- 【NLP】文字情感分析
- linux學習之旅(二十二)&CIFS網路檔案系統Linux
- 【無監督學習】2:DBSCAN聚類演算法原理聚類演算法
- 【火爐煉AI】機器學習039-NLP文字分類器AI機器學習文字分類
- 【NLP】TensorFlow實現CNN用於文字分類(譯)CNN文字分類
- 推薦系統遇上深度學習(二十一)--階段性回顧深度學習
- 淺談NLP 文字分類/情感分析 任務中的文字預處理工作文字分類
- oracle 聚簇表學習Oracle
- NLP概述和文字自動分類演算法詳解演算法
- 【NLP】TensorFlow實現CNN用於中文文字分類CNN文字分類
- 深度學習——如何用LSTM進行文字分類深度學習文字分類