【大模型系列篇】词向量 - 从Word2Vec到ELMo

news2024/11/26 11:34:52

🔥🔥🔥首先安利一个比较不错的忍不住就想一键三连的大模型科普: 大模型科普专栏 - AI老兵文哲(哔哩哔哩)

词向量(又叫词嵌入)已经成为NLP领域各种任务的必备一步,而且随着BERT、GPT等预训练模型的发展,词向量演变为知识表示方法,但其本质思想不变。 生成词向量的方法有很多种,本文重点回顾Word2Vec到ELMo。

常见的词嵌入方法:

  1. Word2Vec:由Google提出的模型,包括CBOW(Continuous Bag of Words)和Skip-Gram两种变体。Skip-Gram模型试图通过给定一个词来预测其上下文,而CBOW模型则通过上下文来预测中心词。

  2. GloVe(Global Vectors for Word Representation):由斯坦福大学提出的方法,基于词语的全局共现矩阵,通过矩阵分解技术将词语嵌入到向量空间中。

  3. FastText:由Facebook提出的改进版Word2Vec模型,考虑了词的子词信息,从而可以更好地处理未登录词(OOV,Out-of-Vocabulary)。

  4. BERT(Bidirectional Encoder Representations from Transformers):由Google提出的基于Transformer架构的模型,能够生成上下文相关的词嵌入,即同一个词在不同的句子中会有不同的向量表示。

词嵌入技术的优点包括:

  • 降低维度:将高维的词语表示转换为低维的向量表示,便于计算和存储。

  • 捕捉语义相似性:在向量空间中,语义相似的词语之间的距离较近。

  • 改进下游任务性能:词嵌入可以作为各种自然语言处理任务(如文本分类、情感分析、机器翻译等)的基础表示,显著提升模型性能。

总之,词嵌入技术通过将词语表示为向量,使得计算机能够更好地理解和处理自然语言,从而在各种自然语言处理任务中发挥重要作用。

词向量

让计算机理解人类的语言是一件很 Cool 的事情,而首先要做的就是将单词表示成一个数值向量(称为词向量),以方便计算机处理。比较直观的做法有one-hot 编码和共现矩阵等。

one-hot 编码

one-hot 编码,首先构造一个容量为 N 的词汇表,每个单词可以用一个 N 维的词向量表示,词向量中只有单词在词汇表的索引处取值为 1,其余为 0。

one-hot 编码主要的缺点是:当词汇表的容量变大时,词向量的特征空间会变得很大;另外 one-hot 编码不能区分单词之间的相似度,同时具有强稀疏性

共现矩阵(Co-Occurrence Matrix)

通过统计一个事先指定大小的窗口内的单词共同出现的次数,此时将词划分为两种,中心词和其他词。假设现在语料库中只有三个句子 “I have a cat”、“cat eat fish”、“I have a apple”,则可以构造出单词间的共现矩阵 A。例如 “I” 和 “have” 在两个句子中共同出现过,因此在 A中的权重为 2;而 “I” 和 “cat“ 只在一个句子中共现, A 中权重为 1 。

矩阵 A 的每一行就代表了一个单词的词向量,与 one-hot 编码类似,使用共现矩阵的词向量的维度也非常大。也可以使用 SVD (奇异值分解) 对 A进行分解,从而得到更低维度的词向量,但是 SVD 算法的时间复杂度较高,对 n×n 的矩阵进行 SVD 分解的复杂度为 O(n^3)

Word2Vec

《Efficient Estimation of Word Representation in Vector Space》- Word2Vec(2013)

Word2Vec词向量模型,可以用数值向量表示单词,且在向量空间中可以很好地衡量两个单词的相似性,它的核心思想是通过词的上下文得到词的向量化表示。

Word2Vec是轻量级的神经网络,其模型仅仅包括输入层、隐藏层和输出层,模型框架根据输入输出的不同,主要包括CBOW和Skip-gram模型。

两种模型的区别在于 CBOW 使用上下文词预测中心词,而 Skip-Gram 使用中心词预测其上下文单词。CBOW适合于数据集较小的情况,而Skip-Gram在大型语料中表现更好。

图为 Word2Vec 论文中的 CBOW 和 Skip-Gram 模型图,接下来介绍 Skip-Gram 和 CBOW。

CBOW

Simple CBOW Model

为了更好的了解模型深处的原理,我们先从Simple CBOW model(仅输入一个词,输出一个词)框架说起。

