NLP入门:word2vec self-attention transformer diffusion的技术演变

这一段时间大模型的相关进展如火如荼,吸引了很多人的目光;本文从nlp领域入门的角度来总结相关的技术路线演变路线。

1、introduction

自然语言处理(Natural Language Processing),简称NLP,是通过统计学、数学模型、机器学习等相关技术研究人类语言的特征,对其进行数学的表示,并基于这种表示进行计算使其可以处理一些和人类语言相关的事务,模拟人类使用语言的状态。

在人类的思想领域中,针对人的认识,一直以来都有两种倾向。一种是认为人类的各种知识是天然具有逻辑合理性的,因此在建构知识时,应当自顶向下的搭建逻辑的结构,获得对知识的把握;而另一种则认为人类的知识是归纳在世界中的经验一点一点形成的,我们认为是逻辑和理性的认知,也是在经验中被我们归纳确认的,因此人类的知识需要从大量的经验中去归纳总结,这是一个自底向上的过程。从哲学史的角度看来,这两者就是所谓的唯理论和经验论的区别。这两种倾向被带入到具体学科领域中,就会得到两套相反的方法。

之所以要提到这个问题,是因为在自然语言处理领域,也曾有偏向规则的(唯理论的)和偏向统计的(经验论)的两种方法。基于规则和语法的自然语言处理算法曾经一度是NLP领域的主流,很多研究者都基于建构一个更合理的语言规则的思路来推进算法对于人类语言的处理能力。现如今,这一主流已经被基于统计学的方法所取代。目前较为流行的BERT、CLIP及类似算法本质上都是基于对大量语料的训练(实际上就是一种更高级的统计分析)得到的。这种基于神经网络训练的方法得到的模型已经具有了较强的人类语言处理能力。

2、词的向量化

在进入正文之前,我们先提出这样一个问题,一个文本,经过分词之后,送入某一个自然语言处理模型之前该如何表示?例如,“人/如果/没用/梦想/,/跟/咸鱼/还有/什么/差别”,向机器学习模型直接输入字符串并不便于模型进行计算和比较,但是对文本进行向量化的表示,也就是由字符串转换为向量可以帮助我们获得这样的能力。

2.1 one-hot的词向量模型

词袋模型把文本看成是一个装着词的袋子,对这个袋子中包含的所有此词汇采用One-Hot编码,每个词向量维度大小为整个词汇表的大小,对于每个具体的词汇表中的词,将对应的位置置为1。比如我们有下面的5个词组成的词汇表:

采用One-Hot编码方式来表示词向量非常简单,但缺点也是显而易见的。一方面我们实际使用的词汇表很大,经常是百万级以上,这么高维的数据处理起来会消耗大量的计算资源与时间。另一方面,One-Hot编码中所有词向量之间彼此正交,没有体现词与词之间语义之间的相似关系。

2.2 Word2vec 词向量模型

Word2Vec是google的Mikolov在2013年推出的一个NLP工具,由论文Exploiting Similarities among Languages for Machine Translation提出,之所以论文和工具的名称不一致,是因为Google论文开源的Git代码仓库名字就叫做“Word2Vec“。它的特点是能够将单词转化为向量来表示,这样词与词之间就可以定量的去度量他们之间的关系,挖掘词之间的联系。
Word2Vec 的训练模型本质上是只具有一个隐含层的神经元网络,如下图所示:

它的输入是采用One-Hot编码的词汇表向量,它的输出也是One-Hot编码的词汇表向量。例如输入向量x1={1,0,0......0},在网络最终收敛之后,从输入层x到隐含层h的权重矩阵

W V ⋅ N W_{V\cdot N} WVN,便是每一个词的采用Distributed Representation的词向量。比如上图中 Xi 单词的Word embedding后的向量便是权重矩阵W的第i行的转置。这样我们就把原本维数为V的词向量变成了维数为N的词向量(一般而言N远小于V,V的大小就是词袋容量大小),并且词向量间保留了一定的相关关系。

