词袋模型与 Word2Vec

词袋模型与 Word2Vec

Jackknifer
Jackknifer 博主

机器学习模型处理文本时,需要把词语和文章转换成数值。词袋模型、主题模型和 Word2Vec 使用不同的方法,保留的信息也不同。

下面从词频表示谈起,介绍 TF-IDF、N-gram、LDA 和词嵌入,再讨论 Word2Vec 的结构、训练方法及其与 LDA 的联系。文中的交互演示可以直接调整参数。

一、文本为什么需要数值表示?

考虑一个电影推荐系统。电影 A 的简介是“人工智能研究者学习神经网络”,电影 B 是“科学家研究机器学习算法”,电影 C 是“一段关于爱情与家庭的故事”。

如果希望利用内容推荐电影,就需要衡量简介之间的相似程度。机器学习模型通常把一个样本表示成向量:

x=(x1,x2,…,xd)∈Rd\boldsymbol{x}=(x_1,x_2,\ldots,x_d)\in\mathbb{R}^d

这里的  x \,\boldsymbol{x}\, 是数值特征, d \,d\, 是向量维度。文本表示(Text Representation)就是建立从文字到数值的映射。不同方法保留的信息不同:有的保留词语出现次数,有的保留相邻词语关系,有的学习主题分布,还有的学习词语之间的语义关系。

二、词袋模型:怎样把文章变成向量?

2.1 词汇表与词频向量

词袋模型(Bag of Words,BoW)为语料中的每个不同词语分配一个向量位置。向量上的数值表示该词在当前文章中出现多少次。

假设有三篇短文:

  • 文档 A:我 喜欢 机器 学习
  • 文档 B:我 喜欢 自然 语言
  • 文档 C:自然 语言 处理

全部词语形成词汇表:

V={我,喜欢,机器,学习,自然,语言,处理}V=\{\text{我},\text{喜欢},\text{机器},\text{学习},\text{自然},\text{语言},\text{处理}\}

词汇表包含 7 个词,因此每篇文档都对应一个 7 维向量:

xA=(1,1,1,1,0,0,0)xB=(1,1,0,0,1,1,0)xC=(0,0,0,0,1,1,1)\begin{aligned} \boldsymbol{x}_A&=(1,1,1,1,0,0,0)\\ \boldsymbol{x}_B&=(1,1,0,0,1,1,0)\\ \boldsymbol{x}_C&=(0,0,0,0,1,1,1) \end{aligned}

这种方法容易计算,结果可以直接用于逻辑回归、朴素贝叶斯或文档相似度计算。由于每篇文章只包含词汇表中的少数词,向量一般十分稀疏,可以使用稀疏矩阵节省存储空间。

2.2 为什么词袋模型难以表达语序和语义?

考虑“我喜欢你”和“你喜欢我”。两句话的词汇完全相同,每个词的出现次数也相同。词袋模型会得到相同向量,因此仅靠词袋特征无法区分二者的语序。

再考虑“我喜欢电影”和“我喜爱影片”。“喜欢”与“喜爱”、“电影”与“影片”具有相近的含义,但它们在词袋模型中占据不同位置。词袋模型不会自动让近义词的向量接近。

还有一个问题是维度:词汇表如果有 50,000 个词,每篇文章就具有 50,000 个位置。较高的维度会影响部分算法的训练、存储与泛化表现。

三、TF-IDF:词频与文档频率

3.1 TF 衡量词语在当前文章中的出现情况

词频(Term Frequency,TF)的一种常见定义是:

TF(t,d)=n(t,d)∑wn(w,d)TF(t,d)=\frac{n(t,d)}{\sum_w n(w,d)}

其中, n(t,d) \,n(t,d)\, 表示词语  t \,t\, 在文档  d \,d\, 中出现的次数,分母为文档总词数。

例如,100 个词的文章中,“机器学习”出现 5 次,那么  TF=5/100=0.05 \,TF=5/100=0.05\,。

TF 也可以直接定义为出现次数。使用哪种形式,应在整个计算过程中保持一致。

