python - Doc2Vec 句子聚类

标签 python scikit-learn text-mining gensim doc2vec

我有多个包含多个句子的文档。我想使用 doc2vec 通过 sklearn 对句子向量进行聚类(例如 k-means)。

因此,我们的想法是将相似的句子分组到几个集群中。但是,我不清楚是否必须分别训练每个文档,然后对句子向量使用聚类算法。或者,如果我可以从 doc2vec 推断出一个句子向量而无需训练每个新句子。

现在这是我的代码片段:

sentenceLabeled = []
for sentenceID, sentence in enumerate(example_sentences):
    sentenceL = TaggedDocument(words=sentence.split(), tags = ['SENT_%s' %sentenceID])
    sentenceLabeled.append(sentenceL)

model = Doc2Vec(size=300, window=10, min_count=0, workers=11, alpha=0.025, 
min_alpha=0.025)
model.build_vocab(sentenceLabeled)
for epoch in range(20):
    model.train(sentenceLabeled)
    model.alpha -= 0.002  # decrease the learning rate
    model.min_alpha = model.alpha  # fix the learning rate, no decay
textVect = model.docvecs.doctag_syn0

## K-means ##
num_clusters = 3
km = KMeans(n_clusters=num_clusters)
km.fit(textVect)
clusters = km.labels_.tolist()

## Print Sentence Clusters ##
cluster_info = {'sentence': example_sentences, 'cluster' : clusters}
sentenceDF = pd.DataFrame(cluster_info, index=[clusters], columns = ['sentence','cluster'])

for num in range(num_clusters):
     print()
     print("Sentence cluster %d: " %int(num+1), end='')
     print()
     for sentence in sentenceDF.ix[num]['sentence'].values.tolist():
        print(' %s ' %sentence, end='')
        print()
    print()

基本上,我现在正在做的是对文档中每个标记的句子进行训练。但是,如果您认为这可以通过更简单的方式完成。

最终,包含相似词的句子应该聚集在一起并打印出来。此时单独训练每个文档,并没有清楚地揭示集群内的任何逻辑。

希望有人能引导我朝着正确的方向前进。 谢谢。

最佳答案

  • 你有没有看过你得到的词向量(使用 DM=1 算法设置)?当您检查它们时,它们是否显示出良好的相似性?
  • 我会尝试使用 tSNE 来减少你的维度,一旦你有一些看起来合理的相似词向量工作。如果需要,您可以先使用 PCA 来减少 50 个左右的维度。认为两者都在sklearn中。然后查看您的文档是否正在形成不同的组。
  • 同时查看您的 most_similar() 文档向量并在已知的训练句子上尝试 infer_vector() ,如果一切顺利,您应该得到与 1 非常接近的相似度。 (infer_vector() 每次的结果总是有点不同,所以永远不会相同!)

关于python - Doc2Vec 句子聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43476869/

相关文章:

r - 在 Shiny 中上传许多文件

r - 如何计算R中文本中的句子数?

python - 无法安装 chromedriver-binary

python - 如何为 GridSearchCV 提供用于交叉验证的索引列表?

python - scikit-learn - HashingVectorizer 上的 Tfidf

Python计算每一行的MSE

machine-learning - 文本挖掘中如何强调文章标题的重要性?

python - 在Python中重新排列列表中值的位置,而无需编写重复、乏味的代码

python - 我如何使用 python 将输出打印到 html 页面?

python - Elasticsearch 1.7 scripted_metric 分析字符串