李宏毅机器学习笔记(十七)——无监督学习(五):词向量嵌入

本文深入探讨了One-hot表示的缺陷及其替代方案,介绍了基于词频和基于预测的词嵌入方法,包括共现矩阵、自编码器降维、CBOW和Skip-gram模型,并讨论了词向量的特性和优化训练过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.One-hot表示的缺陷

  我们这篇文章先假设One-hot向量是10000维的(当然实际上会更多)。其实很容易想到,One-hot表示法最关键的问题是非常的不灵活,由于每个词之间的向量都是线性无关的,我们无法很好的表示每个词和每个词的关系。
  我们希望的是我们能够用一个更好的更低维度的用来表示这个词特征的向量来进行表示,然后意思越相近的词距离越近。
  我们之前已经讨论过自编码器了,但是我们用自编码器显然是学不到任何东西的,因为完全可以把两个词的表示来回互换;另一个角度,自编码器其实就是用神经网络进行降维,而如果我们PCA这种降维方式,对于一个单位矩阵,特征值都是1,因此降维没有任何效果。
  那突破点还是在,我们如何从无标签数据中,来说明词与词之间的相似度。我们自然而然想到的方法就是,词A和词B越相近,等价于他们越可以互换,等价于他们所在的上下文越类似。使用这种依靠上下文的思想,我们就可以使用海量的无标签数据用多种方法进行设计。

二.基于词频的词嵌入方法

  这种方法的思路是,根据文章中连续的k个词的信息来实现一个k维的共现矩阵,一般取 k = 2 k=2 k=2。具体的例子可以参考:https://www.cnblogs.com/yifanrensheng/p/12953184.html
  当然,注意这里我们不是用来直接生成上下文的,不然这样做结果太固定,而是通过这个共现矩阵,我们成功的把一个单位矩阵变为了一个带有特点的非单位阵,之后我们可以再用各种降维方法,包括自编码器进行降维。

三.基于预测的词嵌入方法

  在思想上,其实我们的方法与前面类似,之前是我们统计一下上下文的共现频率,相当于是一个生成模型;而现在我们改为使用判别模型:我们可以把上下文的几个单词的One-hot向量作为输入,把本单词的One-hot向量作为输出;也可以反过来把本单词的One-hot向量作为输入,把上下文的几个单词的One-hot向量作为输出,去训练神经网络。这样我们就得到了下面的两个模型,可以看出其实也算是自编码器的一个变种,那么中间层就是我们降维后的向量
在这里插入图片描述

  计算的过程视频中比较清楚,这里想聊一聊细节。
  1.CBOW中的输入如何处理呢,是展成一个更高维的向量,还是就是一个简单的求和,成为一个新的10000维向量呢?当然,前者更可以说明词语顺序的 影响,而后者没有考虑这部分,但是假设CBOW是我们去考虑前面的5个词和后面的5个词的话,那前者比后者的第一层要多十倍的参数,这显然是一个很巨大的负担,因为我们也知道我们要用很多数据去进行训练。
  2.网络结构是单层自编码器还是多层自编码器呢?老师上课的解释就是,单层的就够了,当然多层效果会更好一点,但是好的有限,毕竟这是一个相当于预处理的步骤;所以很多时候用多层的会很浪费且比较慢,因此用的最多的就是单隐藏层的自编码器了,同时这个隐藏层的值也是对应的编码后的词向量。
  3.如何定义损失函数呢?softmax+交叉熵其实就完事了,毕竟是一个多分类问题。但是这里又出现了问题:这里相当于是一个一万类的分类器,训练起来是十分耗费性能的,因此我们需要作出一定的优化。正常来说,我们每个样本要对这一万个输出权重进行优化,相当于是一个样本即为一个正样本和9999个负样本;我们可以这么想,如果我们随机选一些负样本出来,就更新这一部分不就好了吗?从而就有了负采样方法:对每个类别,都改为sigmoid函数单独计算所谓的概率值,然后对于每个正样本,这时我们当然就只会更新这一个权重,但显然这样全是正权重会导致无限增大,因此我们再随机选一些作为负样本,来更新对应的这些权重即可。如果我们一个正样本随机选24个负样本,那输出层更新量直接少了400倍之多,从而极大的增加了训练效率。
  4.这两种模型哪种更好呢?后者参数更多,因为输出层多了好几倍的参数,所以相对来说更不容易欠拟合,更容易过拟合,仅此而已。但它们都是无监督学习,这种文章信息是真的,海量数据,因此过拟合还是很好避免的;换句话说,Skip-gram这种区分顺序的会更好一些。
  我们看出我们所有的操作更多的是为了更快的训练。
  当然词向量嵌入的另一大有用的特性是,每个维度可能就代表着各种不同的属性,从而各种距离就更能有一定的含义。因此例如“uncle相对于aunt,类似于king相对于?”这种题,也能轻松通过词向量嵌入得到结果。
  最后笔者想给出一个不错的paper的翻译链接https://zhuanlan.zhihu.com/p/98866555

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值