3.2 IDF 衡量词语在语料库中的常见程度

假设语料库共有 1,000 篇文章。“的”出现在 900 篇文章中,“机器学习”只出现在 10 篇文章中。

这两个词在不同文章中的区分能力可能差异很大。逆文档频率(Inverse Document Frequency,IDF)采用:

IDF(t)=ln⁡DDF(t)IDF(t)=\ln\frac{D}{DF(t)}

这里  D \,D\, 是全部文档数量, DF(t) \,DF(t)\, 是包含该词的文档数量。

对于“的”:

IDF(的)=ln⁡1000900≈0.105IDF(\text{的})=\ln\frac{1000}{900}\approx0.105

对于“机器学习”:

IDF(机器学习)=ln⁡100010≈4.605IDF(\text{机器学习})=\ln\frac{1000}{10}\approx4.605

“机器学习”的 IDF 更高,说明它在这个语料库中具有更强的区分能力。稀有程度并不能直接保证词语有用,因为拼写错误或随机编号也可能很少出现。

3.3 TF-IDF 的计算例子

词频-逆文档频率(TF-IDF)把两个指标相乘:

TF-IDF(t,d)=TF(t,d)×IDF(t)\boxed{TF\text{-}IDF(t,d)=TF(t,d)\times IDF(t)}

例如,两种词语都出现在一篇包含 100 个词的文章中:

  • “人工智能”出现 10 次,并且出现在 1,000 篇文章中的 500 篇。
  • “机器学习”出现 5 次,并且只出现在 10 篇文章中。

逐项计算:

TF-IDF(人工智能)=0.10ln⁡(1000/500)≈0.0693TF-IDF(机器学习)=0.05ln⁡(1000/10)≈0.2303\begin{aligned} TF\text{-}IDF(\text{人工智能})&=0.10\ln(1000/500)\approx0.0693\\ TF\text{-}IDF(\text{机器学习})&=0.05\ln(1000/10)\approx0.2303 \end{aligned}

尽管“机器学习”在当前文章中的出现次数更少,其 TF-IDF 仍然更高。这里使用自然对数和未经平滑的基本公式。实际工具可能加入平滑、对数词频或向量归一化,因此具体数值会有所不同。

3.4 交互演示:词频和文章数量如何改变权重?

滑动两个控件,观察 TF、IDF 与最终权重。参考词语的权重保持为 0.0693,可以直观比较“当前文章中经常出现”与“在整个语料库中很少出现”这两个因素。

单独打开TF-IDF 交互计算:调整出现次数和文档频率,实时查看计算公式、权重与对比柱形。支持单独打开。

四、N-gram:如何保留相邻词语的顺序?

N-gram 是由连续  N \,N\, 个词语组成的序列。若句子是“我 喜欢 学习 机器 学习”,那么:

  • Unigram(1-gram)包含“我”“喜欢”“学习”“机器”“学习”。
  • Bigram(2-gram)包含“我·喜欢”“喜欢·学习”“学习·机器”“机器·学习”。
  • Trigram(3-gram)包含“我·喜欢·学习”“喜欢·学习·机器”“学习·机器·学习”。

这使“机器学习”“自然语言处理”等完整词组能够作为特征出现,也使“我喜欢你”和“你喜欢我”具有不同的相邻词组。

单独打开N-gram 语序实验:切换 Unigram、Bigram 和 Trigram,观察两句话的特征与余弦相似度变化。支持单独打开。

N-gram 仍然存在限制。假设词汇表大小为  ∣V∣ \,|V|\,,理论上长度为  N \,N\, 的词序列最多有  ∣V∣N \,|V|^N\, 种。随着  N \,N\, 增加,潜在特征数量增长很快。实际出现的组合会少得多,但稀疏问题仍然存在。

另外,固定长度的 N-gram 主要捕捉局部关系。句子中距离较远的词语,仍然很难通过较小的 N-gram 建立联系。

五、主题模型与 LDA

