如何基于 Word2Vec 模型正确地对文档名称进行聚类并找到文档之间的相似性?

How do you correctly cluster document names & find similarities between documents based on Word2Vec model?

我有一组文档 (3000),每个文档都包含一个简短的描述。我想使用 Word2Vec 模型看看我是否可以根据描述对这些文档进行聚类。

我正在按照以下方式进行操作,但我不确定这是否是一种 "good" 方式。很想得到反馈。

我正在使用 Google 经过训练的 w2v 模型。

wv = gensim.models.KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin.gz',binary=True,encoding="ISO-8859-1", limit = 100000)

每个文档都被分成单词,其中删除了停用词,我也使用了词干提取。

我最初的想法是为每个文档描述中的每个词获取词向量,对其进行平均,然后在此基础上进行聚类。

doc2vecs = []
for i in range(0, len(documents_df['Name'])):
    vec = [0 for k in range(300)] 
    for j in range(0, len(documents_df['Description'][i])):
        if documents_df['Description'][i][j] in wv:
            vec += wv[documents_df['Description'][i][j]]
    doc2vecs.append(vec/300)

然后我使用

寻找相似之处
similarities = squareform(pdist(doc2vecs, 'cosine'))

其中returns是doc2vec中每个向量之间的余弦矩阵。

然后我尝试对文档进行聚类。

num_clusters = 2
km = cluster.KMeans(n_clusters=num_clusters)
km.fit(doc2vecs)

基本上我想知道的是:

这种对文档中每个词的平均词向量进行聚类的方法是否是一种合理的文档聚类方法?

在 2019 年,除非你有严重的资源限制,否则你不需要通过平均词嵌入来向量化文档。您可以使用 Universal Sentence Encoder 向量化文档 in a few lines of code.

大多数聚类算法在低维度上表现更好,因此您希望从这里开始进行降维,然后进行聚类。 AFAIK,您将从 UMAP 获得最佳结果。 Their docs 非常清楚地解释如何执行此操作。