Base-llm 1.2.3 从主题模型到Word2Vec

一、寻找理想的词向量

哑编码、序号化等方式都无法解决语义关系,例如“国王”与“女王”的语义比“国王”与“苹果”更近。

分布式表示的方式就是为了解决这个问题,目的是将词语映射到一个低维、稠密、且蕴含丰富语义信息的连续向量空间中。
理想词向量需要满足语义蕴含和低维稠密。
语义蕴含要求向量之间距离能够度量词语之间的语义相似度,这背后是分布式假设的朴素应用,也就是说如果两个词语经常在相似的上下文中共同出现,那么他们的向量在空间上应该是相近的。

低维稠密是为了摆脱维度灾难。

为了这一目标,实现方案有

  1. 基于全局文档统计的主题模型:利用局部统计实现语义捕捉
  2. 基于局部上下文预测的神经网络模型: word2vec 通过全新的局部预测范式。

寻找词向量目的是为了让向量之间距离能表达语义关系。两个词在相似上下文出现,说明向量空间应该是相近的。

二、主题模型

基于机器学习和传统数据思想的经典方法。

关键假设: 一篇文档由多个主题按一定比例混合而成,而一个主题又由多个词语按一定概率组成。
一篇文档=n个主题混合; 一个主题=多个词语按一定概率混合

词语共同出现在某篇文档中,说明是因为他们都在共同描述某个或某些主题。
因此,一个词的向量可以用它与各个主题的关联强度来表示。这其中最核心的技术就是矩阵分解

2.1 SVD 矩阵分解

词向量构建过程:
(1)构建 “词-文档” 矩阵:每行代表一个词,每列代表一个文档。X(i,j) 的值是词i在文档j中的重要性权重,可以使用TF-IDF来填充。矩阵通常巨大且高度稀疏。
(2)矩阵分解:线性代数角度,稀疏矩阵可以被近似分解为两个更小的、更稠密的矩阵的乘机。常用方法是奇异值分解(SVD)。


image.png

Xmxn是原始的词-文档矩阵,m是词典大小,n是文档数量
k是一个远小于m和n的超参数,代表期望发现的潜在主题数量。
Wtopic表示词-主题矩阵。行是k维的稠密向量,表示词与k个主题的关联度。
Htopic: 文档-主题矩阵。列是k维稠密向量,表示文档在k个主题上的分布。
(3)获取词向量:分解完成之后。词-主题矩阵Wtopic的每一行就是我们需要的词向量。

什么是奇异值分解 TODO
奇异值分解是唯一的吗?

2.2 主题模型的局限性

主题模型本质是一个聚类算法, 文档主题矩阵Htopic 将n个文档聚成了k个主题类别。每篇文档都有一个K维向量,表示属于每个主题的置信度或软分配。
Wtopic 词-主题矩阵表示词语的主题倾向。

主题模型也叫LSA, Latent Semantic Analysis (潜在语义分析)。通过对全局的词-文档共现矩阵进行分解,得到低维的主题空间,得到了能表达语义的稠密词向量。
缺点:1. 大型语料库的SVD分解,计算量和内存开销很大,计算代价昂贵
2. 依赖是全局的、粗粒度的文档级别共现,忽略了词语之间局部上下文和词序信息,难以捕捉更惊喜的语义关系。
3. 先统计再分解,与现代深度学习模型端到端的联合训练难以集成。

三、 Word2Vec

Word2Vec算法,将视角聚焦于词语的局部上下文。思想来源于语言学中的分布式假设,即一个词的含义,由其上下文中的词语所决定
也就是说,如果两个词上下文经常是相似的,那么两个词的语义就是相近的。

3.1 Word2Vec概述

Word2vec通常认为是一种浅层神经网络模型。它移除了非线性隐藏层,直接将投影层与输出层相连。

Word2Vec的最终目标是获取一个高质量的词向量查询表,本质上是一个巨大的矩阵Win, 其中每一行都是对应单词的稠密向量。
根据上下文预测中心词,并在此过程中将向量查询表作为模型参数进行训练和优化。

3.2 可学习的词向量矩阵

将单词ID转换为稠密向量,也就是矩阵乘法。对单词ID进行one-hot编码,乘以权重矩阵得到的就是稠密向量。这个权重矩阵Win就是词向量矩阵

image.png

pytorch中它的nn.embedding本质就是维护了这个Win矩阵(词向量查找表)。
后续模型第一步通常都是Embedding,它接收的输入序列的整数ID,直接通过查表将其映射为稠密的词向量,这个矩阵的参数会随着整个模型的训练而被自动更新和学习

3.3 模型架构与实现原理

3.3.1 两种经典模型

Word2Vec包含CBOW和Skip-gram两种具体的实现模型。
(1)CBOW 模型
CBOW(Continuous Bag-of-Words)的任务是根据上下文预测中心词

image.png

上下文向量函数
损失函数

