Transfoemr的解码器(Decoder)与分词技术

        在自然语言处理(NLP)领域,解码器(Decoder)和分词技术是两个至关重要的概念。解码器是序列生成任务的核心组件,而分词则是将文本数据转换为可处理形式的基础步骤。    

一、解码器(Decoder):序列生成的核心

        解码器是序列到序列(Seq2Seq)模型中的重要组成部分,广泛应用于机器翻译、文本生成、摘要等任务。其核心目标是根据输入序列生成目标序列。以下是解码器的关键机制和流程:

(一)解码器的工作流程

  1. 右向偏移输出嵌入
            在解码器开始处理输入序列之前,模型会对输出嵌入进行向右偏移一个位置。这一操作确保在训练阶段,每个符号都能正确获取之前生成符号的上下文信息,从而避免“窥视”未来信息。例如,假设目标序列是["Hello", "world", "!"],在训练时,解码器的输入会被处理为["<start>", "Hello", "world"],而目标输出是["Hello", "world", "!"]。这样,模型在生成每个词时,只能依赖于之前生成的词,而不能看到未来的词。

  2. 位置编码的整合
           与编码器类似,解码器将位置编码与输出嵌入相结合,以保留符号的序列顺序信息。位置编码是一种将序列中每个位置的语义信息嵌入到向量中的方法。例如,在Transformer模型中,位置编码通过正弦和余弦函数生成,使得模型能够理解序列中每个元素的位置关系。

  3. 带掩码的多头自注意力机制
            解码器利用带掩码的多头自注意力机制,专注于输入序列的相关片段以及之前生成的符号。掩码技术防止模型对未来符号的预知,确保每个符号仅能参考其之前的符号。例如,在生成句子的第四个单词时,模型只能考虑前三个单词,而不能考虑第五个单词。掩码通常是一个上三角矩阵,其中上三角部分设为负无穷大,从而在计算注意力权重时忽略未来信息。

  4. 编码器-解码器注意力交互
           解码器通过编码器-解码器注意力机制,结合编码器的输出,聚焦于输入序列的重要部分,从而生成受输入语境影响的输出符号。这一机制使得解码器能够利用编码器提取的上下文信息,生成与输入语境相关的输出。

  5. 基于位置的前馈网络
            在自注意力层之后,解码器对每个符号独立施加位置编码的前馈网络。该网络捕捉输入和已生成符号之间的复杂模式与关联,助力精确输出序列的构建。前馈网络通常由两层全连接层组成,中间通过激活函数(如ReLU)进行非线性变换。

(二)掩码机制(Masking)

        掩码机制是解码器的核心特性之一。其目的是确保当前位置的输出仅依赖于其之前的位置,而不是未来的位置。掩码通常是一个上三角矩阵,其中上三角部分设为负无穷大,从而在计算注意力权重时忽略未来信息。例如,对于一个长度为5的序列,掩码矩阵如下:

plaintext复制

[
  [0, -∞, -∞, -∞, -∞],
  [0,  0, -∞, -∞, -∞],
  [0,  0,  0, -∞, -∞],
  [0,  0,  0,  0, -∞],
  [0,  0,  0,  0,  0]
]

        在计算注意力权重时,掩码矩阵会被加到注意力分数上,使得上三角部分的分数在经过softmax操作后接近0,从而实现掩蔽效果。

(三)训练与生成过程

  • 训练阶段:解码器可以并行处理整个目标序列,通过“教师强制”(Teacher Forcing)技术,使用真实的标签作为输入,从而加速模型的收敛。例如,在训练机器翻译模型时,解码器的输入是目标语言的真实句子,而不是模型生成的句子。这种方法能够显著提高训练效率,但可能导致训练和推理阶段的行为不一致。

  • 生成阶段:解码器逐个生成输出序列,每次仅生成一个标记,并将其作为新输入传递回模型。例如,在生成文本时,解码器首先生成第一个词,然后将这个词作为输入生成下一个词,依此类推,直到生成结束标记<eos>

(四)评估模型预测质量

        在评估模型生成的整个句子质量时,常用的指标包括BLEU分数。BLEU通过比较预测句子中的n-gram与参考句子中的n-gram的匹配程度来评估翻译质量。例如,假设参考翻译是["I", "love", "this", "city"],模型生成的翻译是["I", "love", "this", "town"],BLEU分数会根据二者的匹配程度给出一个评分。