主题模型(Topic Model)尝试从文档集合中学习若干潜在主题。每个主题对应一个词语概率分布,每篇文章也对应一个主题概率分布。

例如,一个主题经常包含“算法、模型、人工智能”,可以理解为科技主题;另一个主题经常包含“球队、冠军、比赛”,可以理解为体育主题。

一篇讨论“人工智能分析体育比赛数据”的文章,可以同时包含科技与体育主题。例如:

P(科技∣d)=0.7,P(体育∣d)=0.3P(\text{科技}\mid d)=0.7,\qquad P(\text{体育}\mid d)=0.3

那么整篇文章就可以用主题向量  θd=(0.7,0.3) \,\boldsymbol{\theta}_d=(0.7,0.3)\, 表示。主题概率之和为 1。

5.1 LDA 如何描述文章的生成过程?

隐狄利克雷分配(Latent Dirichlet Allocation,LDA)是一种经典概率主题模型。假设共有  T \,T\, 个主题。它为文章  d \,d\, 设置主题分布:

θd∼Dirichlet⁡(α)\boldsymbol{\theta}_d\sim\operatorname{Dirichlet}(\boldsymbol{\alpha})

并为每个主题  k \,k\, 设置词语分布:

ϕk∼Dirichlet⁡(β)\boldsymbol{\phi}_k\sim\operatorname{Dirichlet}(\boldsymbol{\beta})

对于文章中的每一个词语位置,模型按照文章主题分布选择主题,再按照对应主题的词语分布选择词语:

zdi∼Categorical⁡(θd)wdi∼Categorical⁡(ϕzdi)\begin{aligned} z_{di}&\sim\operatorname{Categorical}(\boldsymbol{\theta}_d)\\ w_{di}&\sim\operatorname{Categorical}(\boldsymbol{\phi}_{z_{di}}) \end{aligned}

因此,给定主题分布与主题词语分布时,某个词语在文章中出现的概率可以写成:

P(w∣d)=∑k=1TP(w∣z=k)P(z=k∣d)\boxed{P(w\mid d)=\sum_{k=1}^{T}P(w\mid z=k)P(z=k\mid d)}

例如,如果“算法”在科技主题中的概率为 0.20,在体育主题中的概率为 0.01,而文章科技主题比例为 0.7,那么:

P(算法∣d)=0.7×0.20+0.3×0.01=0.143\begin{aligned} P(\text{算法}\mid d)&=0.7\times0.20+0.3\times0.01\\ &=0.143 \end{aligned}

5.2 交互演示:主题比例如何决定词语概率?

通过滑块调节科技主题的比例,体育主题自动补足到 100%。演示用全概率公式实时计算“算法”“球队”“数据”三个词的出现概率。

单独打开LDA 主题混合实验:改变科技与体育主题比例,观察词语概率及公式变化。支持单独打开。

主题模型的一个优势是具有一定可解释性:通过一个主题概率较高的词语,人们有机会理解主题内容。不过,模型自动发现的主题未必总有清晰含义。

六、词嵌入:为什么需要低维向量?

6.1 独热编码为何无法直接体现相似词?

考虑词汇表  V={猫,狗,汽车,飞机} \,V=\{\text{猫},\text{狗},\text{汽车},\text{飞机}\}\,。独热编码(One-hot Encoding)给每个词分配独立位置:

猫=(1,0,0,0)狗=(0,1,0,0)汽车=(0,0,1,0)飞机=(0,0,0,1)\begin{aligned} \text{猫}&=(1,0,0,0)\\ \text{狗}&=(0,1,0,0)\\ \text{汽车}&=(0,0,1,0)\\ \text{飞机}&=(0,0,0,1) \end{aligned}

尽管“猫”和“狗”在语义上相近,它们的点积仍然等于 0。任意两个不同词的独热向量也有相同现象。

6.2 词嵌入怎样建立连续空间?

词嵌入(Word Embedding)为每个词学习一个  K \,K\, 维稠密向量:

f:V⟶RKf:V\longrightarrow\mathbb{R}^{K}