如上图所示:

  • input layer输入的X是单词的one-hot representation(考虑一个词表V,里面的每一个词 w_i都有一个编号i\epsilon \{1,...,|V|\},那么词w_i 的one-hot表示就是一个维度为|V|的向量,其中第i个元素值非零,其余元素全为0,例如: w_2=[0,1,0,...,0]^T);

  • 输入层到隐藏层之间有一个权重矩阵W,隐藏层得到的值是由输入X乘上权重矩阵得到的(细心的人会发现,0-1向量乘上一个矩阵,就相当于选择了权重矩阵的某一行,如图:输入的向量X是[0,0,1,0,0,0],W的转置乘上X就相当于从矩阵中选择第3行[2,1,3]作为隐藏层的值);

  • 隐藏层到输出层也有一个权重矩阵W',因此,输出层向量y的每一个值,其实就是隐藏层的向量点乘权重向量W'的每一列,比如输出层的第一个数7,就是向量[2,1,3]和列向量[1,2,1]点乘之后的结果;

  • 最终的输出需要经过softmax函数,将输出向量中的每一个元素归一化到0-1之间的概率,概率最大的,就是预测的词。

了解了Simple CBOW model的模型框架之后,我们来学习一下其目标函数。

输出层通过softmax归一化,u代表的是输出层的原始结果。通过下面公式,我们的目标函数可以转化为现在这个形式

CBOW Multi-Word Context Model

了解了Simple CBOW model之后,扩展到CBOW就很容易了,只是把单个输入换成多个输入罢了(划红线部分)。

对比可以发现,和simple CBOW不同之处在于,输入由1个词变成了C个词,每个输入X_{ik}到达隐藏层都会经过相同的权重矩阵W,隐藏层h的值变成了多个词乘上权重矩阵之后加和求平均值。

Skip-gram

有了CBOW的介绍,对于Skip-gram model 的理解应该会更快一些。

如上图所示,Skip-gram model是通过输入一个词去预测多个词的概率。输入层到隐藏层的原理和simple CBOW一样,不同的是隐藏层到输出层,损失函数变成了C个词损失函数的总和,权重矩阵W'还是共享的。

一般神经网络语言模型在预测的时候,输出的是预测目标词的概率,也就是说我每一次预测都要基于全部的数据集进行计算,这无疑会带来很大的时间开销。不同于其他神经网络,Word2Vec提出两种加快训练速度的方式,一种是Hierarchical softmax(多层softmax),另一种是Negative Sampling(负采样优化)

Word2Vec 的优点:模型简单;训练速度快;训练中会考虑单词的上下文,比之前的 Embedding方法维度更少,所以速度更快。

Word2Vec 的缺点:上下文窗口较小,也没有使用全局的单词共现信息;每个单词的词向量是固定的,无法解决一词多义的问题。

词嵌入算法 Word2Vec。与传统的 one-hot 编码、共现矩阵相比,词嵌入算法得到的词向量维度更低、也可以更好地支持一些下游的任务,例如文档分类,问答系统等。

GloVe

《GloVe : Global Vectors forWord Representation》全局向量的词嵌入,通常简称为GloVe,是一种用于将词语映射到连续向量空间的词嵌入方法。它旨在捕捉词语之间的语义关系和语法关系,以便在自然语言处理任务中能够更好地表示词语的语义信息。

常见的词嵌入算法有基于矩阵分解的方法和基于浅层窗口的方法,Glove 结合了这两类方法的优点生成词向量。基于矩阵分解的方法可以有效地利用全局信息,但是在大数据集上速度慢;而基于浅层窗口的方法对于词汇类比任务效果较好,训练速度快,但是不能有效利用全局信息。

词嵌入算法 Glove,结合两类词嵌入算法的优点。

第一类是 Matrix Factorization (矩阵分解) 方法,例如 LSA;

第二类是 Shallow Window-Based (基于浅层窗口) 方法,也称为基于预测的方法,例如 Word2Vec。

GloVe模型将 LSA 和 Word2Vec 的优点结合在一起,既利用了语料库的全局统计信息,也利用了局部的上下文特征 (滑动窗口)。Glove 首先需要构造单词共现矩阵,并提出了共现概率矩阵 (Co-occurrence Probabilities Matrix)的概念,共现概率矩阵可以通过单词共现矩阵计算。

ELMo

ELMo来自于论文《Deep contextualized word representations》(2018)

word2vec和glove这两种算法都是静态词向量算法,它们都存在一个问题,词在不同的语境下其实有不同的含义,而这两个模型词在不同语境下的向量表示是相同的;

ELMo是一种动态词向量算法,就是针对这一点进行了优化,来自于语言模型的词向量表示,也是利用了深度上下文单词表征,该模型的优势: (1)能够处理单词用法中的复杂特性(比如句法和语义) (2)这些用法在不同的语言上下文中如何变化(比如为词的多义性建模)

