当前位置: 首页 > news >正文

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.

相关文章:

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

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

CDSN 2024博客之星总评选-主题文章创作,我的AI之路-起手篇

CDSN 2024博客之星总评选-主题文章创作&#xff0c;我的AI之路-起手篇 一. 回顾自己的机器学习之路二. 2024年的大模型学习三. 对自己的期望 一. 回顾自己的机器学习之路 自2019年起&#xff0c;我开始涉足机器学习领域&#xff0c;最初接触的是通过模型实现自动化的任务&…...

Android BitmapShader简洁实现马赛克,Kotlin(二)

Android BitmapShader简洁实现马赛克&#xff0c;Kotlin&#xff08;二&#xff09; 这一篇 Android BitmapShader简洁实现马赛克&#xff0c;Kotlin&#xff08;一&#xff09;-CSDN博客 遗留一个问题&#xff0c;xml定义的MyView为wrap_content的宽高&#xff0c;如果改成其…...

蓝桥杯 阶乘的和(C++完整代码+详细分析)

题目描述 原题链接 阶乘的和 问题描述 给定 n 个数 Ai​&#xff0c;问能满足 m! 为 ∑(Ai!) 的因数的最大的 m 是多少。其中 m! 表示 m 的阶乘&#xff0c;即 123⋯m。 输入格式 输入的第一行包含一个整数 n。 第二行包含 n 个整数&#xff0c;分别表示 Ai​&#xff0c;相…...

【Bug 记录】el-sub-menu 第一次进入默认不高亮

项目场景&#xff1a; 项目场景&#xff1a;el-sub-menu 第一次进入默认不高亮 问题描述 例如&#xff1a;sub-menu 的 index 后端默认传过来是 number&#xff0c;我们需要手动转为 string&#xff0c;否则会有警告&#xff0c;而且第一次进入 sub-menu 默认不高亮。 解决方…...

SpringCloud两种注册中心

SpringCloud 基本概念 系统架构 我们之前做的所有的项目都属于单体架构&#xff0c;下面我们将要学习更适合大型项目的分布式架构 单体架构&#xff1a; 将业务的所有功能几种在一个项目中开发&#xff0c;打成一个包部署。 优点&#xff1a;架构简单、部署成本低 缺点&am…...

陕西羊肉泡馍:味蕾上的西北风情

陕西羊肉泡馍:味蕾上的西北风情 在广袤的西北地区,有一道美食以其独特的口感、丰富的营养价值和深厚的文化底蕴,成为了无数食客心中的佳肴——陕西羊肉泡馍。这道传统美食,不仅承载着陕西人民的饮食智慧,更以其醇厚的味道和暖胃耐饥的特性,赢得了国内外食客的一致赞誉。 历史渊…...

蓝桥杯试题:整数反转

一、题目要求: 给定一个整数&#xff0c;请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式&#xff0c;即除非给定的原数为零&#xff0c;否则反转后得到的新数的最高位数字不应为零 二、题目分析代码演示&#xff1a; 该程序的主要功能是接收一个整数输入&…...

Moretl FileSync增量文件采集工具

永久免费: <下载> <使用说明> 我们希望Moretl FileSync是一款通用性很好的文件日志采集工具,解决工厂环境下,通过共享目录采集文件,SMB协议存在的安全性,兼容性的问题. 同时,我们发现工厂设备日志一般为增量,为方便MES,QMS等后端系统直接使用数据,我们推出了增量采…...

day1代码练习

输出3-100以内的完美数&#xff0c;(完美数&#xff1a;因子和(因子不包含自身)数本身) #include <stdio.h>// 判断一个数是否为完美数的函数 int panduan(int n) {if (n < 2) {return 0; // 小于2的数不可能是完美数}int sum 1; // 因子和初始化为1&#xff08;因…...

【Pytest】结构介绍

1.目录结构介绍 project_root/ │ ├── tests/ # 测试用例存放目录 │ ├── __init__.py │ ├── test_module1.py │ ├── module1.py # 被测试的模块 ├── conftest.py # pytest配置文件&#xff0c;可定义fixture和钩子函数 ├── py…...

Django基础之ORM

一.前言 上一节简单的讲了一下orm&#xff0c;主要还是做个了解&#xff0c;这一节将和大家介绍更加细致的orm&#xff0c;以及他们的用法&#xff0c;到最后再和大家说一下cookie和session&#xff0c;就结束了全部的django基础部分 二.orm的基本操作 1.settings.py&#x…...

【以音频软件FFmpeg为例】通过Python脚本将软件路径添加到Windows系统环境变量中的实现与原理分析

在Windows系统中&#xff0c;你可以通过修改环境变量 PATH 来使得 ffmpeg.exe 可在任意路径下直接使用。要通过Python修改环境变量并立即生效&#xff0c;如图&#xff1a; 你可以使用以下代码&#xff1a; import os import winreg as reg# ffmpeg.exe的路径 ffmpeg_path …...

检测到联想鼠标自动调出运行窗口,鼠标自己作为键盘操作

联想鼠标会自动时不时的调用“运行”窗口 然后鼠标自己作为键盘输入 然后打开这个网页 &#xff08;不是点击了什么鼠标外加按键&#xff0c;这个鼠标除了左右和中间滚轮&#xff0c;没有其他按键了&#xff09;...

web UI自动化测试笔记

在当今数字化转型的浪潮中&#xff0c;Web 应用已经无处不在&#xff0c;而其质量保障的关键之一就是自动化测试。想象一下&#xff0c;如果每次都手动验证 UI 功能&#xff0c;不仅耗时耗力&#xff0c;还容易遗漏问题。Python 的强大生态为 Web UI 自动化测试提供了高效的解决…...

计算机网络 (60)蜂窝移动通信网

一、定义与原理 蜂窝移动通信网是指将一个服务区分为若干蜂窝状相邻小区并采用频率空间复用技术的移动通信网。其原理在于&#xff0c;将移动通信服务区划分成许多以正六边形为基本几何图形的覆盖区域&#xff0c;称为蜂窝小区。每个小区设置一个基站&#xff0c;负责本小区内移…...

计算机网络三张表(ARP表、MAC表、路由表)总结

参考&#xff1a; 网络三张表&#xff1a;ARP表, MAC表, 路由表&#xff0c;实现你的网络自由&#xff01;&#xff01;_mac表、arp表、路由表-CSDN博客 网络中的三张表&#xff1a;ARP表、MAC表、路由表 首先要明确一件事&#xff0c;如果一个主机要发送数据&#xff0c;那么必…...

DRF开发避坑指南01

在当今快速发展的Web开发领域&#xff0c;Django REST Framework&#xff08;DRF&#xff09;以其强大的功能和灵活性成为了众多开发者的首选。然而&#xff0c;错误的使用方法不仅会导致项目进度延误&#xff0c;还可能影响性能和安全性。本文将从我个人本身遇到的相关坑来给大…...

批量提取多个 Excel 文件内指定单元格的数据

这篇文章将介绍如何从多个相同格式的Excel文件中&#xff0c;批量提取指定单元格的数据&#xff0c;合并后保存到新的工作薄。 全程0代码&#xff0c;可视化操作。 提取前&#xff1a; 提取后&#xff1a; 准备数据 这里准备了3个测试数据 开始提取 打开的卢易表&#xff0…...

#HarmonyOS篇:build-profile.json5里面配置productsoh-package.json5里面dependencies依赖引入

oh-package.json5 用于描述包名、版本、入口文件和依赖项等信息。 {"license": "","devDependencies": {},"author": "","name": "entry","description": "Please describe the basic…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...