例如,可以用以下二维向量说明相似关系:

v猫=(0.9,0.1)v狗=(0.8,0.2)v汽车=(0.1,0.9)v飞机=(0.2,0.8)\begin{aligned} \boldsymbol{v}_{\text{猫}}&=(0.9,0.1)\\ \boldsymbol{v}_{\text{狗}}&=(0.8,0.2)\\ \boldsymbol{v}_{\text{汽车}}&=(0.1,0.9)\\ \boldsymbol{v}_{\text{飞机}}&=(0.2,0.8) \end{aligned}

这组二维向量中,猫与狗彼此接近,汽车与飞机也彼此接近。真实的词向量通常有几十到几百个维度,其数值由训练得到。

单独打开词向量二维空间:拖动滑块改变词语坐标,实时观察欧氏距离与余弦相似度。支持单独打开。

一篇包含  L \,L\, 个词的文章,可以按照词语顺序形成  L×K \,L\times K\, 的矩阵:

X=[vw1⊤vw2⊤⋮vwL⊤]∈RL×KX=\begin{bmatrix}\boldsymbol{v}_{w_1}^\top\\\boldsymbol{v}_{w_2}^\top\\\vdots\\\boldsymbol{v}_{w_L}^\top\end{bmatrix} \in\mathbb{R}^{L\times K}

之后可以采用平均池化、卷积神经网络、循环神经网络或其他序列模型形成文章表示。平均词向量计算方便,但可能忽略语序和否定词等重要信息。

七、Word2Vec 为什么能从文本中学到词向量?

Word2Vec 是 2013 年提出的一类词嵌入学习方法。其核心思想是利用一个词与周围词语之间的关系,构造能够从文本本身得到训练目标的预测任务。

例如:

  • 我喜欢吃苹果。
  • 我喜欢吃香蕉。
  • 我喜欢吃橙子。

“苹果”“香蕉”“橙子”反复出现在相似上下文中。模型为了预测这些上下文,需要为不同词学习合适的向量。训练后,出现在类似上下文中的词向量可能比较接近。

Word2Vec 常见的两种结构是 CBOW 和 Skip-gram。

7.1 CBOW:根据上下文预测中心词

CBOW(Continuous Bag of Words,连续词袋模型)把周围的词作为输入,预测中间的词。以“我 非常 喜欢 机器 学习 课程”为例,中心词为“机器”,左右窗口大小都为 2。

输入为“非常、喜欢、学习、课程”,训练目标是“机器”:

P(机器∣非常、喜欢、学习、课程)P(\text{机器}\mid\text{非常、喜欢、学习、课程})

设上下文中有  C \,C\, 个词,其词向量为  vw1,…,vwC \,\boldsymbol{v}_{w_1},\ldots,\boldsymbol{v}_{w_C}\,。一种常见实现会取平均向量:

h=1C∑j=1Cvwj\boldsymbol{h}=\frac1C\sum_{j=1}^{C}\boldsymbol{v}_{w_j}

随后输出层预测中心词。另一些实现使用向量求和,二者的输入数值尺度不同。

7.2 Skip-gram:根据中心词预测上下文

Skip-gram 将中心词作为输入,分别预测附近词语。对于同一句话,中心词仍然是“机器”。

训练词语对包括:“机器→非常”“机器→喜欢”“机器→学习”“机器→课程”。

设中心词为  wc \,w_c\,,某个上下文目标词为  wo \,w_o\,。Skip-gram 学习:

P(wo∣wc)P(w_o\mid w_c)

CBOW 在一个训练样本中汇总多个上下文词;Skip-gram 可以由一个中心词产生多个词语对。这也解释了两种结构在计算与训练样本组织上的差异。

7.3 交互演示:窗口、预测方向和梯度下降

下面的演示使用 6 个词、二维词向量与完整 Softmax。选择 CBOW 或 Skip-gram,调节窗口大小,查看当前训练目标以及前向计算产生的概率。点击“梯度下降一次”,将按照交叉熵梯度更新输出矩阵。