Google在Word2Vec的论文中提出了CBOW和Skip-gram两种模型,CBOW适合于数据集较小的情况,而Skip-Gram在大型语料中表现更好。其中CBOW使用围绕目标单词的其他单词(语境)作为输入,在映射层做加权处理后输出目标单词。与CBOW根据语境预测目标单词不同,Skip-gram根据当前单词预测语境下其他单词。假如我们有一个句子“There is an apple on the table”作为训练数据,CBOW的输入为(is,an,on,the),输出为apple。而Skip-gram的输入为apple,输出为(is,an,on,the)。

2.2.1 Continuous Bag of Words(CBOW)
1、输入层:上下文单词的One-Hot编码词向量,V为词汇表单词个数,C为上下文单词个数。仍以“There is an apple on the table”为例,这里C=4,所以模型的输入是(is,an,on,the)4个单词的One-Hot编码词向量。

2、初始化一个权重矩阵 W V ⋅ N W_{V\cdot N} WVN ,然后用所有输入的One-Hot编码词向量左乘该矩阵,得到维数为N的向量 ( w 1 , w 2 , ⋅ ⋅ ⋅ w n ) \left (w _{1} , w _{2}, \cdot \cdot \cdot w _{n}\right ) (w1,w2,wn) ,这里的N由自己根据任务需要设置。

3、将所得的向量 ( w 1 , w 2 , ⋅ ⋅ ⋅ w n ) \left (w _{1} , w _{2}, \cdot \cdot \cdot w _{n}\right ) (w1,w2,wn) 相加求平均作为隐藏层向量h。

