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

引言

        上图是使用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.xdnf.cn/news/10312.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

实战:索引的命中机制

在 SQL Server 中,查询是否能命中索引(即是否能使用 Index Seek)取决于多个因素,包括索引的结构、查询条件的排列、和数据库优化器的策略。以下是一些常见的命中索引和不能命中索引的情况,及其详细解释: 一、命中索引的情况 1. 前导列匹配(典型的命中索引场景) 索引结…

Mac 安装protobuf2.5.0

文章目录 一、修改platform_macros.h二、编译protobuf三、配置环境变量四、测试 一、修改platform_macros.h platform_macros.h的目录位置为/Users/xxxx/protobuf-2.5.0/src/google/protobuf/stubs 在platform_macros.h中增加如下代码 #elif defined(__arm64__) #define GOOG…

ubuntu24.04安装matlab失败

又是摸鱼摆烂的一天,好难过~ 官方教程:https://ww2.mathworks.cn/help/install/ug/install-products-with-internet-connection.html 问题描述:https://ww2.mathworks.cn/matlabcentral/answers/2158925-cannot-install-matlab-r2…

python使用turtle画图快速入门,轻松完成作业练习

turtle介绍 turtle是一个绘图库,可以通过编程进行绘图。其模拟了一个乌龟在屏幕上的运动过程。该库通常用于给青少年学习编程,当然,也可以使用其进行作图。 在一些学校中,可能在python学习的课程中,要求完成turtle绘…

智能 AI 视觉识别系统打造高效流量统计方案

智能AI视觉算法解决方案,涵盖客流人数统计、车流量统计、牲畜养殖场计数、物品点包计数、超员报警、火焰识别报警及驾驶行为报警等功能。可精准统计商场、车站等地客流,区分车型统计车流量并预警拥堵,准确计数牲畜及物品,检测工厂…

UVa514 解析:火车车厢重排序问题的模拟栈实现

来源:UVa514 铁轨 Rails。 这是一个火车车厢重排序的问题,通过模拟栈操作的算法实现。这种算法非常适用于具有栈结构特性的问题,比如括号匹配、货物堆放、编译器中语法检查。本文给出了C++的两种代码实现和Python的一种实现。 题目描述 某城市有一个火车站,铁轨铺设如图。…

ENSP OSPF和BGP引入

路由协议分为:内部网关协议和外部网关协议。内部网关协议用于自治系统内部的路由,包括:RIP和OSPF。外部网关协议用于自治系统之间的路由,包括BGP。内部网关协议和外部网关协议配合来共同完成网络的路由。 BGP:边界网关路由协议(b…

华为OD机试真题-矩形绘制

题目描述 实现一个简单的绘图模块,绘图模块仅支持矩形的绘制和擦除 当新绘制的矩形与之前的图形重善时,对图形取并集 当新擦除的矩形与之前的图形重善时,对图形取差集 给定一系列矩形的绘制和擦除操作,计算最终图形的面积。下…

Android下的系统调用 (syscall),内联汇编syscall

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 什么是系统调用 (syscall) 系统调用是操作系统提供给应用程序的一组接口,允许用户空间程序与内核进行交互。 在 Android(基于 Linux …

初始JavaEE篇 —— 网络编程(2):了解套接字,从0到1实现回显服务器

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 TCP 与 UDP Socket套接字 UDP TCP 网络基础知识 在一篇文章中,我们了解了基础的网络知识,网络的出…

【月之暗面kimi-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 …

架构师备考-概念背诵(软件工程)

软件工程 软件开发生命周期: 软件定义时期:包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标,具体可分成问题定义、可行性研究、需求分析等。软件开发时期:就是软件的设计与实现,可分成概要设计、详细设计、编码、测试等。软件运行和维护:就是…

[FBCTF 2019]rceservice 详细题解

知识点: json字符串 PHP正则表达式元字符 PCRE回溯机制绕过正则表达式 %0a 换行符绕过正则表达式(详细讲解) 提示 Enter command as JSON 题目还有一个附件,打开是index.php文件源码 <?php putenv(PATH/home/rceservice/jail); if (isset($_REQUEST[cmd])) {$json $_…

【竞技宝】DOTA2-梦幻联赛S24:圣剑美杜莎强拆基地终结比赛

北京时间11月9日,DOTA2的梦幻联赛S24继续进行。本日迎来第二阶段的B组二、三名加赛PARI对阵spirit。本场比赛双方前两局战至1-1平,决胜局同样是难分胜负打到了六十分钟之后,关键时刻spirit主动出击,圣剑美杜莎强拆基地成功一波结束比赛,最终spirit让一追二击败PARI。以下是本场…

计算机的错误计算(一百四十九)

摘要 探讨 MATLAB 中 的计算精度问题。当 为含有小数的大数或整数附近数时&#xff0c;输出会有错误数字。 例1. 已知 计算 直接贴图吧&#xff1a; 另外&#xff0c;16位的正确值分别为 0.6374239897486897e0、-0.6613118653236519e0、0.3769911184298822e-5 与…

力扣 多数元素

用了排序跟抵消。 题目 由题可知&#xff0c;多数元素是指在数组中出现次数大于一半的元素&#xff0c;且总是存在多数元素。不难想到&#xff0c;把数组排序后&#xff0c;这个数组的中间数一定是这个要找的元素。 用了sort排序&#xff0c;时间复杂度O&#xff08;nlogn&am…

Oracle OCP认证考试考点详解082系列11

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 51. 第51题&#xff1a; 题目 51.View the Exhibit and examine the description of the tables You execute this SQL statement Whi…

前端小知识:如何理解这个新特性 ?= 运算符

在日常的JavaScript开发中&#xff0c;我们经常会处理一些异步任务&#xff0c;避免代码出错&#xff0c;这时候常见的工具就是 try-catch 块和 async-await 语法。这些工具虽好&#xff0c;但当我们代码量一多&#xff0c;整个代码结构可能会显得很臃肿&#xff0c;阅读起来也…

Redhat切换其他源

1. 效果图 2. 安装 RPM 包的命令 rpm -ivh --nodeps --force epel-release-latest-8.noarch.rpm rpm -ivh --nodeps --force yum-4.7.0-4.el8.noarch.rpm rpm -ivh --nodeps --force yum-utils-4.0.21-3.el8.noarch.rpm 3. 修改默认源 vi /etc/yum.repos.d/redhat.repo[BaseO…

如何使用OpenCV和Python进行相机校准

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…