聚类结果不好怎么办_使用bert-serving生成词向量并聚类可视化
谷歌推出的Bert語言預(yù)處理模型的強大不必多說。而Bert-serving可以直接調(diào)用谷歌訓(xùn)練好的字向量,然后很輕松就可以生成我們需要的詞向量。這對于我們nlp的追隨者來說實驗又簡單了不少。我今天利用Bert-serving調(diào)用詞向量,并對三種不同類型的詞語進行聚類,然后可視化。
bert-serving的安裝我就不說了,很多教程都有。我直接貼出調(diào)用詞向量的代碼。例如我想得到“人工智能”的詞向量。
很簡單吧,簡單的幾行代碼就能得到相應(yīng)的詞向量并且輸出出來。我們得到的詞向量維度是768維的。我上面是生成了一個詞的詞向量,那多個詞呢?很簡單, 在集合里添加就行,如下圖所示。
所以,如果我們想對很多語料生成詞向量的話,只需將這些語料一條條的放到一個集合中就可以啦。有了詞向量我們就可以拿它來做我們想做的事情了:文本分類、情感分析、實體識別、數(shù)據(jù)聚類等等等。接下來我今天使用Bert生成的詞向量,然后利用K-means聚類算法對詞語進行聚類然后可視化。
我使用了https://github.com/fighting41love/funNLP GitHub上funNLP庫中的兩個詞語庫,分別是:地名詞庫、動物詞庫。先看一下效果圖:
可以看到的是,我們的詞語聚類結(jié)果還是很不錯的,兩種詞匯有很明顯的區(qū)分。并且絕大部分都聚類正確。下面是我的代碼。(由于對編程不是很熟,代碼可能有些冗余,見諒)。
from bert_serving.client import BertClient import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.decomposition import PCA corpus = [] bc = BertClient() km = KMeans(n_clusters=2) pca = PCA(n_components=2) gb = open('C:UsersAdministratorDesktopfunNLP-masterdata動物詞庫THUOCL_animal.txt',encoding='utf-8').readlines() for word in gb[:30]: #為了方便,每個詞庫只取了前面30個單詞word = word.split('t')corpus.append(word[0])fb = open('C:UsersAdministratorDesktopfunNLP-masterdata地名詞庫THUOCL_diming.txt',encoding='utf-8').readlines() for word in fb[:30]:word = word.split('t')corpus.append(word[0])vectors = bc.encode(corpus) vectors_ = pca.fit_transform(vectors) #降維到二維 y_ = km.fit_predict(vectors_) #聚類 plt.rcParams['font.sans-serif'] = ['FangSong'] plt.scatter(vectors_[:,0],vectors_[:, 1],c=y_) #將點畫在圖上 for i in range(len(corpus)): #給每個點進行標注plt.annotate(s=corpus[i], xy=(vectors_[:, 0][i], vectors_[:, 1][i]),xytext=(vectors_[:, 0][i] + 0.1, vectors_[:, 1][i] + 0.1)) plt.show()如有錯誤或更好的建議可以聯(lián)系我奧。
總結(jié)
以上是生活随笔為你收集整理的聚类结果不好怎么办_使用bert-serving生成词向量并聚类可视化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指offerpython_《剑指off
- 下一篇: aspx网页背景图片设置代码_pytho