针对点1,作者是通过多层的stack LSTM去学习词的复杂用法,论文中的实验验证了作者的想法,不同层的output可以获得不同层次的词法特征。对于词义消歧有需求的任务,第2层会有较大的权重,对于词性、句法有需求的任务,对第1层会有比较大的权重。

针对点2,作者通过pre-train+fine tuning的方式实现,先在大语料库上进行pre-train,再在下游任务的语料库上进行fine tuning。

ELMo模型有三个优点:

  1. ELMo具有处理一词多义的能力。因为ELMo中每个单词的嵌入并不是固定的,在将这个单词的词嵌入输入双向LSTM之后,它的值会随着上下文内容的不同而改变,从而学到了和上下文相关的词嵌入。

  2. ELMo具有不同层次的表征能力。我们知道,对于一个多层的网络来说,不同的深度具有不同的表征能力,越接近输入层的网络层学到的特征越接近输入的原始特征,而越接近网络输出层的网络层学到的特征则具有很好的语义表征能力。ELMo使用了对多层LSTM的输出进行自适应加权的结构(attention),使用其可以根据下游任务自适应调整ELMo的输出,让其与下游任务相适应。

  3. ELMo具有非常强大的灵活性:除了ELMo本身的输入可以根据调整外,ELMo还可以以各种形式和下游任务进行结合。通过ELMo得到的仅是当前时间片的输入的编码结果,因此可以加入到输入层,隐层,输出层中。

ELMo是最早的一批将深度学习应用到词向量学习的任务中,它的思想对后续的BERT等产生了巨大的影响。

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

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

相关文章

JS打造一款你自己的专用字体:使用p5.js与JavaScript实现

前言 在最近的生成艺术项目中遇到一个小问题:如何在作品中优雅地添加文本元素,同时避免使用网络字体,要么侵权要么花钱~~给项目增加不必要的负担,我决定不走寻常路,自己动手,丰衣足食,用JS打造…

C++11 新特性基础

前言 C11是继,C98/03之后的最大的一次更新,这次更新虽然花了很长的时间,但是真的推出了很多的干货!本期内容开始我们将介绍C11常用的操作! 目录 前言 一、C11介绍 二、统一的列表初始化 1、{}初始化 2、std::in…

【机器学习】循环神经网络(RNN)介绍

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 循环神经网络(RNN)介绍什么是RNN?RNN的基本原理递归神经网络单元前向传播反向传…

Ubuntu下安装和配置MQTT服务器Mosquitto

MQTT(Message Queuing Telemetry Transport)是一种轻量级的通信协议,设计用于物联网设备之间的低带宽、不稳定网络环境下的高效通信。MQTT允许设备通过发布(publish)和订阅(subscribe)模式进行消…

清华2024内地录取3500人,其中900多人是走这个政策进来的... ...

2024年, 清华大学共录取本科新生3800余人,其中内地学生3500余人,覆盖全国31个省份1000 多所生源中学;港澳台学生60余人,国际学生约230人。 大李露个脸 清华大学2024年新生数据 普通批提前批共录取1549人,占比44% 强基计…

火龙果检测-目标检测数据集(包括VOC格式、YOLO格式)

火龙果检测-目标检测数据集(包括VOC格式、YOLO格式) 数据集: 链接:https://pan.baidu.com/s/1NdRBsHnYCK9xZd7bzQoN5w?pwd779l 提取码:779l 数据集信息介绍: 共有 1106 张图像和一一对应的标注文件 标注…

macos OneNote 2016 for Mac 官方pkg下载地址 - macos 10.15 Catalion 可用Onenote版本官方下载地址

macos 10.15 Catalion 版本的系统已经无法正常从应用商店下载到可用的Onenote 应用,原因是版本不受支持, 而且onenote官方链接的应用商店地址https://apps.apple.com/us/app/microsoft-onenote/id784801555?mt12在中国地区也无法访问, 所以中国地区用户如果想使用onenote应用…

【云原生系列之SkyWalking的部署】

1、分布式链路追踪 1.1概念 在较大的web集群和微服务环境中,客户端的一次请求需要经过不同的模块,多个不同中间件,多个不同机器一起相互协作才能处理完成客户端的请求,而在这一系列的请求过程之中,处理流程可能是串行执行,也可能…

华为云征文|基于Flexus云服务器X实例之安装长亭雷池waf教程

🔴大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 先看这里 写在前面何为长亭雷池waf安装社区版雷池雷池环境要求查看华为云Flexus云服务器X实例的配置一条命令安装雷池waf检查查看是否安装成功 雷池使用登录雷池配置站点 写在…