单独打开Word2Vec 交互训练:选择 CBOW 或 Skip-gram,调整中心词和窗口,并执行真实的输出层梯度更新。支持单独打开。

八、Word2Vec 的三个计算层

8.1 输入层:One-hot 如何取出词向量?

设词汇表大小为  N=4 \,N=4\,,希望学习的词向量维度为  K=2 \,K=2\,。输入权重矩阵为:

Win=[0.10.20.70.80.30.40.50.6]∈R4×2W_{\mathrm{in}}= \begin{bmatrix} 0.1&0.2\\0.7&0.8\\0.3&0.4\\0.5&0.6 \end{bmatrix} \in\mathbb{R}^{4\times2}

假设词汇表依次是“我、喜欢、机器、学习”。输入“喜欢”时,其独热向量为:

x=(0,1,0,0)\boldsymbol{x}=(0,1,0,0)

矩阵乘法得到:

h=xWin=(0.7,0.8)\boxed{\boldsymbol{h}=\boldsymbol{x}W_{\mathrm{in}}=(0.7,0.8)}

独热向量只有一个位置为 1,因此乘法的效果是选取输入权重矩阵中的对应行。这个权重矩阵就构成了 Embedding(嵌入)查找表。

8.2 映射层和输出层

对于 Skip-gram,映射层输出中心词向量  h∈RK \,\boldsymbol{h}\in\mathbb{R}^{K}\,。再引入输出权重矩阵:

Wout∈RK×NW_{\mathrm{out}}\in\mathbb{R}^{K\times N}

计算:

z=hWout∈RN\boldsymbol{z}=\boldsymbol{h}W_{\mathrm{out}}\in\mathbb{R}^{N}

其中  zi \,z_i\, 是第  i \,i\, 个词的输出分数。通过 Softmax 函数转换为概率:

P(wi)=ezi∑j=1Nezj\boxed{P(w_i)=\frac{e^{z_i}}{\sum_{j=1}^{N}e^{z_j}}}

对全部词求和可得 1。假设输出分数是  (1,2,1,0) \,(1,2,1,0)\,,那么:

P(w2)=e2e1+e2+e1+e0≈0.534P(w_2)=\frac{e^2}{e^1+e^2+e^1+e^0}\approx0.534

这说明第二个词在当前输出分布中获得约 53.4% 的预测概率。

8.3 为什么训练完成后能获得词向量?

两个权重矩阵开始时通常经过随机初始化。模型通过大量中心词与上下文词的预测任务,不断降低损失函数。

对于一个中心词-目标词训练对,Skip-gram 的条件概率可以写为:

P(wo∣wc)=exp⁡(uwo⊤vwc)∑w∈Vexp⁡(uw⊤vwc)\boxed{ P(w_o\mid w_c)= \frac{\exp(\boldsymbol{u}_{w_o}^{\top}\boldsymbol{v}_{w_c})} {\sum_{w\in V}\exp(\boldsymbol{u}_{w}^{\top}\boldsymbol{v}_{w_c})} }

这里  vwc \,\boldsymbol{v}_{w_c}\, 来自输入权重矩阵, uwo \,\boldsymbol{u}_{w_o}\, 来自输出权重矩阵。

对于  M \,M\, 个训练词语对,最小化负对数似然损失:

L(θ)=−∑i=1Mlog⁡P(wo(i)∣wc(i);θ)\boxed{ \mathcal L(\theta)=- \sum_{i=1}^{M} \log P(w_o^{(i)}\mid w_c^{(i)};\theta) }

如果真实目标词当前概率为  0.534 \,0.534\,,那么单次损失是:

−ln⁡(0.534)≈0.627-\ln(0.534)\approx0.627

概率提高到  0.9 \,0.9\, 时,损失降低到:

−ln⁡(0.9)≈0.105-\ln(0.9)\approx0.105

Softmax 与交叉熵配合时,对输出分数的梯度尤其简单:

