当前位置: 首页 > news >正文

深度学习基础—了解词嵌入

引言

        上图是使用one-hot向量表示词向量的一种方式,这种表示方式优点是方面简洁,但是缺点也很明显,就是词与词之间独立性太强,没有关联,这样使得算法对相关词的泛化能力不强。

        举个例子,假如我们已经学习到了一个语言模型,当看到“I want a glass of orange ___”,下一个词会是什么?很可能是juice。即使学习算法已经学到了“I want a glass of orange juice”这样一个很可能的句子,但如果看到“I want a glass of apple ___”,因为算法不知道apple和orange的关系很接近,就像man和woman,king和queen一样。所以算法很难知道orange juice是一个常见的组合,从而不理解apple juice也是很常见的组合。其中的原因是:任何两个one-hot向量的内积都是0,因此很难区分词向量之间的差别和联系。

        而词嵌入就是一种让模型理解词与词之间是存在某种关系的方式,让我们一起了解一下。

1.了解词嵌入

Man

Woman

King

Queen

Apple

Orange

Gender

-1

1

-0.95

0.97

0.00

0.01

Royal

0.01

0.02

0.93

0.95

-0.01

0.00

Age

0.03

0.02

0.7

0.69

0.03

-0.02

......

......

......

......

......

......

......

Food

0.09

0.01

0.02

0.01

0.96

0.97

        假设考察这些词与Gender(性别)之间的关系,定义男性为-1,女性为1。那么Man就是-1,Woman就是1。King是国王,一般都是男性,因此可能为-0.95,Queen为女王,都是女性,因此为0.97。而Apple和Orange是水果,没有性别之谈。

        如果考虑其他的特征,比如Royal(高贵)、Age(年龄)、Food(食物)等等,假设有300个特征,我们就可以得到300行,组成表格如上。那么每一个词向量都用300维的向量(表格列)表示,这样我们就得到了一种新的表示方式——词嵌入。

        词嵌入方式考虑了词与词之间的关联性,使每一个词不再独立,学习算法很容易学习到这种关联性,从而是算法泛化效果更好。

        注意:尽管最终学习到的特征向量很难解释和理解,但是词嵌入确实提高了算法的泛化效果,让算法发现apple和orange会比king和orange或queen和orange更加相似。

2.如何理解词嵌入

        嵌入的意思就是:假设在300维的特征空间中,每个词都被嵌入了300维空间的某个位置。

        假设我们使用t-SNE算法(一种可视化算法),把这300维的数据嵌入到一个二维空间里,就发现man和woman这些词聚集在一块(上图编号1所示),king和queen聚集在一块(上图编号2所示),这些都是人也都聚集在一起(上图编号3所示)。动物都聚集在一起(上图编号4所示),水果也都聚集在一起(上图编号5所示),像1、2、3、4这些数字也聚集在一起(上图编号6所示)。如果把这些生物看成一个整体,他们也聚集在一起(上图编号7所示)。

        把一个词通过词嵌入的方式嵌入到特种空间的某个位置,这样相似或者关系相近的词在空间中的距离也就越近,这比one-hot编码方式效果更好。

3.使用词嵌入

        用词嵌入作为输入训练识别人名的模型,训练集假如有一个句子:“Sally Johnson is an orange farmer.”(Sally Johnson是一个种橙子的农民),训练完模型后,如果有新的输入:“Robert Lin is an apple farmer.”(Robert Lin是一个种苹果的农民),因为orange和apple关系很相近,那么算法很容易就知道Robert Lin也是一个人的名字。但是如果遇到:“Robert Lin is a durian cultivator.”(Robert Lin是一个榴莲培育家)怎么办?在训练集里可能没有durian(榴莲)或者cultivator(培育家)这两个词。

        不用担心,由于学习词嵌入的算法会考察非常大的文本集,可以是1亿个单词,甚至达到100亿也都是合理的。通过考察大量的无标签文本,可以发现orange(橙子)和durian(榴莲)相近,farmer(农民)和cultivator(培育家)相近。因此尽管只有一个很小的训练集,但是可以使用迁移学习,然后把这些知识迁移到一个任务中。

        使用词嵌入做迁移学习的步骤:

        (1)从大量的文本集中学习词嵌入,可以下载网上预训练好的词嵌入模型。

        (2)将词嵌入模型迁移到自己的只有少量标注训练集的任务中。

        (3)如果训练集很大,微调整词嵌入。

