文章目录
在Transformer中使用了词嵌入层,下文将先从几种直观的思路出发,说明其中的不足,然后提出一个理想的Word Representation应该需要满足哪些要求,将如今主要使用的词嵌入方法分为静态和动态进行说明,介绍实现的不同思路。
此处不讨论分词策略,仅讨论不同的词向量构建方法。
拓展内容:
- 自然语言处理领域中的词嵌入方法综述——曾骏,王子威,于扬,文俊浩,高旻
(框架参考,再补充了其他内容) - 词向量与Embedding究竟是怎么回事?——苏剑林
(从运算和思想角度说明独热编码在一个普通的全连接层发挥的作用) - COMP90042 Web Search and Text Analysis
- CS224N: Natural Language Processing with Deep Learning
(涉及Large Language Models内容)
一、从几种直观思路的不足谈到理想的Word Representation
字符格式的文本数据不方便被模型所学习,且这种符号化的信息也不足以用于学习,所以需要将其转为成模型可以处理的实值向量格式,并将语料库中蕴含的丰富内隐知识信息嵌入到生成的词向量中。
1.1 独热编码
独热编码(onehot encoding) 能够为词汇表中的每个词生成一个唯一的 one-hot 向量作为词的向量表示,该向量维度大小与词汇表中的单词数相等 ,词汇表中的每个词都对应一个索引编号,每个词所对应的 one-hot 向量只有在索引编号位置处的维度的值为 1,其余维度的值均为 0。
如果直接使用独热编码作为词向量,从直观角度来看,也会发现其存在以下问题:
- 词与词之间缺少关联和相似性,从余弦相似度的角度来解释就是任意两个词之间因为正交导致余弦相似度为0,无法说明词之间的相似程度,也就失去了其中丰富的信息。
- 维度过高,对内存来说是很大的负担;从矩阵角度理解,每行仅一位为1,其余位皆为0,这种稀疏矩阵也不适合使用。
1.2 共现矩阵
图源cs224n-spr2024-lecture02-wordvecs2中16页
- 维度大小等同于词汇量大小,可通过SVD降维(下文在介绍基于矩阵分解的静态词嵌入时会介绍SVD),但计算开销大;
- 稀疏矩阵
1.3 理想的Word Representation应当满足的要求
- 语义丰富性:能够捕捉到词汇的语义信息,使得语义相似的词在向量空间中的距离相近。
- 分布式表示:词表示应该是分布式的,即一个词的含义应该由其向量中的多个维度共同表示,而不是单一的维度。
- 低维性:词向量应该在较低维度的空间中表示,这样既可以减少计算量,又便于捕捉词之间的复杂关系。 泛化能力:词向量应该能够处理词汇的
- polysemy(一词多义)和 synonymy(同义词)现象,对于未见过的词汇组合也能做出合理的推断。
- 通用性:词向量表示应该适用于多种不同的自然语言处理任务,如文本分类、情感分析、机器翻译等。
- 组合性:词向量应该具有一定的组合性,即词向量可以通过其组成部分的向量来表示,例如“国王”的向量可以由“男人”和“领袖”的向量组合得到。
- 鲁棒性:词向量应该对噪声和文本中的变化有一定的鲁棒性,不会因为小的变化而剧烈变动。
- 可扩展性:词向量模型应该能够容易地扩展到新的词汇,特别是在开放的语言环境中。
- 计算效率:学习词向量的算法应该具有高的计算效率,能够在合理的时间内完成训练。
- 语言无关性:对于跨语言的任务,理想的词向量应该能够在不同语言之间捕捉到对应词汇的关系。
- 子词信息:对于形态丰富的语言,词向量应该能够包含子词(如词根、前缀、后缀)的信息。
- 社会和文化因素:在必要的情况下,词向量还应该能够考虑到社会和文化背景,以避免偏见和歧视。
二、静态词嵌入与动态词嵌入
根据是否上下文敏感可以将词嵌入方法分为静态和动态,从效果上看:
- 静态词嵌入对于任意一个词,其向量表示是恒定的,不随其上下文的变化而变化;因此静态词嵌入不能够处理多义词问题,事实上一个词可能在不同的语境下有着不同的语义;
- 动态词嵌入中同一个词可以根据上下文被赋予不同的表示
之后将根据静态和动态分别介绍词嵌入方法。
静态词嵌入介绍流程如下:
-
基于矩阵分解的静态词嵌入
从Distributional Hypothesis出发介绍Distributional Representation,对词-文共现矩阵使用TF-IDF赋值和SVD分解,并尽可能说明相应的原理和实现
-
基于上下文窗口的静态词嵌入
介绍Word2Vec里的 跳元模型(Skip-Gram) 与 连续词袋模型(CBOW)
-
基于全局矩阵分解和局部上下文窗口的静态词嵌入
介绍 词的全局向量表示(global vectors for word representation, GloVe)
动态词嵌入介绍流程如下:
- ELMo(Embeddings from Language Models,来自语言模型的嵌入)
- GPT(Generative Pre Training,生成式预训练)
- BERT(Bidirectional Encoder Representations from Transformers,来自Transformers的双向编码器表示)
图源《《动手学深度学习》》14.8.3. BERT:把两个最好的结合起来
三、基于矩阵分解的静态词嵌入
3.1 Distributional Hypothesis
You shall know a word by the company it keeps ( JohnRupertFirth,1957, ‘A synopsisof linguistictheory’)
对于单词
t
e
z
g
u
¨
i
n
o
tezgüino
tezgu¨ino ,如果从未听闻过这个词无法得知其含义,但在下列共现矩阵中,可以发现它与
w
i
n
e
wine
wine 之间存在一定的相似度,根据上述的假说,可以推定
t
e
z
g
u
¨
i
n
o
tezgüino
tezgu¨ino 是某款酒精饮料,而事实上,它确实是一种玉米啤酒,这个例子可以作为对上述假设在一定程度上的验证。
这个假设符合一般的认知直觉和统计规律,也在词嵌入中得到了广泛的认可和使用。
图源COMP90042 Web Search and Text Analysis:Distributional semantics
下图来源:word2vector中的数学原理详解.pdf——peghoty
3.2 向量空间模型(Vector Space Model,VSM)
《A Vector Space Model for Automatic Indexing》
3.2.1 基本思想介绍
假设前提:传统的VSM假设词项之间是相互独立的,即一个词的出现不影响另一个词的出现概率。
基本思想:以向量来表示语义
从 词-文档共现矩阵 的角度来看,有两个视角:
- 如果是横向,每行表示一篇文章中各个词汇的出现频次,这种统计可以用于信息检索,将询问也转为相似的向量,计算相似度即可进行检索(应用可见此链接:信息检索技术-向量空间模型);
- 如果是纵向,每列表示一个词向量,词向量是根据其在不同文章中的出现情况统计而出,根据分布假设,余弦相似度高的词向量一般会有着相似的语义(也仅仅是直观理解,依然存在多义词之类的复杂情况)。
对于上述矩阵,有两个问题没有解决:
- 问题一:权值不应该直接使用频次,高频不意味着重要,可能会是一些虚词;文档长度存在差异,在长文档中频次高的词汇不一定就在这些文档中更重要;
- 问题二:高维稀疏矩阵,计算效率低;
以上两个问题将由后续两小节进行简单回答
但仍然还存在其他问题,如:
- 近义词:VSM可能无法有效识别近义词之间的语义相似性,因为它们在向量空间中的表示是独立的。
- 多义词:VSM难以处理多义词,因为它为每个词分配一个固定的向量,无法根据上下文区分不同的词义。
3.2.2 TF-IDF(Term Frequency-Inverse Document Frequency)
维基百科-TF-IDF
TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率),其中涉及到两种频率:
- TF(term frequency,词频),用于描述某个词在某个文档中出现的频率
- T F w , d = 该词在文档中的出现次数 文档中的总词数 TF_{w,d}=\frac{该词在文档中的出现次数}{文档中的总词数} TFw,d=文档中的总词数该词在文档中的出现次数
- 值越高,可以在一定程度上说明该词的重要性,但也可能是虚词;
- IDF(inverse document frequency,逆向文件频率) ,用于描述某个词在不同文档中的出现情况
- I D F w = log ( 文档集中的文档总个数 包含 w 的文档数 + 1 ) IDF_{w}=\log(\frac{文档集中的文档总个数}{包含w的文档数+1}) IDFw=log(包含w的文档数+1文档集中的文档总个数)
- 加1是进行平滑处理,防止该词汇未在文档中出现过时,分母为0的情况;
- 一个词越常见,分母也就越大,对应的IDF值也就越小; 在本质上IDF是一种试图抑制噪音的加权,并且单纯地认为文本频率小的单词就越重要,文本频率大的单词就越无用。这对于大部分文本信息,并不是完全正确的。
- TF-IDF
- T F − I D F = T F w , d ∗ I D F w TF-IDF =TF_{w,d}*IDF_w TF−IDF=TFw,d∗IDFw
- 当一个词在文档频率越高并且新鲜度高(即普遍度低),其TF-IDF值越高。TF-IDF兼顾词频与新鲜度,过滤一些常见词,保留能提供更多信息的重要词。
3.2.3 SVD降维(从计算谈到降维降噪应用)
SVD可以对矩阵进行分解,且不要求矩阵为方阵,以下图为例, M M M为一个 m × n m\times n m×n的矩阵,可通过下列式子将其分解3个矩阵: M = U × Σ × V T M=U\times \Sigma \times V^{T} M=U×Σ×VT
- U为m阶正交矩阵, U U T = I UU^T=I UUT=I
- V为n阶正交矩阵, V V T = I VV^T=I VVT=I
- Σ \Sigma Σ为降序排列的非负的对角线元素组成的矩形对角矩阵
- Σ = d i a g ( σ 1 , σ 2 , … , σ p ) \Sigma=diag(\sigma_1,\sigma_2,\dots,\sigma_p) Σ=diag(σ1,σ2,…,σp)
- p=min(m,n)
- 在SVD分解中, Σ \Sigma Σ由M唯一确定,但U与V不是唯一的
接下来将介绍如何求解矩阵: U 、 Σ 、 V U、\Sigma、V U、Σ、V
- 求解矩阵
V
V
V: 先计算
M
T
M
M^{T}M
MTM,得到
n
×
n
n\times n
n×n的方阵,再对其进行特征值分解, 特征向量单位化,使得
V
V
V为n阶正交矩阵,满足
V
V
T
=
I
VV^T=I
VVT=I,相应结果如下:
- M T M = ( U Σ V T ) T U Σ V T = V ( Σ T Σ ) V T M^{T}M=(U\Sigma V^{T})^TU\Sigma V^{T}=V(\Sigma^T\Sigma)V^T MTM=(UΣVT)TUΣVT=V(ΣTΣ)VT
- ( M T M ) v i = λ i v i (M^{T}M)v_i=\lambda_iv_i (MTM)vi=λivi
- 将 M T M M^{T}M MTM的特征向量拼接在一起,,得到 n × n n\times n n×n的矩阵V, V V V的列向量称为右奇异向量
- 求解矩阵 U U U: 先计算 M M T MM^{T} MMT,得到 m × m m\times m m×m的方阵,操作同上, U U U的列向量称为左奇异向量。
- 求解
Σ
\Sigma
Σ: 关键在于求出其中的每项奇异值
- M = U Σ V T ⇒ M V = U Σ V T V = U Σ M=U\Sigma V^{T}\Rightarrow MV=U\Sigma V^{T}V=U\Sigma M=UΣVT⇒MV=UΣVTV=UΣ
- M v i = σ i u i ⇒ σ i = M v i u i Mv_i=\sigma_iu_i \Rightarrow \sigma_i=\frac{Mv_i}{u_i} Mvi=σiui⇒σi=uiMvi
接下来将通过具体例子来展示如何计算
U
、
Σ
、
V
U、\Sigma、V
U、Σ、V
计算过程来源:奇异值分解(SVD)原理与在降维中的应用——刘建平Pinard
上述内容说明了如何进行SVD分解,接下来讨论得到的这三个矩阵的物理含义是什么:
参考:
LSA潜在语义分析的原理、公式推导和应用——刘启林
吴军老师的《数学之美》第二版:第15章 矩阵运算和文本处理中的两个分类问题
奇异值分解(SVD)关键概念以及物理意义——猫咪钓鱼
奇异值分解(SVD)原理与在降维中的应用——刘建平Pinard
先不讨论截断操作,仅从矩阵的物理含义出发:
- 矩阵U是对词按话题进行分类的结果,每行表示一个词,这一行的非零元素表示这个词在不同话题下的相关性(重要性),值越大越相关;每列表示一个词类,此时为话题;
- 矩阵V中每列表示一篇文本,每行表示一个话题,每个值表示特定文本与特定话题的相关性;
- 这里对关联矩阵使用一次奇异值分解,就可以实现近义词分类和和文章分类,这也是SVD的一种使用;
在了解了各个矩阵的物理含义后,还需要理解奇异值的含义,从而更好的理解截断操作:
- 在降维的背景下,奇异值的大小反映了数据在对应奇异向量方向上的“重要性”或“显著程度”。最大的奇异值对应的奇异向量揭示了数据分布的主要方向,而较小的奇异值对应的奇异向量则可能指向噪声或数据的细微特征:
- 具体来说,较大的奇异值 σ i \sigma_i σi对应的左右奇异向量在重构矩阵时会发挥更大的作用,也可以理解其中蕴含了原始矩阵更多的信息。
再了解了奇异值的含义后,就可以介绍截断操作,演示图如下:
将矩阵:
U
、
Σ
、
V
U、\Sigma、V
U、Σ、V分别进行截取,重构矩阵时不改变原先矩阵的结构,且去除的部分往往是原始矩阵的噪音,所以相当于除噪操作。
再说明截断操作之后,还要说明如何用它进行降维,参考PCA主成分分析,相关内容如下:
来源:奇异值分解(SVD)原理与在降维中的应用——刘建平Pinard