1. 项目概述:Word2Vec的前世今生
2013年,谷歌研究员Tomas Mikolov在论文中提出的Word2Vec算法,彻底改变了自然语言处理的游戏规则。当时我在处理一个新闻分类项目,传统TF-IDF方法在语义相似度判断上表现糟糕,直到尝试用Word2Vec将词语映射到300维空间,突然发现"手机"和"智能手机"的向量距离比"手机"和"香蕉"近得多——这种直观的语义关系让我意识到词向量的革命性价值。
Word2Vec的核心思想是"观其伴而知其意",通过分析词语的上下文分布来学习语义表征。就像我们判断一个人的性格可以通过观察他的朋友圈,词语的含义也能从其周围词汇的分布中推断出来。这种分布式表征(distributed representation)相比传统的one-hot编码,不仅大幅降低了维度(从数万维降到数百维),更重要的是捕捉到了丰富的语义关系。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心算法解析:Skip-Gram与CBOW的较量
2.1 Skip-Gram:从中心词预测上下文
想象你在教AI玩文字版的"你画我猜":给出中心词"人工智能",让它猜周围可能出现的词。这就是Skip-Gram的基本思想——通过中心词预测上下文窗口内的词汇。其目标函数可以表示为:
python复制def skip_gram_loss(center_word, context_words, embeddings):
# embeddings是词向量矩阵
center_vec = embeddings[center_word]
loss = 0
for word in context_words:
# 计算中心词与上下文词的点积经过softmax后的负对数似然
loss += -np.log(softmax(np.dot(center_vec, embeddings[word].T)))
return loss
实际工程中会采用负采样(Negative Sampling)来优化计算。我曾在电商评论分析项目中发现,当处理"充电宝"这类专业词汇时,Skip-Gram比CBOW能捕捉到更细粒度的关联词(如"快充"、"毫安时")。
2.2 CBOW:上下文预测中心词
CBOW则像是让AI玩填空游戏:给你"深度学习、神经网络、______、卷积、梯度下降"这样的上下文,猜测空缺处可能是"反向传播"。其数学表达为:
python复制def cbow_loss(context_words, center_word, embeddings):
context_vec = np.mean([embeddings[w] for w in context_words], axis=0)
return -np.log(softmax(np.dot(context_vec, embeddings[center_word].T)))
在医疗文本处理中,CBOW对"阿司匹林"这种常与固定搭配出现的药物名称表现更好。根据我的经验,当训练数据少于1GB时,CBOW通常比Skip-Gram收敛更快。
关键选择原则:大数据集(>1GB)选Skip-Gram捕捉细节,小数据
