基於ML的中文短文本聚類

2021-10-07 21:05:37 字數 2836 閱讀 2756

整個過程分為以下幾個步驟:

一、引入,python 依賴包,並載入語料

import random

import jieba

import pandas as pd

import numpy as np

from sklearn.feature_extraction.text import tfidftransformer

from sklearn.feature_extraction.text import tfidfvectorizer

import matplotlib.pyplot as plt

from sklearn.decomposition import pca

from sklearn.cluster import kmeans

import gensim

from gensim.models import word2vec

from sklearn.preprocessing import scale

import multiprocessing

#讀取語料

content=pd.read_excel(r'./data/文字.xlsx'

,sheet_name=

0)

#載入停用詞,可以自定義停用詞

stopwords =

['沒有'

,'他說'

]with

open

(r"./data/stopwords.txt"

,'r'

, encoding=

'gbk'

)as f:

lines = f.readlines(

)for line in lines:))

key_words=

['賬單分期'

,'服務費'

]for word in key_words:

jieba.add_word(word)

#生成訓練資料

sentences=

for i in

range

(data.shape[0]

):sentence=

' '.join(

[word for word in jieba.cut(re.sub(r"[\,\s.'坐席客戶中性負向ok兩毛分一二三四五六七**十萬千\(\)\d-]|\[|\]",''

,data[

'content'

][i]))

if word not

in stopwords]

)

sentences類似於以下格式:

sentences= [

『幫您 張卡 停掉 張卡 卡 停掉 掛失 掛失 un 掛失.』,

'卡主 本人 卡 凍結 下 手機 掉 辦理 掛失 卡主 本人 本人 清楚 卡號 清楚 『,

『最近 做 交易 沒有 沒有 做過 交易 銀行 張卡.』,

』 臨時身份證 才 櫃檯 去 補辦銀行卡 再 問下』,

]三、抽取詞向量特徵

tfidfvectorizer的關鍵引數:

#將文字中的詞語轉換為詞頻矩陣 矩陣元素a[i][j] 表示j詞在i類文字下的詞頻

vectorizer = tfidfvectorizer(sublinear_tf=

true

, max_df=

0.5)

#統計每個詞語的tf-idf權值

transformer = tfidftransformer(

)# 第乙個fit_transform是計算tf-idf 第二個fit_transform是將文字轉為詞頻矩陣

tfidf = transformer.fit_transform(vectorizer.fit_transform(sentences)

)# 獲取詞袋模型中的所有詞語

word = vectorizer.get_feature_names(

)# 將tf-idf矩陣抽取出來,元素w[i][j]表示j詞在i類文字中的tf-idf權重

實戰tf-idf的中文文字k-means聚類

使用k-means++來初始化模型,當然也可以選擇隨機初始化,即init=『random』,然後通過pca降維到10維度上,進行聚類訓練

numclass=

5#聚類分幾簇

clf=kmeans(n_clusters=numclass,max_iter=

10000

,init=

"k-means++"

,tol=1e-

6)pca = pca(n_components=2)

# 輸出兩維

newdata = pca.fit_transform(weight)

# 載入n維

result =

list

(clf.predict(tnewdata)

)

四、視覺化聚類結果

繪圖:

plot_cluster(result,newdata,numclass)
結果如下:

短文本聚類方法

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

短文本聚類方法(QA)

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

基於短文本的推薦

很多時候系統只會推送那些大v發布的微博,而對於新人發布的優質內容就會忽略。那麼如何避免這一問題呢?首先要做的就是發現優質內容的微博。1 基本屬性 一般指使用者側的基本屬性,如年齡 性別等。由於資料中無相關資訊,於是無需進行分析。2 使用者 博文交叉特徵 統計特徵 1 過去乙個月 發布博文總數 2 過...