关于Word2Vec中model.similarity结果不符合预期的技术咨询
为什么你的Word2Vec模型里Yellow和Banana相似度这么低?
嘿,作为Word2Vec新手遇到这个问题太正常了,我来帮你拆解下你忽略的几个核心点:
1. 训练数据集太小了(最关键原因)
Word2Vec的本质是通过大量语料的统计规律学习词与词的关联,它需要成百上千次看到“Yellow”和“Banana”一起出现的场景,才能把它们的向量拉近。你现在只有3个短句,模型根本没有足够数据捕捉“黄色”和“香蕉”的绑定关系——就像只看3个例子没法总结普遍规律一样,最终得到的向量基本是随机初始化后的微小调整,相似度自然毫无意义。
2. 输入句子结构不符合Word2Vec训练逻辑
Word2Vec依赖上下文窗口(默认是5个词)学习语义,但你的每个句子只有2个词,上下文窗口完全没法发挥作用。模型看不到“Yellow”在哪些语境下和“Banana”关联,只能孤立处理每个词对,学不到有效关联特征。
3. 模型参数设置不合理
你设置了size=300(现在gensim里该参数叫vector_size),300维的向量需要大量数据填充语义信息,在极小数据集下这么大的维度只会导致向量稀疏、随机化,反而没法学到有用的关联。
给你的改进建议
我调整了代码,你可以试试:
import gensim from gensim.models import Word2Vec # 扩充包含更多上下文的训练语料 sentences = [ ["I", "eat", "a", "yellow", "banana"], ["Yellow", "banana", "tastes", "sweet"], ["Red", "apple", "is", "my", "favorite"], ["Green", "apple", "is", "sour"], ["I", "love", "drinking", "hot", "green", "tea"] ] # 调整参数:减小向量维度,增加训练迭代次数 model = gensim.models.Word2Vec( sentences, min_count=1, vector_size=50, # 小数据集用小维度更合适 workers=4, epochs=20 # 增加迭代次数让模型充分学习语料 ) print(model.similarity('Yellow', 'Banana'))
这样修改后,模型能从更多上下文里学到“Yellow”和“Banana”的关联,相似度会明显提升。如果想要更准确的结果,建议找更大的语料(比如包含大量食物、颜色描述的文本)来训练。
内容的提问来源于stack exchange,提问作者diva
相关产品推荐
相关产品推荐