二、分词技术:文本处理的基石

        分词是将文本数据转换为结构化形式的过程,是NLP任务的基础。其目的是将文本分解为有意义的单元(tokens),以便模型能够更好地理解和处理。

(一)分词的重要性

  1. 将复杂问题转化为数学问题
           分词将文本转换为数字向量,便于模型进行统计计算。计算机无法直接处理人类语言,因此需要将文本转换为模型能够理解的形式。例如,将句子"Hello, world!"转换为[1, 2, 3]这样的数字序列,其中每个数字代表一个词或字符。

  2. 合适的粒度

    • 词粒度:词是表达完整含义的最小单位,适合大多数NLP任务。例如,"我喜欢喝咖啡"可以被分词为["我", "喜欢", "喝", "咖啡"],这种粒度能够较好地保留语义信息。

    • 字符粒度:字符粒度过细,无法表达完整含义。例如,"Hello, world!"被拆分为["H", "e", "l", "l", "o", ",", " ", "w", "o", "r", "l", "d", "!"],这种粒度虽然能够保留原始信息,但语义信息较弱。

    • 子词粒度:如Byte Pair Encoding (BPE)和WordPiece,介于词粒度和字符粒度之间,能够有效应对未登录词问题。例如,"helloworld"可以被BPE分解为["hel", "low", "orld"],这种粒度能够在保留语义的同时,处理一些未登录词。

(二)中英文分词的区别

  1. 分词方式

    • 中文:没有明显的单词分隔符,需要复杂的算法和语言知识。例如,"我喜欢猫猫"需要根据上下文确定单词边界,可能被分词为["我", "喜欢", "猫猫"]

    • 英文:单词之间由空格分隔,分词相对简单。例如,"I like coffee"可以直接通过空格分词为["I", "like", "coffee"]

  2. 形态变化

    • 中文:词汇通常不发生形态变化。例如,"书"无论是单数还是复数,形式都是一样的。

    • 英文:需要词性还原和词干提取,以处理时态、复数等变化。例如,"running"可以通过词性还原变为"run""cities"可以通过词干提取变为"city"

  3. 粒度问题

    • 中文:需要选择合适的粒度,以平衡语义准确性和信息召回率。例如,"中国科学技术大学"可以被分词为["中国", "科学技术", "大学"],也可以被分词为["中国", "科学", "技术", "大学"],不同的粒度会影响模型的理解能力。

    • 英文:单词之间有明确的空格分隔,通常不需要考虑粒度问题。

(三)中文分词的难点

  1. 缺乏统一标准:中文分词没有普遍认可的标准,不同的分词工具可能产生不同的结果。例如,"乒乓球拍卖完了"可以被分词为["乒乓球", "拍卖", "完了"],也可以被分词为["乒乓", "球拍", "卖", "完了"],不同的分词方式会导致不同的语义理解。

  2. 歧义词切分:一些词语可能存在多种切分方式,导致语义歧义。例如,"乒乓球拍卖完了"有两种不同的分词方式,分别表示不同的含义。

  3. 新词识别:新词更新速度快,分词系统需要定期更新词库。例如,网络热词"雨女无瓜"在出现初期,分词系统可能无法正确识别。

(四)常见的分词方法

  1. 基于词表的分词:如jieba分词,依赖预定义的词表。这种方法的优点是分词速度快,能够较好地处理常见词汇,但对未登录词的处理能力较弱。

  2. 基于统计的分词:使用HMM、CRF等算法,考虑上下文关系。这种方法的优点是能够较好地处理歧义词和未登录词,但训练成本较高。

  3. 基于深度学习的分词:如BERT的分词器,通过预训练学习语义关系。这种方法的优点是能够自动学习字符之间的语义和语法关系,适应性强,但需要大量的计算资源和语料进行训练。

三、解码器与分词技术在现代NLP中的应用

(一)解码器的应用

解码器广泛应用于以下领域:

  1. 机器翻译:将一种语言的文本翻译为另一种语言。例如,将中文翻译为英文,或反之。

  2. 文本生成:生成连贯的文本,如新闻、故事等。例如,根据给定的开头"Once upon a time, "生成后续内容。

  3. 对话系统:生成自然语言响应。例如,根据用户输入"How are you?"生成回答"I'm fine, thank you."

