本文全称:基于 Embedding 的相似度检索(Word2Vec),核心目标是通过无监督学习来计算词的分布式表示
# Embedding 是什么
你有一堆单词(比如 猫 、 狗 、 汽车 ),Embedding 就是把这些词变成一串数字(比如 [-0.2, 0.5, 1.3...] ),这串数字能代表这个词的含义
- 意思相近的词(
猫 和 狗 ),它们的数字串也相似 - Word2Vec 就是生成这种数字串的工具之一
# One-Hot Representation
一种最简单的词向量方式是 One−Hot 编码,用一个很长的 01 串来表示,One−Hot 编码可以采用稀疏方式存储,利用 Hash 给每个词分配一个编号,但是这种方法有以下缺点:
- 当词量不断增大时,会直接维度爆炸
- 任意两个词直接说孤立的
- 当维度特别大时,0 会变得特别多,使得向量中有用的信息特别短
# Distributed representation
基本想法是:通过训练将某种语言中的每一个词映射成一个固定长度的短向量(这个短是相对于 One−Hot Reoresentation 的长而言的),所有这些向量构成一个词向量空间,而每一个向量则可视为该空间中的一个点,在这个空间上引入 “距离”,就可以根据词之间的距离判断语法、语义上的相似性
# 统计语言模型
统计语言模型是用来计算一个句子的概率的模型,基于语料库构建
W=(w1,...,wT) 表示由 T 个词 w1,...,wT 按顺序构成的句子,联合概率为 p(W)=p(w1,...,wT)
利用贝叶斯公式可链式分解为
p(W)=p(w1)⋅p(w2∣W1)⋅⋅⋅p(wT∣w1,...,WT−1)
但是计算的量级是很恐怖的
若语料库词典大小为 N,那么长度为 T 的任意句子,理论上有 NT 种可能,那么总参数数量为 k⋅NT,k 是每个句子需要计算的数量
# N-gram 模型
根据大数定理,当语料库词典足够大时,可以近似看作
p(wk∣w1,...,wk−1)≈count(w1,...,wk−1)count(w1,...,wk)
- count(w1,...,wk):表示 w1−⋅⋅⋅−wk 连续出现的次数(当 k 很大时,计算 count 会变得很困难)
从贝叶斯公式的链式分解可以看出,一个词出现的概率与它前面的所有词都相关。如果假定,一个词出现的概率只与它前面固定数目的词相关呢?
这就是 N−gram 模型的基本思想,认为
p(wk∣w1,...,wk−1)≈p(wk∣wk−n+1,...,wk−1)
通过这样的简化,统计变得容易,模型参数量参考如下(假定词典大小为 N=2×105),模型的量级是 O(Nn),在实际应用中,一般取 n=3 的三元模型
| n | 模型参数量 |
|---|
| 1 | 2×105 |
| 2 | 4 \times 10^ |
| 3 | 8 \times 10^ |
| 4 | 16 \times 10^ |
但是 n−gram 模型还需要平滑化,因为
- count(wk−n+1,...,wk)=0 时,并不能认为 p(wk∣w1,...,wk−1)=0
- count(wk−n+1,...,wk)=count(wk−n+1,...,wk−1) 时,也不能认为 p(wk∣w1,...,wk−1)=1
# 神经概率语言模型(NNLM)
对于统计语言模型的训练而言,利用最大似然,目标函数可以设为
w∈C∏p(w∣Context(w))
- C:语料库(Corpus),即所有文本数据的集合
- w:语料库中的当前词(word)
- Context(w):词 w 的上下文,即 w 周边相关词的集合
我们的目的就是让这个值最大,上述是学习语言规律的描述,实际时,通常使用最大对数似然
L=w∈C∑log(p(w∣Context(w)))
通过训练,得到最优参数集 θ∗,p(w∣Context(w))=F(w,Context(w),θ∗)
相较 n−garm,参数更小,可以直接通过计算来获取概率,而不需要通过事先保存概率值
神经网络分为三层
- 映射层:将 n 个单词映射为对应 word embeddings 的拼接(这一层就是 MLP
多层感知机 的输入层) - 隐藏层:激活函数用 tanh 双曲正切函数
- 输出层:需要根据前 n 个单词预测下一个单词,所以是一个多分类器,用 Softmax
整个模型的最大计算量集中在最后一层中,因为一般来说,词汇表很大,需要算每一个词的条件概率
# NNLM 的局限性
- Softmax 计算效率低(后续改进:负采样...)
- 上下文窗口长度固定为 n−1 个词,针对可变长上下文无法建模(后续改进:RNN/LSTM/Transformer)
- 只有一个隐藏层,特征提取能力有限
# NNLM 相较 n-garm 的优势
因为 NNLM 建模时,词语间的相似性可以通过词向量来体现,例如下面的
s1 = Lxy is Study 在文章中出现过 10000000 次,而 s2 = Zmc is study 只出现一次
那么 n−gram 计算的结果,p(s1)>>p(s2),但 s1 和 s2 的唯一区别就是 Zmc 和 Lxy ,p(s1) 和 p(s2) 应该很接近才是,但 n−garm 就不好处理这样的情况
# Word2Vec 的网络结构
Word2Vec 是轻量级的神经网络,其模型仅包含输入层、隐藏层和输出层。根据输入输出的不同,主要包括
- CBOW
- 在知道 wt−2,wt−1,wt+1,wt+2 的情况下,预测 wt
- Skip−gram
- 在知道 wt 的情况下,预测 w_{t-2},w_{t-1},w_{t+1},w_
# CBOW
# Simple CBOW Model
输入一组上下文词,预测一个词。这个模型,表面看似是找到预测词,但模型的真正目的是找到
- 输入权重 Win:将 One−hot 词映射为稠密向量
- 输出权重 Wout:将向量映射回词的概率
- 输入层
- 输入中心词周围的前后 n 个词,每个词用 One−Hot 编码表示
- 投影层
- 权重矩阵 Win:输入层到隐藏层的权重矩阵,维度是 V×D,D 是词向量的维度,通常远小于 V
- 对上下文所有词向量求平均,得到一个 D 维向量作为隐藏层的输出 h=C1c=1∑CWinT⋅xc
- 其中,C 是上下文数量;xc 是上下文词的 One−Hot 向量
- 输出层
- 权重矩阵 Wout:隐藏层到输出层的权重矩阵,维度为 D×V
- 将隐藏层输出 h 和 Wout 相乘,得到未归一化的得分向量
- 利用 Softmax 将得分转换为概率分布
# CBOW Multi-Word Context Model
与 Simple CBOW Model 类似,只不过输入输出改为了多个上下文窗口,可以通过多个窗口联合优化,适用于大规模数据
# Skip-gram Model
- 输入层
- 输入中心词的 One−Hot 编码(假设维度是 V,记为 x)
- 投影层
- 权重矩阵 Win:将 One−Hot 输入映射为 D 维词向量 v=WinT⋅x,维度 V×D
- 输出层
- 权重矩阵 Wout:将词向量映射到上下文词的概率分布 res=Wout⋅v,维度 D×V
注意:Skip−gram Model 是词向量学习工具,并非序列预测模型,也就是说,最后输出的是 V 维向量,只是表示了上下文中,各词出现的概率,而并不会预测词的位置,顺序
# CBOW 和 SG 的对比
# 训练效率与计算成本
| 特性 | CBOW | Skip-gram |
|---|
| 计算速度 | 更快(一次预测一个词) | 较慢(一次预测多个词) |
| 内存占用 | 较低(隐藏层是上下文词的平均) | 较高(需处理多个上下文词输出) |
| 优化技巧 | 负采样、层次化 Softmax | 同 CBOW |
# 数据需求与词频敏感性
| 特性 | CBOW | Skip-gram |
|---|
| 低频词表现 | 较差(上下文平均稀释信息) | 更好(每个中心词独立训练) |
| 高频词偏好 | 容易过度平滑高频词 | 对高频词捕捉更细致 |
| 小数据集表现 | 更优(训练目标更简单) | 较差(需更多数据覆盖多样性) |
# 语义捕捉能力
| 特性 | CBOW | Skip-gram |
|---|
| 词向量质量 | 更平滑,适合通用语义 | 更精细,适合复杂语义关系 |
| 类比任务表现 | 一般(如 "king - man + woman") | 更优(显式建模中心词与上下文) |
| 长距离依赖 | 较弱(上下文平均削弱位置信息) | 稍强(独立预测每个上下文词) |
# 典型应用场景
| 场景 | CBOW | Skip-gram |
|---|
| 小规模数据 | ✅ 推荐(计算高效) | ❌ 需更多数据 |
| 高频词主导任务 | ✅ 如主题分类 | ❌ 可能过度拟合高频词 |
| 低频词或细粒度语义 | ❌ 效果一般 | ✅ 如医疗术语、罕见词挖掘 |
| 词类比任务 | ❌ 表现中等 | ✅ 如 "巴黎 - 法国 + 中国 ≈ 北京" |
# Hierarchical Softmax 与 负采样
# Hierarchical Softmax(层次化 Softmax)
主要用于解决大词汇表,如 V=105 时的计算瓶颈问题,核心思路是:
将词汇表中的所有词,组织成一棵哈夫曼树,预测路径转换为从根节点到目标叶子结点的路径概率运算。计算量从 O(V) 降至 O(logV)
# 负采样
主要用于解决大词汇表下的计算瓶颈问题,核心思路是:
将多分类问题(从 V 个词中选 1 个正确词)转化为二分类问题(区分正样本和噪声样本)
- 传统 Softmax,需要计算所有的概率,然后找出最高的几个;用了负采样之后,只要判断,某个词的得分是否高于 k 个随机词即可。时间复杂度取决于 k 的取值
低频词在负采样中,会表现较好
- wb_SMi,1year,t:year 年 t 季度,第 i 家公司是否发布微博的哑变量
- wb_SMi,2year,t:year 年 t 季度,第 i 家公司发布微博的数量取对数
检验:
SYNCHt=α0+α1⋅SMt+α2⋅Controlst+ϵt
其中 Controlst 目前有:公司规模,资产负债率,总资产收益率,营业收入增长率,账面市值比
- 公司规模 Size_
- Sizet=ln(资产总计t)
- 资产负债率 Levquarter
- Lev_{t} = 负债合计_{t} / 资产总计_
- 总资产收益率 ROA_
- 营业收入增长率 Growtht
- Growtht=营业收入t−1营业收入t−营业收入t−1
- 账面市值比 BMt
- BM_{t} = \frac{归属于母公司所有者权益合计 - 优先股 - 永续债}
# 哑变量
![[Pasted image 20260221170823.png]]
# 取对数(发文强度)
![[Pasted image 20260221170855.png]]