整個過程分為以下幾個步驟:
一、引入,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 過...