∂L∂z=p−y\boxed{\frac{\partial\mathcal L}{\partial\boldsymbol{z}}=\boldsymbol{p}-\boldsymbol{y}}

其中  p \,\boldsymbol{p}\, 是预测概率向量, y \,\boldsymbol{y}\, 是真实目标词的独热向量。经过反向传播,输入与输出权重矩阵都可以按照梯度进行更新:

W(t+1)=W(t)−η∇WLW^{(t+1)}=W^{(t)}-\eta\nabla_W\mathcal L

训练完成后,通常把  Win \,W_{\mathrm{in}}\, 的每一行作为对应词的向量表示。输出权重矩阵同样包含有用信息,也可以单独使用或与输入向量结合。

九、Word2Vec 为什么使用负采样?

9.1 完整 Softmax 的代价

如果词汇表包含 100,000 个词,完整 Softmax 的分母就包含 100,000 项。每次训练都要处理大量词语分数,大规模训练的计算代价较高。

Word2Vec 可以使用 Hierarchical Softmax(层次 Softmax)或 Negative Sampling(负采样)提高训练效率。

层次 Softmax 利用二叉树中的一条路径表示一个词。在平衡树中,所需分支概率计算数量通常随  log⁡∣V∣ \,\log |V|\, 增长。

9.2 负采样怎样构造目标?

假设语料中的真实词语对是“机器→学习”。这是正样本。训练时再从噪声分布中抽取若干词语,形成其他词语对,例如“机器→蛋糕”和“机器→天气”。

我们希望正样本点积较高,而抽取的负样本点积较低。

定义 Sigmoid:

σ(x)=11+e−x\sigma(x)=\frac{1}{1+e^{-x}}

对于一个正样本和  k \,k\, 个负样本,最大化:

J=log⁡σ(uwo⊤vwc)+∑j=1klog⁡σ(−uwj−⊤vwc)\boxed{ \begin{aligned} J={}&\log\sigma(\boldsymbol{u}_{w_o}^{\top}\boldsymbol{v}_{w_c})\\ &+\sum_{j=1}^{k}\log\sigma(-\boldsymbol{u}_{w_j^-}^{\top}\boldsymbol{v}_{w_c}) \end{aligned} }

这个目标可以用“提高正样本分数、降低负样本分数”理解。负采样使用了不同于完整 Softmax 的训练目标,因此它给出的分数不能直接当作整个词汇表上的 Softmax 概率。

9.3 交互演示:Softmax 和负采样损失

在下面的演示中,可以分别调整四个输出分数,观察 Softmax 概率与交叉熵梯度;也可以调整正负样本点积,查看负采样损失如何变化。

单独打开Softmax 与 Negative Sampling 交互实验:输出分数、目标词、交叉熵梯度及负采样损失均可实时调整。支持单独打开。

十、Word2Vec 为什么能表示词语相似性?

假设“苹果”“香蕉”“橙子”经常与“吃”“买”“水果”共同出现。

在 Skip-gram 中,输入这些词时,模型需要预测相似的上下文词语。为了完成预测任务,模型可能学到相近的词向量。

可以使用余弦相似度衡量词向量的接近程度:

sim⁡(a,b)=va⊤vb∥va∥2 ∥vb∥2\boxed{ \operatorname{sim}(a,b)= \frac{\boldsymbol{v}_a^{\top}\boldsymbol{v}_b} {\|\boldsymbol{v}_a\|_2\,\|\boldsymbol{v}_b\|_2} }

这种接近反映词语使用环境的统计规律,并不保证语义完全相同。近义词可能接近;“热”和“冷”等经常出现在类似句式中的反义词,也可能具有较高的向量相似度。

标准 Word2Vec 还有两项局限:

  • 多义词:例如“苹果”可以表示水果,也可以表示公司。经典 Word2Vec 通常为该词学习一个固定向量。
  • 未登录词:没有进入训练词汇表的新词,通常没有对应的已学习向量。利用字符或子词信息的 FastText 等方法可以缓解这一问题。

