NLP词向量技术

news2024/12/27 14:02:56

什么是词向量:
词向量(Word Vector)是对词语义或含义的数值向量表示,包括字面意义和隐含意义。 词向量可以捕捉到词的内涵,将这些含义结合起来构成一个稠密的浮点数向量,这个稠密向量支持查询和逻辑推理。

词向量也称为词嵌入,其英文均可用 Word Embedding,是自然语言处理中的一组语言建模和特征学习技术的统称,其中来自词表的单词或短语被映射为实数的向量,这些向量能够体现词语之间的语义关系。从概念上讲,它涉及从每个单词多维的空间到具有更低维度的连续向量空间的数学嵌入。当用作底层输入表示时,单词和短语嵌入已经被证明可以提高 NLP 任务的性能,例如文本分类、命名实体识别、关系抽取等。

词向量的发展历程

词向量作为词的分布式表示方法,经过多年研究,产生了非常多的词向量的生成模型。
在这里插入图片描述
1.one-hot(独热)编码
one-hot(独热)编码是最简单的词向量表达方式。它以字典建立向量,每个词都单独用一个很长的向量表示,该向量的维度是词典大小。向量中绝大多数元素为 0,只有一个维度的值为 1,这个维度就代表了当前的词。在这里插入图片描述
2.基于共现矩阵的模型
通过考虑词和词的共现问题,可以反映词之间的语义关系。最简单的方法是使用基于文档的方式来表示词向量。 共现矩阵(Co-Occurrence Matrix)首先指定窗口大小,然后统计窗口(和对称窗口) 内词语共同出现的次数作为词的向量。在这里插入图片描述
3.Word2vec
基于共现矩阵的模型实际是 one-hot 的一种优化,仍然存在维度灾难以及语义鸿沟的问题。因此后来的工作着重于构建分布式低维稠密词向量。Word2vec(Word to Vector)顾名思义,即为把单词转换成向量的一种方法。
用上下文来预测目标词的概率,词向量可以作为它的副产物学习到这种基于序列共现的语境信息。在这里插入图片描述
4.glove
glove 是由斯坦福 NLP 研究小组在 2014 年提出的一种词向量表示算法,是一个基于全局词频统计的词表征工具。利用共现矩阵来弥补Word2vec基于局部窗口的、忽略了全局信息的缺点,同时考虑局部信息和整体的信息。
采用基于共现矩阵去训练词向量的方法,词之间的关系可以由共现矩阵体现,又可以用词向量表示,因此可以建立起共现次数与词向量之间的关系。
在这里插入图片描述
5.FastText
Word2vec 训练出的词向量,难以很好地表征形态相近的词汇的语义, 在应用过程中针对未登录词也无能为力。基于以上问题,FastText 词向量的研发者提出了基于子词信息 N-gram 的词汇表示形式。FastText 由脸书的 FAIR 实验室在 2016 年开源,用于实现快速文本分类以及训练词向量的资料库。
首先FastText 模型输入一个词的序列,输出这个词序列属于不同类别的概率。
在这里插入图片描述
6.ELMo
以上的词向量技术本质上都是静态方式, 构造的都是独立于上下文的、静态的词向量,单词训练好之后就固定了,无论下游任务是什么,输入的向量始终是固定的,无法解决一词多义等问题。ELMo是一种动态词向量技术,词向量不再用固定的映射表来表达。
ELMo 使用双向语言模型来进行预训练,用两个分开的双层 LSTM 作为编码器。ELMo 先用一个语言模型去学习单词的词向量,当在使用时,可以根据上下文的语义去调整单词的词向量。
在这里插入图片描述
7.GPT
GPT 模型提出一种半监督的方式来处理语言理解的任务。使用非监督的预训练和监督方式的微调。模型的目标是学习一个通用的语言表示,可以经过很小的调整就应用在各种任务中。这个模型的设置不需要目标任务和非标注的数据集在同一个领域。
使用编码能力更强的 Transformer。同时是使用单向语言模型, 也就是只根据上文来预测当前词。先通过无标签的文本去训练生成语言模型,再根据具体的 NLP 任务,来通过有标签的数据对模型进行微调。

