one-hot的缺点
- 维度灾难:有多少词语需要多少维度
- 无法度量词语之间的相似性
Word2Vec假设:
- 文本中离得越近的词相似度越高
Word2vec通过无监督学习从大量文本语料中提取词汇的语义信息。它使用神经网络模型来预测词汇的上下文或通过上下文预测当前词汇。具体来说,Skip-gram模型通过中心词来预测其上下文词汇,而CBOW模型则通过上下文词汇来预测中心词。
Word2vec生成的词向量可以应用于多种NLP任务中,如文本分类、情感分析、拼写检查等。词向量能够捕捉词汇之间的语义相似性和相关性,从而帮助模型更好地理解语言和进行智能处理。例如得到结果之后,可以进行聚类分析,相似度分析等等。
训练方法:
- CBOW 连续词袋模型
目标:根据上下文预测目标词
输入:上下文中多个词
输出:中间的目标词
优点:适用于大规模语料库,训练速度快。
训练方法:
- 设定一个固定大小的上下文窗口(如前后各2个词)。
- 将上下文窗口内的词向量进行平均或求和,作为隐藏层的输入。
- 通过一个隐藏层(无激活函数)连接到输出层,输出层通常使用softmax函数计算每个词作为目标词的概率。
- 通过最大化目标词的概率来优化模型参数。
- 跳字模型(Skip-gram)
目标:根据目标词预测上下文词。
输入:目标词的向量表示。
输出:预测上下文中每个词的概率分布。
特点:在小数据集或稀有词上表现较好,能够更好地捕捉词语的细微语义。
训练方法:
- 设定一个固定大小的上下文窗口。
- 将目标词的向量作为输入,通过隐藏层(通常无激活函数)连接到输出层。
- 输出层使用softmax函数计算每个上下文词的概率。
- 通过最大化上下文词的概率来优化模型参数。
您提出的问题非常有见地。确实,Softmax 函数通常用于单分类(多类别)任务,而在Word2Vec中,模型需要同时处理多个上下文词(即多个"正样本")。为了澄清这一点,让我们深入探讨Word2Vec中Softmax的具体应用方式以及它如何在多样本环境中运作。
1. Word2Vec 的基本架构
Word2Vec主要有两种架构:
- 连续词袋模型(CBOW):预测中心词(目标词)基于其上下文词。
- 跳字模型(Skip-gram):预测上下文词基于中心词。
在此,我们以跳字模型(Skip-gram)为例来说明,因为它更直接涉及到多个上下文词的预测。
2. Skip-gram 模型中的 Softmax
在Skip-gram模型中,给定一个中心词,模型的目标是预测其周围的上下文词。假设我们有一个中心词 w t w_t wt 和其上下文窗口中的上下文词 w t − 1 , w t + 1 w_{t-1}, w_{t+1} wt−1,wt+1 等。
单个上下文词的预测
这个概率 P ( w c ∣ w t ) P(w_c | w_t) P(wc∣wt) 通常通过Softmax函数计算:
P ( w c ∣ w t ) = e v w c ⋅ v w t ′ ∑ w ∈ V e v w ⋅ v w t ′ P(w_c | w_t) = \frac{e^{v_{w_c} \cdot v'{w_t}}}{\sum{w \in V} e^{v_w \cdot v'_{w_t}}} P(wc∣wt)=∑w∈Vevw⋅vwt′evwc⋅vwt′
其中:
- V V V 是词汇表的大小。
- v w v_w vw 和 v w ′ v'_w vw′ 分别是词 w w w 的输入和输出向量。
多个上下文词的处理
虽然每个上下文词的预测是一个单分类任务(即在所有可能的词中选择一个正确的词),但一个中心词通常对应多个上下文词。因此,整体的损失函数是针对所有这些上下文词的累加 或平均。
例如,假设一个中心词有 ( N ) 个上下文词,那么总的损失函数 ( \mathcal{L} ) 为:
L = − ∑ i = 1 N log P ( w c i ∣ w t ) \mathcal{L} = -\sum_{i=1}^{N} \log P(w_{c_i} | w_t) L=−i=1∑NlogP(wci∣wt)
负采样(Negative Sampling)
- 基本思想:不计算整个词汇表的Softmax,而是仅对少量"正样本"(真实的上下文词)和"负样本"(随机采样的噪声词)进行训练。
- 优点:显著降低了计算复杂度,特别适用于大规模词汇表。
- 损失函数 :
L = − log σ ( v w c ⋅ v w t ′ ) − ∑ i = 1 k log σ ( − v w n i ⋅ v w t ′ ) \mathcal{L} = -\log \sigma(v_{w_c} \cdot v'{w_t}) - \sum{i=1}^k \log \sigma(-v_{w_{n_i}} \cdot v'_{w_t}) L=−logσ(vwc⋅vwt′)−i=1∑klogσ(−vwni⋅vwt′)