此外,Word2Vec 学到的是词语向量。要理解整句话的否定、顺序及较远距离的关系,通常还需要其他文本模型进行加工。

十一、LDA 与 Word2Vec 的区别和联系

LDA 与 Word2Vec 都从词语的共同出现关系中学习潜在结构。但两种模型处理的对象与结果不同。

比较项目 LDA Word2Vec
主要任务 主题发现与文档主题分布 词语向量学习
主要依据 文档中的词语共现 局部上下文中的词语共现
基本形式 概率生成式模型 浅层神经网络词嵌入模型
输出 文档-主题、主题-词语分布 连续数值形式的词向量
可解释性 主题常可以通过高概率词解释 词向量各维通常难以直接解释

11.1 从矩阵表示理解

假设共有  D \,D\, 篇文章、 T \,T\, 个主题、 V \,V\, 个词。LDA 学习文档-主题矩阵和主题-词语矩阵:

Θ∈RD×T,Φ∈RT×V\Theta\in\mathbb{R}^{D\times T},\qquad \Phi\in\mathbb{R}^{T\times V}

其中,矩阵的行用于表示概率分布。

Word2Vec 学习输入与输出权重矩阵:

Win∈RV×K,Wout∈RK×VW_{\mathrm{in}}\in\mathbb{R}^{V\times K},\qquad W_{\mathrm{out}}\in\mathbb{R}^{K\times V}

LDA 的中间变量具有“主题”的概率解释;Word2Vec 的中间变量是由预测目标学习的连续向量。主题模型也可以修改为利用局部上下文,词嵌入方法也可以利用文档级共现信息。因此,最终仍需要结合概率假设、目标函数和模型结构理解两者的联系。

11.2 用于电影推荐时如何选择?

假设电影 A 是“人工智能研究者探索机器学习”,电影 B 是“神经网络科学家研究算法”,电影 C 是“年轻情侣的爱情故事”。

词袋模型可以依据共同词语计算相似程度;TF-IDF 可以提高具有区分能力词语的权重;N-gram 能保留局部词序;LDA 可以将电影简介表示为科技、爱情等主题的分布;Word2Vec 则可以利用相似上下文,让“机器学习”和“神经网络”等相关词语具有相近的向量表示。

对于 Word2Vec,可以通过平均词向量形成一个简单的电影简介向量:

d=1L∑i=1Lvwi\boldsymbol{d}=\frac1L\sum_{i=1}^{L}\boldsymbol{v}_{w_i}

然后利用余弦相似度比较电影简介。这种方法便于计算,具体推荐效果需要在真实数据上评估。

十二、几个常见问题

12.1 为什么高频词的 TF-IDF 权重有时很低?

高频词只说明它在当前文章中反复出现。如果这个词也出现在大量其他文章中,IDF 就会较低。两个因素相乘后,最终权重可能仍然很小。

12.2 为什么 Word2Vec 的输入权重可以作为词向量?

因为 One-hot 乘以输入权重矩阵等价于选择对应的一行。训练过程中,这一行参数会参与上下文预测,并受到损失函数梯度更新,因此逐渐形成能够反映词语使用关系的向量。

12.3 为什么 CBOW 能使用多个输入词?

它将上下文词向量求和或取平均,形成固定维度的隐藏向量。这样,不同数量的上下文词可以进入相同维度的输出层。

12.4 为什么负采样能够提高训练效率?

每次训练仅计算正样本和少量抽取的负样本词语对,减少了对整个词汇表进行完整概率归一化的计算。负样本抽取方式和抽取数量也会影响训练结果。

12.5 为什么主题相近的文章仍然可能使用完全不同的词语?

同一主题可以包含多个相关词语。文章在主题上的分布相近,并不要求文章中的词语完全相同。这也是主题模型和词向量方法能够补充词频表示的重要原因。

评论

评论由 GitHub Giscus 提供。若当前网络无法加载,可 前往 GitHub Discussions 查看或参与讨论。

目录
词袋模型与 Word2Vec