4、初始化另一个权重矩阵 W V ⋅ N ′ W^{'}_{V\cdot N} WVN,用隐藏层向量h左乘 ,再经激活函数处理得到V维的向量y,y的每一个元素代表相对应的每个单词的概率分布。

5、y中概率最大的元素所指示的单词为预测出的中间词(target word)与true label的One-Hot编码词向量做比较,误差越小越好(根据误差更新两个权重矩阵)

在训练前需要定义好损失函数(一般为交叉熵代价函数),采用梯度下降算法更新W和W’。训练完毕后,输入层的每个单词与矩阵W相乘得到的向量的就是我们想要的Distributed Representation表示的词向量,也叫做word embedding。因为One-Hot编码词向量中只有一个元素为1,其他都为0,所以第i个词向量乘以矩阵W得到的就是矩阵的第i行,所以这个矩阵也叫做look up table,有了look up table就可以免去训练过程,直接查表得到单词的词向量了。

2.2.2 Skip-gram

这部分感兴趣的自行了解,再次不进行赘述。

2.2.3 算法改进

前面部分介绍的简化版Word2Vec过程实际上是为了便于大家理解而概括出来的。这个理想的模型当中存在一些无法回避的问题,比如输出的部分是一个50000维的One-Hot向量,因此数据经过网络后应该得到的也是一个50000维的向量,对这个输出向量进行Softmax计算所需的工作量将是一个天文数字。

Google论文里真实实现的Word2Vec对模型提出了两种改进思路,即Hierarchical Softmax模型和Negative Sampling模型。Hierarchical Softmax是用输出值的霍夫曼编码代替原本的One-Hot向量,用霍夫曼树替代Softmax的计算过程。Negative Sampling(简称NEG)使用随机采用替代Softmax计算概率,它是另一种更严谨的抽样模型NCE的简化版本。

3、多头注意力机制

多头注意力机制起源于Google的论文《Attention is all you need》,之前在李沐的论中阅读中有看过,但是第一次涉略似懂非懂,如今因为大模型的原因重新涉略,果然温故而知新,孔子诚不我欺。
在这里插入图片描述
图片的来源是论文原文,可以看出scaled-dot-product-attention到multi-head-attention最后才到transformer的结构,整体上层层递进还是非常明晰的。inputs经过word2vec之后就成为词向量;词在语句中是有位置顺序的,因此需要加上positional encoding部分,通过position encoding添加词语的位置信息。

根据沐神的讲解,原论文中的scaled-dot-product-attention的结构中作为输入层的Q K V其实就是input的输入向量,Query=Key=Value=input。在做计算的过程中,序列中的某一个词语以自身向量作为query,与整个序列其他语句的keys逐个进行点乘;点乘的结果可以用来反应query与keys之间的相似度,毫无疑问他会与自身的key点乘结果最大,这样的结果也是符合常识的。将query与整个序列的keys的点乘结果经过softmax转化为和为1的权重值,这些权重值可以用来表明这个词语与序列中其他词语的相关性关系;将此权重乘上序列的Values就得到最终的attention结果了。

计算过程可以参考:NLP学习—21.自注意力机制(Self-Attention)与Transformer详解,配置了较为精美的插图,便于理解具体的计算过程。

注意一下:
1、Q、K、V可以来自input embedding的线性变化,每一个词向量,都有自己的QKV。通过矩阵变换而来,矩阵可以学习得到。
2、multi-head self-attention 与self-attention 的区别在于可以有多组embedding的线性变化,从而习得多种多样的隐性空间的变换,获得尽可能全面的对于input内在规律的表征。

4、Diffusion

5、Stable Diffusion

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/33021.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Docker Swarm部署PXC+HAProxy高可用集群(三节点)

使用Docker Swarm部署PXCHAProxy高可用集群(三节点) 1. 部署规划 当前规划中,只启动一个HAProxy服务,主要用来做MySQL节点的负载均衡和代理,但是HAProxy可能会出现单点故障,后续需要启动多个HAProxy节点&…

【网络知识面试】初识协议栈和套接字及连接阶段的三次握手

接上一篇:【网络面试必问】浏览器如何委托协议栈完成消息的收发 1. 协议栈 一直对操作系统系统的内核协议栈理解的模模糊糊,借着这一篇博客做一下简单梳理。 我觉得最直白的理解,内核协议栈就是操作系统中的一个网络控制软件,就是…

Web测试的主要内容和测试方法有哪些?

Web测试的主要内容: 一、输入框 二、搜索功能 三、增加、修改功能 四、删除功能 五、注册、登录模块 六、上传图片测试 七、查询结果列表 八、返回键检查 九、回车键检查 十、刷新键检查 Web测试的测试方法: 1.在测试时,与网络有关的步骤或者…

mybatis-plus在实际开发中的应用

文章目录 前言一、实体类的注解二、Req查询条件三、Controller接口四、Service接口五、Service接口实现类六、Mapper接口七、枚举的使用总结 前言 最近的项目是使用mybatis-plus作为持久层框架,前面也记录过mybatis-plus的基本使用,此次记录一下本次项目…

蓝桥杯专题-试题版-【01字符串】【2n皇后问题】【A+B问题】【Fibonacci数列】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

Python:pyecharts可视化

文章目录 简介Geo地理图绘制地图下载 折线图区域突出显示横坐标带选择展示 add地图Mapformatter控制value显示在图中显示value值目标html的解析自定义地图js资源原生地图js的解析解决省份上文字不居中的问题 桑基图设置桑基柱的颜色 参考文献 简介 (这是20年的笔记…

【MySQL】库的操作

目录 一、创建数据库 二、字符集和校验规则 1、查看系统默认字符集以及校验规则 2、创建数据库案例 3、校验规则对数据库的影响 3.1、不区分大小写 3.2、区分大小写 3.3、进行查询 3.3.1、不区分大小写的查询以及结果 3.3.2、区分大小写的查询以及结果 3.4、结果排序…

flutter - 编写 阿里云-金融级实名认证插件

项目中有实名认证的需求,用户上传身份证反正面,进行人脸核验,后台集成的是阿里云的金融级实名认证SDK,巧合的是阿里云没有packages 需要自己造轮子。 废话不多少,直接上代码: 新建项目 ProjectType Plugin…

wsl下面的子系统启用systemctl

下载地址 https://github.com/gdraheim/docker-systemctl-replacement 操作 mv /usr/bin/systemctl /usr/bin/systemctl.old #对原文件进行备份sudo scp /mnt/c/Users/Administrator/Desktop/systemctl.py /usr/bin/systemctl #把项目中的systemctl.py文件拷贝到/use/bin/ 目…

Diffusion扩散模型学习2——Stable Diffusion结构解析-以文本生成图像为例

Diffusion扩散模型学习2——Stable Diffusion结构解析 学习前言源码下载地址网络构建一、什么是Stable Diffusion(SD)二、Stable Diffusion的组成三、生成流程1、文本编码2、采样流程a、生成初始噪声b、对噪声进行N次采样c、单次采样解析I、预测噪声II、…

安装mmdetection2.22(windows下)

安装mmdetection2.22 确定版本安装mmcv1.4安装mmdetection测试方案1方案2 确定版本 安装mmcv1.4 首先.cuda,pytorch得安装好,这里我拷贝pt1.8虚拟环境 安装mmcv1.4 安装mmdetection 参考文章 下载 cd E:\Code\mmdetection\mmdetection-2.22.0 pip install -r…

MATLAB 之 低层绘图操作和光照及材质处理

这里写目录标题 一、低层绘图操作1. 曲线对象2. 曲面对象3. 文本对象4. 其他核心对象4.1 区域块对象4.2 方框对象 二、光照和材质处理1. 光照处理2. 材质处理2.1 图形对象的反射特性2.2 material 函数 一、低层绘图操作 MATLAB 将曲线、曲面、文本等图形均视为对象&#xff0c…

【MySQL数据库 | 第十九篇】SQL性能分析工具

目录 前言: SQL执行频率: 慢查询日志: profile: profile各个指令: 总结: 前言: 本篇我们将为大家讲解SQL性能的分析工具,而只有熟练的掌握了性能分析的工具,才可以更…

【Spring Cloud Sleuth 分布式链路跟踪】 —— 每天一点小知识

💧 S p r i n g C l o u d S l e u t h 分布式链路跟踪 \color{#FF1493}{Spring Cloud Sleuth 分布式链路跟踪} SpringCloudSleuth分布式链路跟踪💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云…

力扣 257. 二叉树的所有路径

题目来源:https://leetcode.cn/problems/binary-tree-paths/description/ C题解1:使用递归,声明了全局变量result,遇到叶子节点就将字符串添加到result中。 递归三步法: 1. 确认传入参数:当前节点已有路径…

如何保证API接口的安全性

API接口的安全性是非常重要的,以下是一些保证API接口安全性的措施: 用户认证、授权:接口的调用者必须提供有效的身份认证信息,包括用户名、密码、密钥等,以保证接口的调用者的身份有效性。同时,需要在接口的…

echarts的基础知识和配置项

异步数据加载和更新 ECharts 中在异步更新数据的时候需要通过series的name属性对应到相应的系列,如果没有name,series就会根据数组的顺序索引,把数据跟前面的配置对应上 loading动画 如果数据加载时间较长,一个空的坐标轴放在画…

基于深度学习的高精度人脸口罩检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度人脸口罩检测识别系统可用于日常生活中或野外来检测与定位人脸口罩目标,利用深度学习算法可实现图片、视频、摄像头等方式的人脸口罩目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5…

《面试1v1》Redis持久化

🍅 作者简介:王哥,CSDN2022博客总榜Top100🏆、博客专家💪 🍅 技术交流:定期更新Java硬核干货,不定期送书活动 🍅 王哥多年工作总结:Java学习路线总结&#xf…

<Oracle>《Linux 下安装Oracle数据库 - Oracle 19C By CentOS 8 》(第一部分)

《Linux 下安装Oracle数据库 - Oracle 19C By CentOS 8 》(第一部分) 1 说明1.1 前言1.2 资源下载 2 安装步骤2.1 上传安装包2.2 下载数据库预安装包2.3 安装数据库预安装包 1 说明 1.1 前言 本文是Linux系统命令行模式安装Oracle数据库的学习实验记录…