基于术语词典干预的机器翻译挑战赛笔记Task2 #Datawhale AI 夏令营

news2024/9/21 16:50:10

上回:

基于术语词典干预的机器翻译挑战赛笔记Task1 跑通baseline Datawhale AI 夏令营-CSDN博客文章浏览阅读718次,点赞11次,收藏8次。基于术语词典干预的机器翻译挑战赛笔记Task1 跑通baselinehttps://blog.csdn.net/qq_23311271/article/details/140357529?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22140357529%22%2C%22source%22%3A%22qq_23311271%22%7D

书接上回:

导入库

Spacy

Spacy是一个流行的自然语言处理(NLP)库,用于文本预处理、实体识别、句法分析、词向量表示等任务。

Spacy支持多种语言,并且具有高效的性能和易于使用的接口。它被广泛用于构建智能语言处理应用程序、信息提取和文本分析等领域。

用于英文的 tokenizer(分词,就是将句子、段落、文章这种长文本,分解为以字词为单位的数据结构,方便后续的处理分析工作),不同环境的安装请参考:https://spacy.io/usage

Install spaCy · spaCy Usage DocumentationspaCy is a free open-source library for Natural Language Processing in Python. It features NER, POS tagging, dependency parsing, word vectors and more.icon-default.png?t=N7T8https://spacy.io/usage 

安装库的命令 

pip install -U pip setuptools wheel
pip install -U 'spacy[cuda12x]'
python -m spacy download en_core_web_sm

创建新文件夹为task2并导入文件,在这个文件夹打开终端

打开终端粘贴复制好的命令...

等待安装完成

torchtext

一个用于自然语言处理(NLP)的Python库,它为NLP任务提供了一些常用的数据集和文本预处理功能。

torchtext可以帮助开发人员加载和处理文本数据集,并将其转换为适合机器学习模型训练的格式。它还提供了一些方便的功能,例如构建词汇表、创建数据迭代器等

jieba

是一个流行的中文分词工具。

它可以将连续的中文文本切分成单独的词语,将文本转化为可以进一步处理的形式。jieba具有高效的分词速度和较好的分词准确性,因此在中文文本处理和NLP任务中被广泛使用。

sacrebleu

是一个用于机器翻译评估的Python库。

它提供了计算机翻译质量指标(如BLEU指标)的功能,用于衡量机器翻译系统的性能

安装库的命令 

!pip install torchtext    
!pip install jieba
!pip install sacrebleu

数据预处理

上传数据

数据清洗与规范化

去除无关信息清除文本中的 HTML 标签、特殊字符和非文本内容,如 “Joey. (掌声) (掌声) 乔伊” 中的 “(掌声)”。

统一格式将所有文本转换为小写,统一日期和数字的表示方式,确保数据一致性。

文本分割

分句和分段:将长文本分割成句子或段落,以便于后续处理和模型训练。

分词

定义tokenizer

中文分词:使用 jieba 等工具将中文文本分解成单词或词素。

zh_tokenizer = lambda x: list(jieba.cut(x))  # 使用jieba分词

英文分词:使用 Spacy等工具将英文文本分解成单词或词素。

en_tokenizer = get_tokenizer('spacy', language='en_core_web_trf')

对英文和中文文本数据进行预处理,以便用于机器翻译。 

from typing import List, Tuple  # 导入List和Tuple类型,用于类型注解

# 定义数据预处理函数,输入参数为英文数据列表和中文数据列表,返回值为处理后的数据列表
def preprocess_data(en_data: List[str], zh_data: List[str]) -> List[Tuple[List[str], List[str]]]:
    processed_data = []  # 初始化一个空列表,用于存储处理后的数据
    for en, zh in zip(en_data, zh_data):  # 使用zip函数同时遍历英文和中文数据列表
        en_tokens = en_tokenizer(en.lower())[:MAX_LENGTH]  # 对英文文本进行小写转换和分词,并截断到最大长度
        zh_tokens = zh_tokenizer(zh)[:MAX_LENGTH]  # 对中文文本进行分词,并截断到最大长度
        if en_tokens and zh_tokens:  # 确保两个序列都不为空
            processed_data.append((en_tokens, zh_tokens))  # 将处理后的英文和中文序列添加到processed_data列表中
    return processed_data  # 返回处理后的数据列表

词汇表与词向量构建

词汇表构建:从训练数据中提取所有词汇,构建一个包含所有词汇的列表,并为每个词分配一个唯一索引。