8.BERT
BERT模型真正实现了双向语言模型。ELMo 虽然是双向语言模型,但实际上是分开执行再组合 loss 值;GPT 在预训练时使用的基于 Transformer 模型的单向语言模型,使 embedding 获得的上下文信息不完整。此外,BERT 模型还增加了一个特性,使神经网络学习句子之间是否具有连贯的关系,最终能在智能问答等领域得到很好的结果。在这里插入图片描述

Word2vec

Word2vec 是一个计算词向量的开源工具。当我们在说 Word2vec 算法或模型的时候,其实指的是其背后用于计算词向量的 CBOW 模型和 Skip-Gram 模型。在向量空间中,词之间的相互关系、上下文关系都以向量之间的关系来表征,如通过词之间的距离(欧氏距离等)来判断它们之间的语义相似度。

CBOW 模型

Word2vec 预测词向量时都只使用了当前词的局部上下文,且以当前词为中心进行对称选取,我们将当前词到左(右)侧的距离称为滑动窗口大小。

基本原理:
输入 :给定的上下文。 输出 :预测的中心词。假设目标词前后各取 k 个词,即窗口的大小是 k,那么 CBOW 模型预测的将是 :
𝑝(𝑤_𝑡 |𝑤_(𝑡−𝑘),𝑤_(𝑡−(𝑘−1)),⋯,𝑤_(𝑡+(𝑘−1)),𝑤_(𝑡+𝑘))

特点:
对于 CBOW 模型,每次输入的是滑动窗口内的除当前词之外的上下文。

案例分析:
在这里插入图片描述

Skip-Gram 模型

基本原理:
输入 :给定的中心词。 输出 :预测的上下文。如果 𝑊_t 前后各取 k 个单词,即窗口大小为 k,那么 Skip-Gram 模型预测的将是 :
在这里插入图片描述
例如,当k=2时, Skip-Gram 模型预测的是 :
在这里插入图片描述
特点:
与 CBOW 模型相反,Skip-Gram 是使用目标词去预测周围词来训练得到词向量。

案例分析:
在这里插入图片描述
Word2vec 是 Google 公司在 2013 年开源的一款将词表征为实数值向量的高效工具。 gensim 是著名的向量空间模型包,里面提供了 Word2vec 的 python 接口,在实际应用中,可以在 python 中方便的调用,轻松实现对自定义语料的词向量训练。

案例分析

以美团外卖的评论集为语料训练词向量,并使用训练出来的词向量模型。
(1)安装所需工具
pip install pandas
pip install gensim
(2)对文本进行预处理、分词(jieba)
(3)进行模型训练

# 导入所需包
import pandas as pd 
import jieba 
from gensim.models.word2vec import Word2Vec
# 导入数据集
data = pd.read_csv('./train.csv')
corpus = data['comment'].values.astype(str) # 转字符串数组 
# 分词,再重组为字符串数组 
corpus = [jieba.lcut(corpus[index] .replace(",", "") .replace("!", "") .replace(" ! ", "") 
                 .replace("。", "") .replace("~", "") .replace(" ;", "") .replace(" ? ", "") 
                 .replace("?", "") .replace("【", "") .replace("】", "") .replace("#", "") ) 
                for index in range(len(corpus))]