(二)分词技术的应用

分词技术是NLP任务的基础,广泛应用于:

  1. 文本分类:将文本转换为向量,用于分类任务。例如,判断一条新闻是体育新闻还是娱乐新闻。

  2. 情感分析:通过分词提取关键信息。例如,判断一条评论是正面的还是负面的。

  3. 命名实体识别:识别文本中的实体。例如,从句子"Steve Jobs was the CEO of Apple."中识别出"Steve Jobs""Apple"

        解码器和分词技术是NLP领域的核心组件。解码器通过复杂的注意力机制和掩码技术,确保序列生成的准确性和一致性;而分词技术则为文本处理提供了基础支持。理解它们的原理和应用,对于NLP的学习至关重要。


参考文献

  • https://www.datawhale.cn/learn/summary/87

  • Vaswani, A., et al. (2017). Attention Is All You Need. NeurIPS.

  • Mikolov, T., et al. (2013). Efficient Estimation of Word Representations in Vector Space. ICLR.

  • Devlin, J., et al. (2019). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL.

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

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

相关文章

[笔记] 极狐GitLab实例 : 手动备份步骤总结

官方备份文档 : 备份和恢复极狐GitLab 一. 要求 为了能够进行备份和恢复&#xff0c;请确保您系统已安装 Rsync。 如果您安装了极狐GitLab&#xff1a; 如果您使用 Omnibus 软件包&#xff0c;则无需额外操作。如果您使用源代码安装&#xff0c;您需要确定是否安装了 rsync。…

消息队列篇--通信协议篇--AMOP(交换机,队列绑定,消息确认,AMOP实现实例,AMOP报文,帧,AMOP消息传递模式等)

AMQP&#xff08;Advanced Message Queuing Protocol&#xff0c;高级消息队列协议&#xff09;是一种开放的、跨平台的消息传递协议&#xff0c;旨在提供一种标准化的方式在不同的消息代理和客户端之间进行消息传递。AMQP不仅定义了消息格式和路由机制&#xff0c;还规定了如何…

小利特惠源码/生活缴费/电话费/油卡燃气/等充值业务类源码附带承兑系统

全新首发小利特惠/生活缴费/电话费/油卡燃气/等充值业务类源码附带U商承兑系统 安装教程如下 图片:

HTML<hgroup>标签

例子&#xff1a; 使用hgroup元素标记标题和段落是相关的&#xff1a; <hgroup> <h2>Norway</h2> <p>The land with the midnight sun.</p> </hgroup> 定义和用法&#xff1a; 标签<hgroup>用于包围标题和一个或多个<p&g…

14-6-3C++STL的list

&#xff08;一&#xff09;list的插入 1.list.insert(pos,elem);//在pos位置插入一个elem元素的拷贝&#xff0c;返回新数据的位置 #include <iostream> #include <list> using namespace std; int main() { list<int> lst; lst.push_back(10); l…

【2024年终总结】深圳工作生活评测

距离上次写年终总结已经过了一年半了&#xff0c;这一年半中哪怕经历了很多的事情&#xff0c;但是感觉又没发生什么。想写一些骚话&#xff0c;却总觉得自己无法完全表达&#xff0c;便也就这样&#xff0c;静静地记录下这一段时光。 现在是2025年&#xff0c;春节前的时光&am…

前端jquery 实现文本框输入出现自动补全提示功能

git仓库&#xff1a;web_study/some-demos/inputAutoFit at main Cong0925/web_study (github.com) 压缩包&#xff1a;已绑定到指定资源 示例图&#xff1a; 实现说明: 1.首先&#xff0c;html部分设置好相关的定位标签如图&#xff1a; 2.主要函数 3.默认数据

(5)STM32 USB设备开发-USB键盘

讲解视频&#xff1a;2、USB键盘-下_哔哩哔哩_bilibili 例程&#xff1a;STM32USBdevice: 基于STM32的USB设备例子程序 - Gitee.com 本篇为使用使用STM32模拟USB键盘的例程&#xff0c;没有知识&#xff0c;全是实操&#xff0c;按照步骤就能获得一个STM32的USB键盘。本例子是…

java后端之登录认证

基础登录功能&#xff1a;根据提供的用户名和密码判断是否存在于数据库 LoginController.java RestController Slf4j public class LoginController {Autowiredprivate UserService userService;PostMapping("/login")public Result login(RequestBody User user) {…

