文字聚類demo

2021-09-22 16:25:23 字數 2436 閱讀 5009

1、 排序去重,經過排序去重後資料從10萬條變為3萬條。

2、 結巴分詞。

3、 特徵提取,使用平滑後的tf-idf作為特徵,為每個使用者問題構建特徵向量,採用了scikit-learn 中的類 tfidfvectorizer。

4、 採用了兩種聚類方法k-means 。

k-means:演算法的優點是收斂速度快,缺點是聚類形狀在空間中是凸的。

github**:

from sklearn.feature_extraction.text import tfidfvectorizer

import jieba

from sklearn.cluster import kmeans

# 輸入輸出檔案

fin =

open

('user_question.txt'

,'r'

)# 需要聚類的語料,每行乙個句子

fout =

open

('result.txt'

,'w'

)# 聚類後的結果,格式:label + '\t' + sentence

# 結巴分詞

user_question =

lines = fin.readlines(

)for line in lines:

line = line.strip(

) words = jieba.cut(line)

' '.join(words)

)print

"fenci over"

# 使用tf-idf提取特徵

vectorizer = tfidfvectorizer(max_df=

0.9,min_df=3)

vector = vectorizer.fit_transform(user_question)

# 使用kmeans演算法聚類,init:初始值選擇的方式,n_init:用不同的初始化質心執行演算法的次數

db = kmeans(n_clusters=

10, init=

'k-means++'

, n_init=10)

db.fit(vector)

labels = db.labels_

# 將結果寫入檔案

for i,line in

zip(labels, lines)

: fout.write(

str(i)

+'\t'

+ line)

for i,line in

zip(labels, lines)

: fout.write(

str(i)

+'\t'

+ line)

# 統計輸出每一類的數量

from collections import counter

counter(labels)

0:積分 804

1:金幣 3862

2:如何…… 915

3:祝福、祝願 552

4:話費 1466

5:較為雜亂,看不出是什麼主題 13729

6:流量 3906

7:怎麼…… 3009

8:心願+希望…574

9:** 2618

觀察了下聚類結果,大概是可接受和可用的,基於聚類語料的性質,名詞型的類別較為可信和可用,比如0,1,3,4,6,8,9這七類是比較靠譜的,而2,5,7這三類則較為雜亂,觀察之後看不出是什麼主題,尤其是第5類,主題不明,而且資料量佔到了總資料量的1/3。

造成以上結果的原因是:使用tf-idf作為特徵,只考慮了詞頻,沒有考慮語義資訊,這一點從聚類結果可以觀察出,可以嘗試使用word2vec方法來提取特徵。

(1)tfidf後使用nmf進行主題提取,再用kmeans聚類。

聚類後的觀察結果:從結果看還不如之前的方法。

0:亂七八糟

1:取消

2:怎麼

3:可以

4:金幣

5:**

6:什麼

7:亂七八糟

8:話費

9:為什麼

(2)countvectorizer後使用lda進行主題提取,再用kmeans聚類。

聚類後的觀察結果:從結果看還不如nmf方法,每個主題都不明確,亂七八糟。

(3)用bert提取每句話的cls特徵,然後用kmeans聚類。

聚類後的觀察結果:從結果看還不如nmf方法,每個主題都不明確,亂七八糟。

(4)限定詞性,比如只保留句子中的名詞,因為我們關心的是名詞性的類別,再使用tfidf提取特徵,最後使用kmeans聚類。這種方法還沒有嘗試。

以上這些方法可能在我的語料中不適用,但不代表在其他語料不適用,大家可以多多嘗試。

文字聚類 用k means對文字進行聚類

coding utf 8 created on thu nov 16 10 08 52 2017 author li pc import jieba from sklearn.feature extraction.text import tfidfvectorizer from sklearn.cl...

python文字聚類 對一列文字進行聚類

1.需求 乙個txt文件,如下圖。大概幾萬行資料,但是沒有歸類,要人工歸類的話耗時耗力,打算用文字聚類的方法對txt裡面的每條資料自動分類。2.參考 主要參考 3.encoding utf 8 import numpy as np import pandas as pd import re impo...

短文本聚類方法

短文本聚類方法 在拿到乙個大規模資料集時,我們不可能對這麼多的問題進行注意打上標記 label 因為這個是非常耗時的。而且,我們還知道文字問題是乙個典型的多標記問題,這個時候打上的標記很多的時候都不會特別的精確,也就是我們通常說的弱標記weak label.這個時候我們就需要乙個聚類的方法,這樣可以...