1. 程式人生 > >基於w2v詞向量聚類出現的問題(有待解決)

基於w2v詞向量聚類出現的問題(有待解決)

cut 主題 分詞 問題 tmp kmean cab rain 如果

1.訓練詞向量代碼如下:
#訓練詞語為向量表示
def w2v_train(self):

ques = self.cu.execute(‘select question from activity‘)#將所有問題內容作為預料訓練一個w2v模型
da_all = []
for d in ques:
da_all.append(d[0])
sentences = self.get_text(da_all)
model = Word2Vec()
model.build_vocab(sentences)
model.train(sentences,total_examples = model.corpus_count,epochs = model.iter)
model.save("./tmp/user_w2corpus")
訓練的結果為一個詞一個向量
2.重新將某用戶的每個問題取出來進行分詞,然後聚類
def simmetric_topic_A(self,clust_num,userid):
from sklearn.cluster import KMeans
from sklearn.externals import joblib
texts=self.get_dict(userid)[1] # 詞匯
texts_len=len(texts)
model = gensim.models.Word2Vec.load(‘./tmp/user_w2corpus‘)
texts_vec=[]#將每個計算完單個句子的向量的結果存儲到該列表即返回句子向量
X=[]
for text in texts:#將每個句子循環一次
text_vec=np.zeros((100,))#由於默認的w2v訓練得到的向量維度為100,所以初始化為100,開始初始化為0,但是如果該句子中只有一個詞匯並且該詞匯沒有訓練到,則維度無法與之前保持一致
for t in text:#每個句子中的每個詞匯的向量求和
try:
# text_vec+=model[t]#得到句子向量
X.append(model[t])#將詞加入X,某個詞如果出現在多個文檔中,則會加入X多次
except Exception as e:
print(‘訓練的向量集合中沒有留下該詞匯‘,e)
3.發現聚類效果還可以,但是用來聚類的詞由於每個問題中會有重復詞,所以會導致最後用於聚類的詞有很多一樣的,於是我將詞去重後重新聚類,但是效果卻十分不好,聚類的質心根本沒有達到想要的效果(質心對應的詞不能代表該用戶關註的某個主題),
而有重復詞的卻達到了我想要的效果,是因為樣本量大的原因嗎?但是我是通過計算詞匯向量之間的相似度來聚類的,不過我控制了聚類個數,但是去重前後的詞不變,按理說不該聚類中心變化不是嗎???
 

基於w2v詞向量聚類出現的問題(有待解決)