You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Word2Vec计算K-Means中文本文档间的距离?

问题:如何基于Word2Vec计算K-Means中文本文档间的距离?

我最近刚接触Word2Vec,在理解其如何应用于K-Means聚类时遇到了困难。我清楚TF-IDF向量结合K-Means的工作方式:每个文本文档对应一个TF-IDF值向量,选定初始聚类中心后,可通过欧氏距离最小化文档向量间的距离。但Word2Vec中每个词被表示为一个向量,这是否意味着每个文档对应一个矩阵?如果是这样,该如何计算与其他文本文档间的最小距离?

补充说明

为进一步解释我的困惑,请参考以下代码:

vectorizer = TfidfVectorizer() 
tfidf_matrix = vectorizer.fit_transform(sentences_tfidf) 
print(tfidf_matrix.toarray()) 

model = Word2Vec(sentences_word2vec, min_count=1) 
word2vec_matrix = model[model.wv.vocab] 
print(len(word2vec_matrix)) 
for i in range(0,len(word2vec_matrix)): 
    print(X[i]) 

运行后返回结果:

[[ 0. 0.55459491 0. 0. 0.35399075 0. 0. 0. 0. 0. 0. 0. 0. 0.437249 0.35399075 0.35399075 0.35399075 0. ] 
 [ 0. 0. 0. 0.44302215 0.2827753 0. 0. 0. 0.34928375 0. 0. 0. 0.34928375 0. 0.2827753 0.5655506 0.2827753 0. ] 
 [ 0. 0. 0.35101741 0. 0. 0.27674616 0.35101741 0. 0. 0.35101741 0. 0.35101741 0.27674616 0.27674616 0.44809973 0. 0. 0.27674616] 
 [ 0.40531999 0. 0. 0. 0.2587105 0.31955894 0. 0.40531999 0.31955894 0. 0.40531999 0. 0. 0. 0. 0.2587105 0.2587105 0.31955894]] 
