NLP之文本聚類(lèi)

一 文本聚類(lèi)簡(jiǎn)介

1.1、定義

文本聚類(lèi)主要是依據(jù)著名的聚類(lèi)假設(shè):同類(lèi)的文檔相似度較大,而不同類(lèi)的文檔相似度較小结澄。作為一種無(wú)監(jiān)督的機(jī)器學(xué)習(xí)方法,聚類(lèi)由于不需要訓(xùn)練過(guò)程岸夯,以及不需要預(yù)先對(duì)文檔手工標(biāo)注類(lèi)別麻献,因此具有一定的靈活性和較高的自動(dòng)化處理能力,已經(jīng)成為對(duì)文本信息進(jìn)行有效地組織猜扮、摘要和導(dǎo)航的重要手段勉吻,為越來(lái)越多的研究人員所關(guān)注。(摘自百度百科)

1.2旅赢、應(yīng)用領(lǐng)域

文檔聚類(lèi)可以作為多文檔自動(dòng)文摘等自然語(yǔ)言處理應(yīng)用的預(yù)處理步驟
比較典型的例子是哥倫比亞大學(xué)開(kāi)發(fā)的多文檔文摘系統(tǒng)Newsblaster齿桃。Newsblaster將每天發(fā)生的重要新聞文本進(jìn)行聚類(lèi)處理,并對(duì)同主題文檔進(jìn)行冗余消除煮盼、信息融合短纵、文本生成等處理,從而生成一篇簡(jiǎn)明扼要的摘要文檔僵控。
對(duì)搜索引擎返回的結(jié)果進(jìn)行聚類(lèi)香到,使用戶(hù)迅速定位到所需要的信息
對(duì)用戶(hù)感興趣的文檔(如用戶(hù)瀏覽器cache中的網(wǎng)頁(yè))聚類(lèi),從而發(fā)現(xiàn)用戶(hù)的興趣模式并用于信息過(guò)濾和信息主動(dòng)推薦等服務(wù)
聚類(lèi)技術(shù)還可以用來(lái)改善文本分類(lèi)的結(jié)果
數(shù)字圖書(shū)館服務(wù)
通過(guò)SOM神經(jīng)網(wǎng)絡(luò)等方法报破,可以將高維空間的文檔拓?fù)浔P虻赜成涞蕉S空間悠就,使得聚類(lèi)結(jié)果可視化和便于理解,如SOMlib[ ]系統(tǒng)充易;(以上摘自百度百科)
用于大數(shù)據(jù)中熱點(diǎn)話(huà)題或事件的發(fā)現(xiàn)
與文本分類(lèi)不同梗脾,文本聚類(lèi)預(yù)先并不知道聚出來(lái)的每個(gè)類(lèi)別的主題具體是什么,只知道每個(gè)類(lèi)別下的數(shù)據(jù)相似度較大蔽氨,描述的是同一個(gè)主題藐唠。因此,文本聚類(lèi)比較適合用于大數(shù)據(jù)中熱點(diǎn)話(huà)題或事件的發(fā)現(xiàn)鹉究。

1.3、文本聚類(lèi)方法

作為NLP領(lǐng)域最經(jīng)典的使用場(chǎng)景之一踪宠,文本聚類(lèi)形成了它的一般流程(圖1)并積累了許多的實(shí)現(xiàn)方法自赔。


圖1 文本聚類(lèi)的一般流程圖

從圖1可以看出香嗓,文本聚類(lèi)主要有一下幾個(gè)步驟忿晕。

  • 分詞
  • 去除停用詞
  • 構(gòu)建詞袋空間VSM(vector space model)
  • TF-IDF構(gòu)建詞權(quán)重
  • 使用聚類(lèi)算法進(jìn)行聚類(lèi)(KMeans,DBSCAN漠魏,BIRCH等)

當(dāng)然,也有在實(shí)際應(yīng)用中考慮到文本向量維度較高不利于聚類(lèi)等問(wèn)題他去,增加pca降維的方法毙驯,如圖2所示。


圖2 文本聚類(lèi)的一種方法

二 文本聚類(lèi)的主要步驟

2.1 分詞

分詞這一步主要是對(duì)中文文檔而言的灾测,一般使用分詞工具來(lái)完成爆价。
一般的中文分詞工具主要有:jiebaHanlp媳搪,SnowNLP(MIT)铭段,pynlpir(大數(shù)據(jù)搜索挖掘?qū)嶒?yàn)室(北京市海量語(yǔ)言信息處理與云計(jì)算應(yīng)用工程技術(shù)研究中心)),thulac(清華大學(xué)自然語(yǔ)言處理與社會(huì)人文計(jì)算實(shí)驗(yàn)室) 等秦爆。

2.2 去除停用詞

所謂停用詞就是我們?cè)趯?shí)際生活中常用的不能用于區(qū)分文檔之間關(guān)系的一些詞語(yǔ)序愚。如“的”,“你”等限,“我”爸吮,“他”等。
常見(jiàn)的中文停用詞有:
1. 中文停用詞表(比較全面,有1208個(gè)停用詞)
2. 最全中文停用詞表整理(1893個(gè))

示例代碼:

def read_from_file(file_name):
    with open(file_name,"r") as fp:
        words = fp.read()
    return words

def stop_words(stop_word_file):
    words = read_from_file(stop_word_file)
    result = jieba.cut(words)
    new_words = []
    for r in result:
        new_words.append(r)
    return set(new_words)