词向量利用预训练的词向量或自训练词向量,将词汇表中的词映射到高维空间中的向量以捕捉词的语义信息。

# 导入build_vocab_from_iterator函数
from torchtext.vocab import build_vocab_from_iterator  


# 定义构建词汇表的函数,输入参数为处理后的数据列表,返回值为英文和中文的词汇表
def build_vocab(data: List[Tuple[List[str], List[str]]]):
    # 使用build_vocab_from_iterator函数从英文数据中构建词汇表
    # specials参数指定了特殊字符,包括未知词('<unk>'),填充('<pad>'),开始('<bos>')和结束('<eos>')
    en_vocab = build_vocab_from_iterator(
        (en for en, _ in data),  # 生成器表达式,只提取英文序列
        specials=['<unk>', '<pad>', '<bos>', '<eos>']
    )
    # 使用build_vocab_from_iterator函数从中文数据中构建词汇表
    zh_vocab = build_vocab_from_iterator(
        (zh for _, zh in data),  # 生成器表达式,只提取中文序列
        specials=['<unk>', '<pad>', '<bos>', '<eos>']
    )
    # 设置词汇表的默认索引为未知词('<unk>')的索引
    en_vocab.set_default_index(en_vocab['<unk>'])
    zh_vocab.set_default_index(zh_vocab['<unk>'])
    # 返回构建好的英文和中文词汇表
    return en_vocab, zh_vocab

序列处理

序列截断:限制输入序列的长度,避免过长的序列增加计算成本和冗余信息。

序列填充:将所有序列填充至统一长度,通常使用 <PAD> 标记进行填充,以便于批量处理。

特殊标记添加

序列开始和结束标记:在序列的开始和结束处添加 <SOS> 和 <EOS> 标记,帮助模型识别序列的边界。

未知词标记:对不在词汇表中的词添加 <UNK> 标记,使模型能够处理未见过的词汇。

数据增强

随机替换或删除词:在训练数据中随机替换或删除一些词,以增强模型的鲁棒性。

同义词替换:使用同义词替换原文中的词,增加训练数据的多样性。

数据集划分

数据分割:虽然本赛题中数据集已经划分好,但了解将数据划分为训练集、验证集和测试集的重要性是必要的,这有助于模型训练、参数调整和最终性能评估。

模型训练

在神经机器翻译中,编码器-解码器模型是一种常用的框架,用于描述源语言和目标语言之间的关系。这个框架由两个主要组件组成:编码器和解码器。

编码器的作用是将源语言句子编码为一个固定长度的向量,捕捉句子的语义和信息。

编码器通常是一个循环神经网络(RNN)或者是变种,长短时记忆网络(LSTM)或门控循环单元(GRU)。编码器逐步读取源语言句子的每个单词或者字符,每一步都更新其内部状态,最终输出一个表示整个句子语义的向量。

解码器的作用是基于编码器的输出向量,逐步生成目标语言的翻译结果。

解码器也是一个循环神经网络,接收编码器的输出向量作为初始隐藏状态,并根据之前生成的翻译结果和当前的隐藏状态生成下一个单词或者字符。解码器不断迭代,直到生成完整的目标语言句子。

训练阶段,编码器和解码器需要通过最大似然估计或其他损失函数进行参数优化,以最大限度地减少源语言和目标语言之间的翻译误差。推断阶段,只需要使用已训练好的编码器和解码器将源语言句子输入,然后通过解码器逐步生成目标语言翻译结果。

编码器-解码器模型提供了一种将源语言翻译为目标语言的框架,通过编码器捕捉源语言句子的语义信息,并通过解码器生成目标语言的翻译结果。

主流:编码器由词嵌入层和中间网络层组成

  • 当输入一串单词序列时,词嵌入层(embedding)会将每个单词映射到多维实数表示空间,这个过程也被称为词嵌入

  • 之后中间层会对词嵌入向量进行更深层的抽象,得到输入单词序列的中间表示。中间层的实现方式有很多,比如:循环神经网络、卷积神经网络、自注意力机制等都是模型常用的结构。

  • 解码器的结构基本上和编码器是一致的,在基于循环神经网络的翻译模型中,解码器只比编码器多了输出层,用于输出每个自标语言位置的单词生成概率,而在基于自注意力机制的翻译模型中,除了输出层,解码器还比编码器多一个编码解码注意力子层,用于帮助模型更好地利用源语言信息。