20 
[ 4.08335682e-03 -4.44161100e-03 3.92342824e-03 3.96498619e-03 6.99949533e-06 -2.14108804e-04 1.20419310e-03 -1.29191438e-03 1.64671184e-03 3.41688609e-03 -4.94929403e-03 2.90348311e-03 4.23802016e-03 -3.01274913e-03 -7.36164337e-04 3.47558968e-03 -7.02908786e-04 4.73567843e-03 -1.42914290e-03 3.17237526e-03 9.36070050e-04 -2.23833631e-04 -4.03443904e-04 4.97530040e-04 -4.82502300e-03 2.42140982e-03 -3.61089432e-03 3.37070058e-04 -2.09900597e-03 -1.82093668e-03 -4.74618562e-03 2.41499138e-03 -2.15628324e-03 3.43719614e-03 7.50159554e-04 -2.05973233e-03 1.92534993e-03 1.96503079e-03 -2.02400610e-03 3.99564439e-03 4.95056808e-03 1.47033704e-03 -2.80071306e-03 3.59585625e-04 -2.77896033e-04 -3.21732066e-03 4.36303904e-03 -2.16396619e-03 2.24438333e-03 -4.50925855e-03 -4.70488053e-03 6.30825118e-04 3.81869613e-03 3.75767215e-03 5.01064525e-04 1.70175335e-03 -1.26033701e-04 -7.43318116e-04 -6.74833194e-04 -4.76678275e-03 1.53754558e-03 2.32421421e-03 -3.23472451e-03 -8.32759659e-04 4.67014220e-03 5.15853462e-04 -1.15449808e-03 -1.63017167e-03 -2.73897988e-03 -3.95627553e-03 4.04657237e-03 -1.79282576e-03 -3.26930732e-03 2.85121426e-03 -2.33304151e-03 -2.01760884e-03 -3.33597139e-03 -1.19233003e-03 -2.12347694e-03 4.36858647e-03 2.00414215e-03 -4.23572073e-03 4.98410035e-03 1.79121632e-03 4.81655030e-03 3.33247939e-03 -3.95260006e-03 1.19335402e-03 4.61675343e-04 6.09758368e-04 -4.74696746e-03 4.91552567e-03 1.74517138e-03 2.36604619e-03 -3.06009664e-04 3.62954312e-03 3.56943789e-03 2.92139384e-03 -4.27138479e-03 -3.51175456e-03] 
[ -4.14272398e-03 3.45513038e-03 -1.47538856e-04 -2.02292087e-03 -2.96578306e-04 1.88684417e-03 -2.63865804e-03 2.69249966e-03 4.57606697e-03 2.19206396e-03 2.01336667e-03 1.47434452e-03 1.88332598e-03 -1.14452699e-03 -1.35678309e-03 -2.02636060e-04 -3.26160830e-03 -3.95368552e-03 1.40415027e-03 2.30542314e-03 -3.18884710e-03 -4.46776347e-03 3.96415358e-03 -2.07852037e-03 4.98413946e-03 -6.43568579e-04 -2.53325375e-03 1.30117545e-03 1.26555841e-03 -8.84680718e-04 -8.34991166e-04 -4.15050285e-03 4.66807076e-04 1.71844949e-04 1.08140183e-03 4.37910948e-03 -3.28412466e-03 2.09890743e-04 2.29888223e-03 4.70223464e-03 -2.31004297e-03 -5.10134443e-04 2.57104915e-03 -2.55978899e-03 -7.55646848e-04 -1.98197929e-04 1.20443532e-04 4.63618943e-03 1.13036349e-05 8.16594984e-04 -1.65917678e-03 3.29331891e-03 -4.97825304e-03 -2.03667139e-03 3.60272871e-03 7.44500838e-04 -4.40325850e-04 6.38399797e-04 -4.23364760e-03 -4.56386572e-03 4.77551389e-03 4.74880403e-03 7.06148741e-04 -1.24937459e-03 -9.50689311e-04 -3.88551364e-03 -4.45985980e-03 -1.15060725e-03 3.27067473e-03 4.54987818e-03 2.62327422e-03 -2.40981602e-03 4.55576897e-04 3.19155119e-03 -3.84227419e-03 -1.17610034e-03 -1.45622855e-03 -4.32460709e-03 -4.12792247e-03 -1.74557802e-03 4.66075348e-04 3.39668151e-03 -4.00651991e-03 1.41077011e-03 -7.89384532e-04 -6.56061340e-04 1.14822399e-03 4.12205653e-03 3.60721885e-03 -3.11746349e-04 1.44255662e-03 3.11965472e-03 -4.93455213e-03 4.80490318e-03 2.79991422e-03 4.93505970e-03 3.69034940e-03 4.76422161e-03 -1.25827035e-03 -1.94680784e-03] 
... 
[ -3.92252317e-04 -3.66805331e-03 1.52376946e-03 -3.81564132e...]]

解答

核心思路:把文档从「词向量矩阵」转换成「单一文档向量」

你观察得很准——Word2Vec确实是给每个词生成独立向量,但K-Means要求每个样本必须是单一的一维向量,所以我们必须先把文档的所有词向量合并成一个能代表整个文档的向量,这是衔接Word2Vec和K-Means的关键步骤。常用的合并方法有两种:

1. 简单平均法(最常用、易实现)

直接对文档中所有词的向量做算术平均,得到一个和词向量维度相同的文档向量。比如你的Word2Vec词向量是100维,那每个文档最终就是100维向量,这样结构就和TF-IDF的输出完全一致了,后续计算欧氏距离、运行K-Means的步骤和TF-IDF那套完全相同。

基于你的代码修改的示例:

from gensim.models import Word2Vec
import numpy as np
from sklearn.cluster import KMeans

# 假设sentences_word2vec是分词后的句子列表,比如[["我","爱","编程"], ["Python","很","好用"]]
model = Word2Vec(sentences_word2vec, min_count=1)

# 定义函数:将分词后的句子转换为平均向量
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:33:27