def del_stop_words(words,stop_words_set):
#   words是已經(jīng)切詞但是沒(méi)有去除停用詞的文檔望门。
#   返回的會(huì)是去除停用詞后的剩余詞
    result = jieba.cut(words)
    new_words = []
    for r in result:
        if r not in stop_words_set:
            new_words.append(r)
    return new_words

2.3 構(gòu)建詞袋空間VSM(vector space model)

構(gòu)建詞袋空間的步驟如下:

  1. 將所有文檔讀入到程序中形娇,再將每個(gè)文檔切詞。
  2. 去除每個(gè)文檔中的停用詞怒允。
  3. 統(tǒng)計(jì)所有文檔的詞集合(sk-learn有相關(guān)函數(shù))埂软。
  4. 對(duì)每個(gè)文檔,都將構(gòu)建一個(gè)向量纫事,向量的值是對(duì)應(yīng)詞語(yǔ)在本文檔中出現(xiàn)的次數(shù)勘畔。

示例代碼:

def get_all_vector(file_path,stop_words_set):
names = [ os.path.join(file_path,f) for f in os.listdir(file_path) ]
posts = [ open(name).read() for name in names ]
docs = []
word_set = set()
for post in posts:
    doc = del_stop_words(post,stop_words_set)
    docs.append(doc)
    word_set |= set(doc)
    #print len(doc),len(word_set)

word_set = list(word_set)
docs_vsm = []
#for word in word_set[:30]:
    #print word.encode("utf-8"),
for doc in docs:
    temp_vector = []
    for word in word_set:
        temp_vector.append(doc.count(word) * 1.0)
    #print temp_vector[-30:-1]
    docs_vsm.append(temp_vector)
docs_matrix = np.array(docs_vsm)

2.4 TF-IDF構(gòu)建詞權(quán)重

前面已經(jīng)得到了文本的向量化表示,但是只用詞頻進(jìn)行數(shù)值化明顯是不夠的丽惶。因此炫七,這里使用TF-IDF來(lái)度量每個(gè)詞的重要程度。
關(guān)于TF-IDF的介紹可以參考網(wǎng)上的文章:
1. 基本文本聚類(lèi)方法
2. TF-IDF百度百科
3. TF-IDF維基百科英文版(需要FQ)

示例代碼如下:

column_sum = [ float(len(np.nonzero(docs_matrix[:,i])[0])) for i in range(docs_matrix.shape[1]) ]
column_sum = np.array(column_sum)
column_sum = docs_matrix.shape[0] / column_sum
idf =  np.log(column_sum)
idf =  np.diag(idf)
# 根據(jù)IDF的定義钾唬,計(jì)算詞的IDF并不依賴(lài)于某個(gè)文檔万哪,所以我們提前計(jì)算好。
# 注意一下計(jì)算都是矩陣運(yùn)算抡秆,不是單個(gè)變量的運(yùn)算奕巍。
for doc_v in docs_matrix:
    if doc_v.sum() == 0:
        doc_v = doc_v / 1
    else:
        doc_v = doc_v / (doc_v.sum())
    tfidf = np.dot(docs_matrix,idf)
    return names,tfidf

2.5 使用聚類(lèi)算法進(jìn)行聚類(lèi)

到了這一步,就可以使用聚類(lèi)算法(KMeans儒士,DBSCAN的止,BIRCH等)進(jìn)行文本聚類(lèi)了,在這里就不作詳細(xì)介紹了着撩。

三 小結(jié)

本文主要介紹了NLP中的文本聚類(lèi)的基本方法诅福。當(dāng)然匾委,除了使用TF-IDF構(gòu)建詞權(quán)重的方法之外,還可以使用LDA主題模型氓润、Word2Vec等獲取文本向量表示的方法進(jìn)行文本聚類(lèi)赂乐,這里就不再一一介紹了。

參考文獻(xiàn)
中文文本聚類(lèi)(切詞以及Kmeans聚類(lèi))
文本聚類(lèi)教程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咖气,一起剝皮案震驚了整個(gè)濱河市挨措,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌采章,老刑警劉巖运嗜,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異悯舟,居然都是意外死亡担租,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)抵怎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奋救,“玉大人,你說(shuō)我怎么就攤上這事反惕〕⑺遥” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵姿染,是天一觀的道長(zhǎng)背亥。 經(jīng)常有香客問(wèn)我,道長(zhǎng)悬赏,這世上最難降的妖魔是什么狡汉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮闽颇,結(jié)果婚禮上盾戴,老公的妹妹穿的比我還像新娘。我一直安慰自己兵多,他們只是感情好尖啡,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著剩膘,像睡著了一般衅斩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怠褐,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天矛渴,我揣著相機(jī)與錄音,去河邊找鬼惫搏。 笑死具温,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筐赔。 我是一名探鬼主播铣猩,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼茴丰!你這毒婦竟也來(lái)了达皿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贿肩,失蹤者是張志新(化名)和其女友劉穎峦椰,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體汰规,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汤功,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了溜哮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滔金。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖茂嗓,靈堂內(nèi)的尸體忽然破棺而出餐茵,到底是詐尸還是另有隱情,我是刑警寧澤述吸,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布忿族,位于F島的核電站,受9級(jí)特大地震影響蝌矛,放射性物質(zhì)發(fā)生泄漏道批。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一朴读、第九天 我趴在偏房一處隱蔽的房頂上張望屹徘。 院中可真熱鬧,春花似錦衅金、人聲如沸噪伊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鉴吹。三九已至,卻和暖如春惩琉,著一層夾襖步出監(jiān)牢的瞬間豆励,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留良蒸,地道東北人技扼。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嫩痰,于是被迫代替她去往敵國(guó)和親剿吻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容