我以基于循环神经网络的机器翻译模型为例,说明其整体结构。

其中,左侧为编码器部分,源语言单词按照其在文本序列中的先后顺序被依次送入到循环神经网络(RNN)当中。在每入时间步t中,模型依据送入的源语言单语 xt对应修改并维护其模型内部的隐状态ht,这个隐状态编码了输入的源语言序列前t个时刻的所有必要信息。按照这种方式当m输入全部被送入到编码器之后,所对应的hm可以认为包含了源语言序列的所有信息。

右半部分是RNN解码器部分,它接收编码器输出的编码源语言句子信息的向量hm作为初始隐状态s0。由于 RNN的循环过程在每人时间步都要求一个输入单词,为了启动解码过程,一般会使用一个保留的特殊符号”[Start]“作为翻译开始的标记送入到RNN解码器当中并解码出自标语言序列的第一个单词z1。接下来,z1会作为下一入时刻的输入被送入到循环神经网络当中,并按照不断迭代产生后续的预测。由于自标语言序列的长度无法被提前预知,因此使用另一个保留符号“[Stop]”作为预测结束的标志。当某一个时刻t预测出的目标语言单词为 zt ="[Stop]”时,解码过程动态地停止。在上述过程当中,主要涉及到两步运算,第一步是 RNN 接收前一时刻隐状态S(t-1)并依据当前时刻输入z( t-1)(自标语言单词z(t-1)对应的语义嵌入)对隐状态进行维护并生成St的运算过程。

其中 U,W,V 是可学习的参数。U,W 负责维护循环状态,而 V 负责将当前时刻状态转换到词表大小的概率分布

P \in R^{vocab_size},从中可以采样得到目标语言单词 z_{t}

通过循环网络对源语言文本进行编码,并生成目标语言翻译结果的过程十分简单。然而,它仅仅使用一个定长的向量 $$h_{m}$$ 编码整个源语言序列。这对于较短的源语言文本没有什么问题,但随着文本序列长度的逐渐加长,单一的一个向量 hm 可能不足以承载源语言序列当中的所有信息

蓝色的线代表上述简单循环神经网络性能随源语言文本长度的变化趋势。当文本长度在 20 个单词以内时,单一向量能够承载源语言文本中的必要信息。随着文本序列的进一步增加,翻译性能的评价指标 BLEU 的值就开始出现明显地下降。因此,这就启发我们使用更加有效地机制从编码器向解码器传递源语言信息,这就是接下来要讲到的注意力机制。

引入注意力机制的循环机器翻译架构与基于简单循环网络的机器翻译模型大体结构相似,均采用循环神经网络作为编码器与解码器的实现。关键的不同点在于注意力机制的引入使得不再需要把原始文本中的所有必要信息压缩到一个向量当中。引入注意力机制的循环神经网络机器翻译架构如图所示:

翻译质量评价

人们在使用机器翻译系统时需要评估系统输出结果的质量。这个过程也被称作机器翻译译文质量评价,简称为译文质量评价(Quality Evaluation of Translation)。在机器翻译的发展进程中,译文质量评价有着非常重要的作用。不论在系统研发的反复迭代中,还是在诸多的机器翻译应用场景中,都存在大量的译文质量评价环节。从某种意义上说,没有译文质量评价,机器翻译也不会发展成今天的样子。比如,本世纪初研究人员提出了译文质量自动评价方法 BLEU(Bilingual Evaluation Understudy)

该方法使得机器翻译系统的评价变得自动、快速、便捷,而且评价过程可以重复。正是由于 BLEU 等自动评价方法的提出,机器翻译研究人员可以在更短的时间内得到译文质量的评价结果,加速系统研发的进程。

机器翻译译文质量评价

机器翻译译文质量评价是指对机器翻译系统输出结果进行评估,以衡量翻译质量的过程。在机器翻译的发展中,译文质量评价起着非常重要的作用。无论是在系统研发过程中还是在实际应用中,都需要进行大量的译文质量评价。

译文质量评价

译文质量评价的重要性在于它可以提供对机器翻译结果的客观评估,帮助研发人员改进系统的性能。通过译文质量评价,可以了解系统在不同语言对、不同领域和不同文本类型上的翻译表现,从而指导系统的改进和优化。

在过去,译文质量评价往往是由人工评估人员进行的,他们需要阅读源文本和机器翻译结果,然后对译文质量进行打分或提供详细的评估报告。然而,人工评估的过程费时费力,并且在大规模应用中不太实用。