步骤:举例:
Batch=2,Slide=6, 词典|V|=10000, 词向量维度D=128

  1. 输入层 (2,6)张量 (每个位置是上下文词ID) 例如 [[1, 8, ...], [8, 5, ...]]
  2. embedding词向量转换: (2,6) 通过embedding查表(Win矩阵)(10000x128)-> (2,6,128) 将每个单词ID转换为128维度向量
  3. 上下文聚合(mean/sum): 对样本中6个词向量求平均(原论文是平均,部分实现也会用求和。时间步维度压缩: 转为(2,128)
  4. (Linear)输出得分, 将两个上下文向量与输出矩阵Wout (128*10000)相乘,计算每个样本在词典中10000个词上的预测得分,数据形状变为(2,10000)
  5. loss计算: softmax得分转换为概率分布,与真是中心词计算交叉熵损失。
    分享传播更新参数Win和Wout。最后需要的就是训练好的Win.

简单理解: 上下文向量,通过embeding后,再求均值,转为1个向量,通过线性层计算输出权重。 使用交叉熵损失计算最优情况。 最终embedding矩阵即为最终输出向量。

(2)Skip-gram模型讲解

Skip-gram任务是根据中心词预测上下文。 将一个预测任务,分解成多个独立的子任务。

Skip-gram 与N-gram关系
名字渊源: 名字源于传统k-skip-n-gram模型(允许跳过中间次的N-gram)
核心区别: 借用了跳跃思想,但是word2vec的skip-gram是一个预测模型,是为了学习稠密词向量,解决传统n-gram的稀疏性和维度灾难问题。

步骤举例:
Batch-2, Slide=6, 词典大小为|V|=10000, 词向量维度D=128

  1. 输入层: 中心词ID, 数据形状(2,1)
  2. embedding: (2,1,128)
  3. 输出得分计算: 通过与Wout (128x10000) 相乘,计算在词典中10000个词上的得分。数据性转改变为(2,10000)
  4. 损失计算: 利用中心词预测6个上下文单词,输出向量与6个真是上下文(标签)计算交叉熵损失。优化时,会将6个位置的损失全部相加,通过反向传播,同时更新Win和Wout.
    本质是一个多标签分类问题。

实现上,通常分解为6个独立的单标签分类问题,对每个上下文位置进行一次softmax预测并求和损失。

Skip-gram通过中心词-上下文次的预测,可以更好的学习词与词之间关系。在处理低频词和大数据集时,通常能得到质量更高的词向量。
因为任务量是CBOW的S倍,因此相比CBOW训练速度更慢。

3.3.2 滑动窗口的直观理解

例如:如果slide=7, 第八个词和第九个词的向量,用word2vec计算应该是相似的,因为两个的上下文分别是[w1..w7],[w9..w15]和[w2...w8]和[w10...w16].
显然预测w8和w9会用想12个相同的上下文词,所以他们的上下文向量会相似。

数学角度理解:
在CBOW中,上下文向量Wout矩阵=实际|V|维度上的得分。
所以让目标词这里是中心词对应的得分尽量大即为最优情况。
在Skip-gram中,Vc中心词向量
输出矩阵Wout=实际|V| 维度上各词的权重。
所以让目标词这里是上下文的词等分尽量大即为最优情况。

负采样就是利用上述理解。
实际训练中,为了避免整个词表进行softmax归一化带来的高开销,可以用分层softmax与负采样等近似方法加速训练。

TODO 分层softmax

四、Word2Vec的局限

产生的是静态词向量
(1)上下文无关: 任意一个词只会生成一个固定的向量,这个向量是在语料库中训练得到的平均语义,与词出现的具体上下文无关。导致 Word2Vec无法解决一词多义问题。比如苹果水果和苹果手机。苹果的词向量都是完全相同的。
(2)静态的本质:Word2Vec输出的是一个巨大的查询表,训练完之后就固定下来了。不涉及上下文的动态分析

TODO 练习

总结

  1. 理想的词向量:
    低维稠密,且能表达语义关系
  2. 主题模型:
    用SVD,将“词-文档”拆分,产生两个矩阵分别为“词-主题”矩阵和“文档-主题”矩阵。前者即为我们需要的稠密向量表示。
    缺点是依赖于大矩阵分解,开销大,同时忽略了局部上下文和词序信息。
  3. word2Vec
    3.1 CBOW:用上下文预测中心词
    3.2 Skip-gram: 用中心词预测上下文
    3.3 局限: 是静态向量,依赖于语料库,同时也忽略了不同上下文的语义问题,无法解决一词多义等。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • """1.个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消息应非常简单,如“Hello ...
    她即我命阅读 12,378评论 0 6
  • 1、expected an indented block 冒号后面是要写上一定的内容的(新手容易遗忘这一点); 缩...
    庵下桃花仙阅读 4,014评论 1 2
  • 一、工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取)矩形、椭圆选框工具 【M】移动工具 【V...
    墨雅丫阅读 4,421评论 0 0
  • 跟随樊老师和伙伴们一起学习心理知识提升自已,已经有三个月有余了,这一段时间因为天气的原因休课,顺便整理一下之前学习...
    学习思考行动阅读 3,858评论 0 2
  • 一脸愤怒的她躺在了床上,好几次甩开了他抱过来的双手,到最后还坚决的翻了个身,只留给他一个冷漠的背影。 多次尝试抱她...
    海边的蓝兔子阅读 2,775评论 1 4

友情链接更多精彩内容