Spring--Bean的生命周期和循环依赖

Bean的生命周期和循环依赖 Bean 的生命周期了解么?Spring中的循环引用什么是循环引用&#xff1f;三级缓存解决循环依赖总结构造方法出现了循环依赖怎么解决&#xff1f; Bean 的生命周期了解么? 整体上可以简单分为四步&#xff1a;实例化 —> 属性赋值 —> 初始化 —…

【云安全】云原生-Docker(五)容器逃逸之漏洞利用

漏洞利用逃逸 通过漏洞利用实现逃逸&#xff0c;主要分为以下两种方式&#xff1a; 1、操作系统层面的内核漏洞 这是利用宿主机操作系统内核中的安全漏洞&#xff0c;直接突破容器的隔离机制&#xff0c;获得宿主机的权限。 攻击原理&#xff1a;容器本质上是通过 Linux 的…

【Uniapp-Vue3】request各种不同类型的参数详解

一、参数携带 我们调用该接口的时候需要传入type参数。 第一种 路径名称?参数名1参数值1&参数名2参数值2 第二种 uni.request({ url:"请求路径", data:{ 参数名:参数值 } }) 二、请求方式 常用的有get&#xff0c;post和put 三种&#xff0c;默认是get请求。…

基于SpringBoot的软件产品展示销售系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

hedfs和hive数据迁移后校验脚本

先谈论校验方法&#xff0c;本人腾讯云大数据工程师。 1、hdfs的校验 这个通常就是distcp校验&#xff0c;hdfs通过distcp迁移到另一个集群&#xff0c;怎么校验你的对不对。 有人会说&#xff0c;默认会有校验CRC校验。我们关闭了&#xff0c;为什么关闭&#xff1f;全量迁…

mysql学习笔记-数据库的设计规范

1、范式简介 在关系型数据库中&#xff0c;关于数据表设计的基本原则、规则就称为范式。 1.1键和相关属性的概念 超键:能唯一标识元组的属性集叫做超键。 候选键:如果超键不包括多余的属性&#xff0c;那么这个超键就是候选键 主键:用户可以从候选键中选择一个作为主键。 外…

高并发问题的多维度解决之道

‍‌​​‌‌​‌​‍‌​​​‌‌​​‍‌​​​‌​‌​‍‌​​‌​​‌​‍‌‌​​‌​‌​‍‌​‌​‌‌​​‍‌​‌​‌​​​‍‌​‌​‌​‌​‍‌​‌‌​​‌​‍‌​‌‌​​​​‍‌‌​​‌‌‌‌‍‌‌​​‌​‌‌‍‌​​​‌‌​​‍‌​​‌‌‌​​‍‌…

Windows Defender添加排除项无权限的解决方法

目录 起因Windows Defender添加排除项无权限通过管理员终端添加排除项管理员身份运行打开PowerShell添加/移除排除项的命令 起因 博主在打软件补丁时&#xff0c;遇到 Windows Defender 一直拦截并删除文件&#xff0c;而在 Windows Defender 中无权限访问排除项。尝试通过管理…

数据结构——堆(C语言)

基本概念&#xff1a; 1、完全二叉树&#xff1a;若二叉树的深度为h&#xff0c;则除第h层外&#xff0c;其他层的结点全部达到最大值&#xff0c;且第h层的所有结点都集中在左子树。 2、满二叉树&#xff1a;满二叉树是一种特殊的的完全二叉树&#xff0c;所有层的结点都是最…

工业相机 SDK 二次开发-Halcon 插件

本文介绍了 Halcon 连接相机时插件的使用。通过本套插件可连接海康 的工业相机。 一. 环境配置 1. 拷贝动态库 在 用 户 安 装 MVS 目 录 下 按 照 如 下 路 径 Development\ThirdPartyPlatformAdapter 找到目录为 HalconHDevelop 的文 件夹&#xff0c;根据 Halcon 版本找到对…

Vue3 + TS 实现批量拖拽 文件夹和文件 组件封装

一、html 代码&#xff1a; 代码中的表格引入了 vxe-table 插件 <Tag /> 是自己封装的说明组件 表格列表这块我使用了插槽来增加扩展性&#xff0c;可根据自己需求&#xff0c;在组件外部做调整 <template><div class"dragUpload"><el-dial…