为了解决这个问题,研究人员提出了自动评价方法,其中最著名的是BLEU(Bilingual Evaluation Understudy)BLEU通过比较机器翻译结果与参考翻译之间的n-gram匹配来评估翻译质量。BLEU具有自动化、快速、便捷和可重复性的特点,因此被广泛应用于机器翻译系统的评估和研发中。

BLEU方法的提出加速了机器翻译研究的进程,使研发人员能够更快地获取关于翻译质量的评估结果。然而,BLEU也存在一些缺点,例如它只关注n-gram匹配,无法捕捉翻译的流畅性和准确性等问题。因此,研究人员还提出了其他自动评价方法,如METEOR、TER和ROUGE等,以进一步提高机器翻译的译文质量评价水平。

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

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

相关文章

统计一个页面用到的html,css,js

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>统计html</title><style>* {margin: …

【人工智能】AI音乐创作兴起与AI伦理的新视角

文章目录 &#x1f34a;AI音乐创作&#xff1a;一键生成&#xff0c;打造你的专属乐章&#x1f34a;1 市面上的AI音乐应用1.1 Suno AI1.2 网易天音 &#x1f34a;2 AI音乐创作的流程原理(直接制作可跳到第3点)2.1 AI音乐流派2.2 AI音乐风格2.3 AI音乐的结构顺序2.5 选择AI音乐乐…

基于PSO算法优化PID参数的一些问题

目录 前言 Q1&#xff1a;惯性权重ω如何设置比较好&#xff1f;学习因子C1和C2如何设置&#xff1f; Q2&#xff1a;迭代速度边界设定一定能够遍历&#xff08;/覆盖&#xff09;整个PID参数二维空间范围吗&#xff1f;还是说需要与迭代次数相关&#xff1f;迭代次数越高&a…

阵列信号处理学习笔记(一)--阵列信号处理定义

阵列信号 阵列信号处理学习笔记&#xff08;一&#xff09;–阵列信号处理定义 阵列信号处理学习笔记&#xff08;二&#xff09;–空域滤波基本原理 文章目录 阵列信号前言一、阵列信号处理定义1.1 信号1.2 阵列 二、雷达数据中哪些属于空间采样总结 前言 MOOC 阵列信号处理…

Bubbliiiing 的 Retinaface rknn python推理分析

Bubbliiiing 的 Retinaface rknn python推理分析 项目说明 使用的是Bubbliiiing的深度学习教程-Pytorch 搭建自己的Retinaface人脸检测平台的模型&#xff0c;下面是项目的Bubbliiiing视频讲解地址以及源码地址和博客地址&#xff1b; 作者的项目讲解视频&#xff1a;https:…

数据结构排序合集(笔记)

目录 一.插入排序与希尔排序 二.选择排序与堆排序 三.冒泡排序和快速排序 四.归并排序 五.计数排序 一.插入排序与希尔排序 时间复杂度空间复杂度稳定性插入排序O&#xff08;N^2&#xff09;O(1)稳定希尔排序O(N^1.3)O(1)不稳定 插入排序&#xff1a; 希尔排序&#xff…

css-01-如何实现“文本过长(文本在一行排),超出部分被省略号代替”

目录 需求代码代码解释 需求 最近写一个项目&#xff0c;遇到了一个问题&#xff0c;就是希望实现下面这种文字效果&#xff1a;文字在一行排&#xff0c;超出的部分用省略号代替 代码 <!DOCTYPE html> <html lang"en"><head><meta charset…

OCC 创建点线面体

目录 一、利用封装已有算法实现 1、盒子建模算法封装 2、可视化 二、利用OCC 点线面实现 1、实现过程 2、实现一个面 3、拉伸面生成体 4、旋转面生成体 三、总结 一、利用封装已有算法实现 1、盒子建模算法封装 BRepPrimAPI_MakeBox box(2, 2, 2); 2、可视化 void VTK…

Gateway源码分析:路由Route、断言Predicate、Filter

文章目录 源码总流程图说明GateWayAutoConfigurationDispatcherHandlergetHandler()handleRequestWith()RouteToRequestUrlFilterReactiveLoadBalancerClientFilterNettyRoutingFilter 补充知识适配器模式 详细流程图 源码总流程图 在线总流程图 说明 Gateway的版本使用的是…

在线 PDF 制作者泄露用户上传的文档

两家在线 PDF 制作者泄露了数万份用户文档&#xff0c;包括护照、驾驶执照、证书以及用户上传的其他个人信息。 我们都经历过这样的情况&#xff1a;非常匆忙&#xff0c;努力快速制作 PDF 并提交表单。许多人向在线 PDF 制作者寻求帮助&#xff0c;许多人的祈祷得到了回应。 …

Python学习笔记—100页Opencv详细讲解教程

目录 1 创建和显示窗口... - 4 - 2 加载显示图片... - 6 - 3 保存图片... - 7 - 4 视频采集... - 8 - 5视频录制... - 11 - 6 控制鼠标... - 12 - 7 TrackBar 控件... - 14 - 8.RGB和BGR颜色空间... - 16 - 9.HSV和HSL和YUV.. - 17 - 10 颜色空间的转化... - 18 - …

分页查询与分页条件查询

--------------- 无PageHelper插件分页查询 1.创建PageBean实体类 Data NoArgsConstructor AllArgsConstructor public class PageBean<T> {private Long total;//总条数private List<T> items;//当前页数据集合 }类型安全性 泛型&#xff1a;提供了编译时的类型…

【学长工具库】1.如何快速部署开源框架 | 若依框架保姆级搭建教程

今天学长带来了一款十分适合自学的开源框架-若依框架&#xff0c; 本文会详细的教大家怎么部署这个系统。 文末有所有资料获取方式~ 框架技术栈 前端采用 Vue、Element UI。后端采用 Spring Boot、Spring Security、Redis & Jwt。权限认证使用 Jwt&#xff0c;支持多终端…

【IEEE出版,会议历史良好、论文录用检索快】第四届计算机科学与区块链国际学术会议 (CCSB 2024,9月6-8)

CCSB 2024会议由深圳大学主办&#xff0c;旨在探讨计算机科学的最新发展如何与区块链技术相结合&#xff0c;以及这一结合如何推动金融、供应链管理、数据安全和其他多个行业的革新&#xff0c; 本次会议将提供一个多学科交流的平台&#xff0c;汇集来自相关领域学者的研究和思…

vxe-弹窗初始化激活选中Vxe-Table表格中第一行input输入框

1.实现效果 2.Modal弹窗的渲染过程 一、Vue组件的生命周期 Vue组件从创建到销毁会经历一系列的生命周期钩子&#xff0c;这些钩子为开发者提供了在不同阶段插入自定义逻辑的机会。在Modal弹窗的上下文中&#xff0c;这些生命周期钩子同样适用。 beforeCreate&#xff1a;组件…

解决 Ubuntu 用户登录后的 shell 和功能问题

在使用 Ubuntu 系统管理用户时&#xff0c;可能会遇到一些常见的问题&#xff0c;比如新创建的用户无法使用常见命令&#xff08;如 ll&#xff09;以及输出信息没有颜色。这些问题通常与用户的默认 shell 有关。本文将总结如何解决这些问题&#xff0c;并确保新用户能够正常使…

【linux深入剖析】命名管道 | 匿名管道与命名管道的区别 | system V共享内存

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1. 命名管道2. 创建命名管…

STM32之九:ADC模数转换器

目录 1. 简介 2. ADC 2.1 逐次逼近型寄存器SAR 2.2 ADC转换时间 3 ADC框图 3.1 8 bit ADC0809芯片内部框图 3.2 ADC框图 3.2.1 注入通道和规则通道 3.2.2 单次/连续转换模式 3.2.3 扫描模式 3.2.4 外部触发转换 3.2.5 数据对齐 3.2.6 模拟看门狗 4. 总结和ADC驱…

mac无法清空废纸篓怎么办 mac废纸篓清空了如何找回 cleanmymac误删文件怎么恢复

废纸篓相当于“一颗后悔药”&#xff0c;用于临时存储用户删除的文件。我们从从Mac上删除的文件&#xff0c;一般会进入废纸篓中。如果我们后悔了&#xff0c;可以从废纸篓中找回来。然而&#xff0c;有时我们会发现mac无法清空废纸篓&#xff0c;这是怎么回事?本文将探讨一些…

Unity-URP-SSAO记录

勾选After Opacity Unity-URP管线&#xff0c;本来又一个“bug”, 网上查不到很多关于ssao的资料 以为会不会又是一个极度少人用的东西 而且几乎都是要第三方替代 也完全没有SSAO大概的消耗是多少&#xff0c;完全是黑盒(因为用的人少&#xff0c;研究的人少&#xff0c;优…