# 词向量模型训练 
model = Word2vec(corpus, sg=0, vector_size=300, window=5, min_count=3) 
print(' 模型参数 :',model,'\n’) 
print(' 最匹配的词是 :',model.wv.most_similar(positive=[' 点赞 ', ' 不错 '], negative=[' 难吃 ']),'\n’)
print(' 相似度 =',model.wv.similarity(' 推荐 ',' 好吃 '),'\n’) 
# 坐标返回 
print(model.wv.__getitem__(' 地道 '))

在这里插入图片描述

注意力机制

注意力机制不是词向量生成技术,但它在使用预训练模型生成词向量的过程中具有非常重要的意义,目前被广泛使用在 Transformer 模型以及其他自然语言处理任务中。

Encoder- Decoder 框架是目前大多数注意力模型的基础,但值得注意的是,注意力模型作为一种通用思想本身并不依赖于任何框架。它是由一个输入序列(句子或者篇章)得到一个输出序列(句子或者篇章)的通用处理模型。对于序列对 <Source, Target>,我们希望通过将输入序列 Source 送入 Encoder-Decoder 框架,从而得到其输出序列 Target。在这里插入图片描述

特点:
1.训练参数少:与 CNN、RNN 等模型相比,注意力机制的实现模型复杂度更小,需要训练的参数也更少,对于算力和存储的要求更小。
2.计算速度快:RNN 在学习序列信息时,后一步的输出受前一步输出的影响,使得模型训练不能并行,而注意力机制能像 CNN 一样进行并行运算,在很大程度上提升了训练速率。
3.模型效果好:在引入注意力机制之前,由于中间语义表示始终不变,长距离的信息会逐渐被弱化,目标词的生成没有重点,使得模型效果不理想。而相比之下,注意力机制能抓住重点,即使在长距离的情况下也能获取对当前目标最有价值的信息。

自注意力机制: 在 Encoder-Decoder 框架中,自注意力机制(Self-Attention)是指只发生在 Encoder 或者 Decoder 中的注意力机制,而注意力机制本身没有这个束缚。在机器翻译的 Encoder-Decoder 框架中,通常 Query 来自于 Decoder,Key 和 Value 来自于 Encoder, 注意力机制发生在 Encoder-Decoder 之间。自注意力机制可以用于解决代词指代问题。相比于LSTM和RNN,自注意力机制不必经过漫长的传递,能极大地缩短长距离依赖特征之间的距离,提高远距离特征的利用率。

多头注意力机制: 多头注意力机制(Multi-Head Attention)是利用多个查询,来平行地从输入信息中选 取多个信息。每个注意力关注输入信息的不同部分。基本框架如下图所示。在这里插入图片描述

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

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

相关文章

代码随想录算法训练营第十四天 |二叉树

1.理论基础 二叉树定义 Class TreeNode() {int val;TreeNode left;TreeNode right;TreeNode(){};TreeNode(int val) {this.val val;}TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left left;this.right right;} }二叉树种类 在我们解题过程中二叉…

Mysql事务隔离级别是怎么实现的?

文章目录事务隔离级别解析常用命令查看事务隔离级别设置修改隔离级别隔离级别演示Mysql事务操作MVCC实现原理undo log版本链ReadView练习一下案例1案例2问答环节1、Mysql 可重复读到底有没有解决幻读&#xff1f;事务隔离级别 Mysql的事务隔离级别是由Mysql的各种锁以及MVCC机…

基于工业网关的储罐在线监测系统解决方案

储罐可以用来存放油、气、化学原料、工业原料等物资&#xff0c;是石油、化工、粮油、国防、冶金等行业必不可少的基础设施。随着储罐行业和相关行业的发展&#xff0c;越来越多企业开始运用储罐并产生储罐在线监测需求&#xff0c;需要实时了解储罐内的状态&#xff0c;保证重…

最强ADI SHARC系列DSP:ADSP-SC589的开发入门详解

作者的话 ADI的SHARC系列DSP&#xff0c;现阶段最强的型号是SC589&#xff0c;那么我就以SC589为例&#xff0c;写一点资料&#xff0c;让新手能够比较便捷的熟悉开发环境&#xff0c;软硬件&#xff0c;顺利的进入开发。 文档解决的是入门的问题&#xff0c;所以不会深入去写…

SpringCloud Alibaba框架都有啥啊

前言 文章目录前言1.集成Nacos实现服务的自动注册与发现2. Feign负载均衡注&#xff1a;OpenFeign和Feign的区别&#xff1a;3.使用Sentinel实现了接口的限流4.Feign整合Sentinel实现容错5.API网关6.Sleuth整合ZipKin实现链路追踪7.消息队列MQspring cloud是一个基于springboot…

做软件测试如何突破月薪20K?

IT行业从事技术岗位&#xff0c;尤其对于测试来说&#xff0c;月薪20K&#xff0c;即便在北上广深这类一线城市薪水也不算低了&#xff0c;可以说对于大部分测试岗位从业者来说&#xff0c;20K都是一个坎儿。 那么&#xff0c;问题来了&#xff0c;做软件测试如何可以达到月薪…

贪心,动态规划的区别

题目&#xff08;力扣53&#xff09;&#xff1a; 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。子数组 是数组中的一个连续部分。 示例&#xff1a; 输入&#xff1a;n…

System V 消息队列(一)—— 消息队列相关接口函数(msgget / msgctl)

SystemV方案是在OS内核层面专门为进程间通信设计的一个方案&#xff0c;然后通过系统调用&#xff08;system call&#xff09;给用户提供通信接口。SystemV方案包含三种&#xff1a;共享内存、消息队列、信号量。 和System V 共享内存一样&#xff0c;OS为了管理这些消息队列…

【机器学习实战】对加州住房价格数据集进行数据探索(读书笔记)

1. 数据集描述及获取 数据集下载地址&#xff1a;housing.csv数据集的结构&#xff1a; 其中数据集有10个属性&#xff0c;分别为经度、纬度、housing_median_age、房间总数、卧室总数、人口数、家庭数、收入中位数、房价中位数、ocean_proximity。 2. 对数据集进行探索 2.…

web系统开发中关于企业里各种系统分类

关于企业里各种系统 OA 办公自动化系统 Office Automation &#xff08;将现代化办公和计算机网络功能结合起来的新型办公方式&#xff09; 功能&#xff1a;工作流、知识管理 功能模块&#xff1a;日报、考勤、事项审批等CRM 客户关系管理 Customer Relationship Management&…

C++日期和时间编程小结

C11 的日期和时间编程内容在 C Primer(第五版)这本书并没有介绍&#xff0c;目前网上的文章又大多质量堪忧或者不成系统&#xff0c;故写下这篇文章用作自己的技术沉淀和技术分享&#xff0c;大部分内容来自网上资料&#xff0c;文末也给出了参考链接。 日期和时间库是每个编程…

百度前端二面常考面试题

HTTP分层 第一层&#xff1a;物理层&#xff0c;TCP/IP 里无对应&#xff1b;第二层&#xff1a;数据链路层&#xff0c;对应 TCP/IP 的链接层&#xff1b;第三层&#xff1a;网络层&#xff0c;对应 TCP/IP 的网际层&#xff1b;第四层&#xff1a;传输层&#xff0c;对应 TCP…

编写递归函数,求斐波那契数列第n项

要求&#xff1a;编写递归函数int f(int n)&#xff0c;计算如下公式&#xff1a; 定义main函数输入n&#xff0c;调用f函数进行计算&#xff0c;在main函数中输出计算结果。 【样例输入】 10 【样例输出】 89 主函数&#xff1a; #include<stdio.h> int main() { in…

基于ssm的社区疫情返乡管控系统设计实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

C# 学习之路(类型、存储和变量)

C# 学习之路&#xff08;类型、存储和变量&#xff09; C# 是一组类型声明 如果泛泛的描述 C 和 C 程序源代码的特征&#xff0c;可以说 C 程序是一组函数和数据类型&#xff0c;C 是一组函数和类&#xff0c;而 C# 程序是一组类型的声明。 命名空间是一种将相关的类型声明分组…

mongodb 5.0.14 副本集 安装 单机版 记录

1、下载tgz 连接地址&#xff1a;mongodb 5.0.14下载 2、创建用户 useradd mongouserpasswd mongouser 3、解压tgz wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.14.tgz tar -zxvf mongodb-linux-x86_64-rhel70-5.0.14.tgz 4、拆分3个独立的mo…

编程团体赛

目录 1047:编程团体赛 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 思路: 代码: 时间复杂度: 总结: 题目链接: 1047:编程团体赛 编程团体赛的规则为&#xff1a;每个参赛队由若干队员组成&#xff1b;所有队员独立比赛&a…

Protocol buffe vs Json 为什么还会大量使用Json?

JSON&#xff1a;的最大优点就是可读性好&#xff0c;但是体积大。 Protocol Buffers&#xff1a;最大的特点就是体积小&#xff0c;传输需要带宽小&#xff0c;速度快。但是可读性较差 尽管JSON和Protobuf消息可以互换使用&#xff0c;但这些技术的设计目标不同。JSON代表Ja…

【元胞自动机】格子波尔兹曼模型及其应用研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

我去!Python 不愧是脚本之王,这 23 种命令行用法你全部 get 了吗?

1. 快速打印函数的调用栈 在阅读源码的时候&#xff0c;有时候我们想要看整个程序的调用栈是怎样的&#xff1f; 比较常规的做法是使用全局搜索函数&#xff0c;一层一层往上走&#xff0c;效率非常之低。 而我习惯了使用 pdb 对代码进行调试&#xff0c;在使用pdb时&#x…