51单片机.之ADC数字模拟转换

1、数字转模拟电路&#xff0c;输出波形&#xff0c;示波器采集来显示波形 单片机通过i2c给&#xff0c;模数转换器&#xff0c;写入数字信号&#xff0c;定时器1s扫描按键的切换 1、key.c 切换波形 #include <reg52.h>sbit KEY_IN_1 P2^4; sbit KEY_IN_2 P2^5; …

五、Selenium操作指南(一)

文章目录 一、基本用法&#xff08;一&#xff09;初始化浏览器对象&#xff08;二&#xff09;访问页面&#xff08;三&#xff09;设置浏览器大小&#xff08;四&#xff09;刷新页面&#xff08;五&#xff09;前进后退 二、获取页面基础属性三、定位页面元素&#xff08;一…

【QNX+Android虚拟化方案】112 - 获取 88Q5152 Switch Port1、Port2 端口的主从模式 / 传输速率 / 链路状态

【QNX+Android虚拟化方案】112 - 获取 88Q5152 Switch Port1、Port2 端口的主从模式 / 传输速率 / 链路状态 1. 读取 P1、P2 端口 主从模式 / 传输速率2. 读取 P1、P2 端口 Link Status3. 读取 P1、P2 端口 Duplex 全双工/半双工模式4. 读取 P1、P2 链路信号SQI质量5. 完整代码…

基于单片机的肺活量检测仪设计

本设计主要对其中的一种测量方法和原理进行介绍与运用&#xff0c;设计了一款基于STC12C5A60S2单片机的肺活量检测仪&#xff0c;包括供电模块、气流检测模块、按键模块、显示模块、语音输出模块和蓝牙模块&#xff0c;实现对肺活量的数值检测&#xff0c;并对数据进行语音播报…

linux固定ip

背景 VMware&#xff0c;centos7 查询 网关 linux指执行 ip addr 命令 拿到自动分配的ip : 192.168.150.102 [rootlocalhost ~]# cd /etc/sysconfig/network-scripts/ 执行: cd /etc/sysconfig/network-scripts/ 进入到network-scripts文件中 执行: vi ifcfg-ens33 编辑ifc…

PPT到PDF转换器:一个功能强大的Python GUI应用(unzip,convert,replace,merge)

在当今的数字时代,文档格式转换已成为一项常见需求。特别是将PowerPoint演示文稿转换为PDF格式,这不仅可以确保文档的一致性,还能方便分享和打印。今天,我们将深入探讨一个使用Python开发的强大GUI应用程序,它不仅可以将PPT转换为PDF,还具备文本替换、PDF处理和文件合并等多项功…

TDesign 微信小程序组件库配置

文章目录 1.安装 npm 包2. 构建 npm3. 构建完成后即可使用 npm 包。4.修改 app.json5.修改 tsconfig.json6.使用组件 1.安装 npm 包 在小程序 package.json 所在的目录中执行命令安装 npm 包&#xff1a; npm install结果报错 PS C:\WeChatProjects\miniprogram-1> npm i…

七、库存管理——调拨、预留业务

1、库存管理业务总览 2、转储过账和库存转移 3、转储过账 3.1 库存状态到库存状态&#xff08;类型较多&#xff09; 3.1.1 从质检库存转移到非限制使用库存 转储模式&#xff1a;事务类型A08&#xff08;转移过账&#xff09;凭证类型R10&#xff08;其他&#xff09;移动类…

Having trouble using OpenAI API

题意&#xff1a;"使用OpenAI API遇到困难" 问题背景&#xff1a; I am having trouble with this code. I want to implement AI using OpenAI API in my React.js project but I cannot seem to get what the issue is. I ask it a question in the search bar in…

java 教程-我的第一个JAVA程序

Java视频教程 我的第一个JAVA程序 以下我们通过一个简单的实例来展示Java编程&#xff0c;本实例输出"编程字典&#xff0c;Java教程&#xff01;"&#xff0c;这也是所有语言入门的第一个实例程序&#xff1a; packagecodingdict.com; publicclassHelloWorld{ publi…

REGTR: End-to-end Point Cloud Correspondences with Transformers 论文解读

目录 一、导言 二、先导知识 1、3DRegNet 2、Kabsch-Umeyama算法 3、InfoNCE损失函数 三、相关工作 1、基于对应关系的配准 2、全局配准工作 3、过滤问题 4、Transformer 四、REGTR网络 1、降采样和特征提取 2、Transformer 交叉编码器 Transformer为什么要用FF…