3.词嵌入特性

        我们已经了解到词嵌入的概念和作用,词嵌入还有一个有意思的特性,就是做类比推理。比如由man和woman之间的关系推理出king和?有关系,我们很容易猜出来是king和queen,但是用算法怎么表示呢?一起来看一下:

3.1.向量作差

        假设基于下面的词嵌入表,只有4个特征维度构成的词嵌入。

Man

Woman

King

Queen

Apple

Orange

Gender

-1

1

-0.95

0.97

0.00

0.01

Royal

0.01

0.02

0.93

0.95

-0.01

0.00

Age

0.03

0.02

0.7

0.69

0.03

-0.02

Food

0.09

0.01

0.02

0.01

0.96

0.97

        把man和woman表示的向量作差:

        把king和queen表示的向量作差:

        比较两个结果会发现,它们的差都约等于右边的向量,这个结果表示man和woman之间的差异主要是性别Gender的差异,king和queen之间的差异也是性别的差异,由此我们可以得到,类比man对woman,可以推理出king对queen。因此可以用如下公式表示这个特性:

        上式的w即为我们要找的单词。把上式变形,我们可以得到如下优化目标,表示寻找它们之间的最大相似度:

        其中Sim()表示一种相似度函数,相似度函数有很多,常见的有:曼哈顿相似度、欧几里得相似度、皮尔森相关系数、余弦相似度等等。

        注意:通过这种方法来做类比推理准确率大概只有30%~75%,只要算法猜中了单词,就把该次计算视为正确,从而计算出准确率。

3.2.余弦相似度

        这里列举一种计算语义相似度最常用的一种方式:余弦相似度,公式如下:

        当两个向量非常相似时(正相关),它们的夹角接近0度,此时相似度约等于1。当两个向量完全无关时(无关),它们的夹角为90度,相似度等于0。当两个向量相似但特性相反时(负相关),夹角为180度,相似度等于-1。关系图如下:

        注意:从学术上来说,比起测量相似度,这个函数更容易测量的是相异度,所以我们通常需要对其取负,但究竟是否取负,根据实际需求来决策。

4.嵌入矩阵

        嵌入矩阵就是词嵌入得到的那个表格,把那个表格表示成矩阵,就是嵌入矩阵E。如下为6.3.1表表示的嵌入矩阵E:

        现在如果我们想取某个词的词向量,可以用这个词的one-hot向量和矩阵做乘法,由于矩阵是4*6,而one-hot向量是6*1,因此得到的结果是4*1,而one-hot向量只有这个词的位置是1,其他全是0,因此最终可以得到4*1的词向量,即E中的这个词对应的一列。计算流程如下:

        上图表示从嵌入矩阵取woman对应的词向量的过程,也就是j=2,O表示one-hot向量。

        注意:由于one-hot向量只有一个1,其余全是0,用矩阵乘法做运算效率太低,而one-hot向量实际作用是取嵌入矩阵对应的一列,因此实际中我们一般使用专门的函数查找某一列。


http://www.mrgr.cn/news/69185.html

相关文章:

  • web——upload-labs——第三关——后缀黑名单绕过
  • STM32+AI语音识别智能家居系统
  • 【分布式】CAP理论
  • C语言 | Leetcode C语言题解之第560题和为K的子数组
  • Docker+Django项目部署-从Linux+Windows实战
  • see的本质是什么?
  • 基于Video-ReTalking的AI数字人模型部署
  • CSS-盒模型
  • Linux——入门
  • 拓扑排序(C++类封装+数组模拟队列和邻接表)
  • of 操作函数——获取设备树节点
  • 概念井喷时代:什么样的产品才是真正的云产品?哪一些在浑水摸鱼
  • JS 循环语句
  • sql注入绕过,超详细!!
  • 力扣题库——75.颜色分类
  • 计算结构加法3+2
  • java.lang.NoClassDefFoundError: org/springframework/aot/AotDetector问题解决
  • 提升内容质量的五大关键策略
  • 家用云相册方案探索之Immich
  • 鸿蒙进阶篇-type、typeof、类
  • Java基于小程序公考学习平台的设计与实现(附源码,文档)
  • 配置拦截器时Bean注入失败的解决方案
  • 课程讲解--深入探究二分算法
  • springboot给不同用户动态定制请求结果思路
  • 敏感词过滤方案
  • vite构建的react程序放置图片