6_机器翻译与Seq2Seq模型

本文涉及的产品
图片翻译,图片翻译 100张
文档翻译,文档翻译 1千页
语种识别,语种识别 100万字符
简介: 6_机器翻译与Seq2Seq模型

一、Sequence-to-Sequence Model (Seq2Seq)


机器翻译:多对多的问题,输入和输出的长度都不固定


1.1 Machine Translation Data(机器翻译数据)


Tab-delimited Bilingual Sentence Pairs: http://www.manythings.org/anki/


选择German-English文件,打开文件,左边英语句子,右边德语句子,一个英语句子对应多个德语句子,给定一句英语如果翻译对应其中一个德语句子,那么翻译正确。


Preprocessing: to lower case, remove punctuation, etc.(预处理:把大写变小写,去掉标点符号等)


1.2 Tokenization & Build Dictionary(分词和建造字典)


1.2.1 Tokenization(分词)


Tokenization :把一句话变成很多个单词或者很多个字符。

做Tokenization 要用两个不同的Tokenizer(分词器),英语用一个,德语用一个。

Tokenization之后要建立两个字典,一个英语字典,一个德语字典。


e9fcceeaa0ff2a1be62b0339e2b50fb5.png


分词方法有两种:


Tokenization in the char-level.(把一句话分割成很多字符)

Tokenization in the word-level.(把一句话分割成很多单词)


本节为了为了方便,使用Tokenization in the char-level.


f274b5c04d9ad0e83e7d139823f492b3.png


1.2.2 Build Dictionary(建造字典)


任务:把英语翻译成德语。


在德语字典里面,把不常用的字符删掉,只保留26个字母和一个空格符号。

在德语的字典里面加上两个符号,一个是起始符(start sign),一个是终止符(stop sign),用“\t”作为起始符,“\n”作为终止符,什么字符做起始符和终止符都行,别和字典里面已经存在的字符重复即可


bb703a3b89b9492efbab065caa35ff09.png


1.2.3 问题


Question: Why 2 different tokenizers and dictionaries?

Answer: In the char-level, languages have different alphabets/chars.(在字符层面上,不同的语言通常有不同的字母/字符)

两种语言的字符是不同的,因此需要两种不同的Tokenizer(分词器),各有各的字母表


82785ec0abf1837bcd7186c0e841932d.png


Question: Why 2 different tokenizers and dictionaries?

Answer: In the word-level, languages have different vocabulary.(在单词层面上,不同的语言具有不同的词汇)

不同的语言有不同的分词方法


1.3 One-Hot Encoding


一句话先变成字符列表,然后用字典把字符映射成数字,这样一来一个语言(英语/德语)变成sequence(序列)。


然后把每一个数字用one-hot向量表示。


做完One-Hot Encoding,每个字符用一个向量表示,每句话用一个矩阵表示

这个矩阵就是RNN的输入


3e6a75ceb3d8a504e4d2534f6c7db9df.png


1.4 Training the Seq2Seq Model(训练Seq2Seq模型)


1.4.1 Seq2Seq Model


Seq2Seq Model:有一个Encoder(编码器)和一个Decoder(解码器)

Encoder(编码器):是一个LSTM或者其它的RNN模型,用来从输入的英语句子中提取特征。Encoder的最后一个状态就是从输入的句子中提取的特征,包含这句话的信息。Encoder其余的状态没有用,都被丢弃。Encoder的输出是LSTM最后的状态h和最后的传输带C,—–>(h,c)


Decoder(解码器):用来生成德语。这个本质是文本生成器。Decoder的初始状态是Encoder的最后一个状态,通过Encoder最后一个状态,Decoder得知输入的英语句子是“ go away ”


3d84d9d790ae795c45f4e567e9054b01.png


Decoder是LSTM模型:每次接收一个输入,然后输出对下一个字符的预测。第一个输入必须是起始符,然后Decoder会输出一个概率分布,计作向量P。把起始符后面的第一字符“m”,对其做one-hot encoding作为标签y,用标签y和预测p的CrossEntropy作为损失函数,我们希望预测P尽量接近y,所以损失函数越小越好,有了损失函数,可以反向传播计算梯度,梯度会从损失函数传到Decoder,然后再从Decoder一直传到Encoder,然后用梯度下降来更新Encoder和Decoder的模型参数让损失函数减小。


接下来是输入两个字符,起始符和字母“m”,Decoder会输出对下一个字符的预测,计作向量P。


接下来是输入三个字符,不断重复,直到这句德语的最后一个字符。


最后一轮,把整句德语作为Decoder输入,所以用停止符的ont-hot向量作为便签y,希望输出的预测尽量接近标签,也就是停止符,然后再做反向传播,更新模型参数。


6cd158d200fa4967319cc89ab45caf44.png


1.4.2 Seq2Seq Model in Keras


7705aebe8951bd41d090bdd0d5308dfc.png


1.5 Inference Using the Seq2Seq Model(使用Seq2Seq模型进行推理)


e9cf46d4d9056a662da8168f5e04ee84.png


假如抽样得到了终止符,终止文本生成,返回这个生成的序列。


二、Summary(总结)


9d98d698000ffa9b8e352e72e69e0e55.png


假如抽样得到了终止符,终止文本生成,返回这个生成的序列。


三、How to Improve?(怎样改进Seq2Seq)


3.1 Bi-LSTM instead of LSTM (Encoder only!)


Encoder’s final states (ht, and Ct) have all the information of the English sentence.(Encoder的最后一个状态是整句话的概要,理想情况下Encoder的最后一个状态包含整句话的完整信息)


If the sentence is long, the final states have forgotten early inputs.(如果句子足够长,LSTM就会遗忘,假如英语里面的有些句子被遗忘,Decoder不会有英语句子的完整信息,Decoder生成的德语会有些遗漏)

Bi-LSTM (left-to-right and right-to-left) has longer memory.


da6c380b0bf4a7baab86a2420f297958.png


Decoder必须是单向的,它是一个文本生成器,必须按顺序生成文本,因此Decoder不能用双向LSTM。


3.2 Word-Level Tokenization


Word-level tokenization instead of char-level.


The average length of English words is 4.5 letters.(英文平均每个单词有4.5个字母)

The sequences will be 4.5x shorter. (输入的序列将短4.5倍)

Shorter sequence —> less likely to forget. (序列更短,更不容易遗忘)

But you will need a large dataset! (但是,你需要更大的数据集)


of (frequently used) chars is ~102 —> one-hot suffices.

of (frequently used) words is ~104 —> must use embedding.

Embedding Layer has many parameters —> overfitting!( Embedding层 的参数数量太大,没有办法很好的训练,会有过拟合的问题)或者进行预训练来改进


3.3 Multi-Task Learning(多任务学习)


把英语翻译成德语是一个任务,还可以多添加几个任务:比如把英语句子翻译成英语句子本身,添加一个Decoder,根据(h,c)生成英语句子,这样一来Encoder只有一个,而训练数据多了一倍,所以Encoder可以被训练的更好。


Even if you want to translate English to German, you can use all the datasets:(还可以利用英语翻译成其它语言)


但是Encoder只有一个。


f8400350a76aa2146e325262d1ad0661.png


3.4 Attention! (Next lecture.)(注意力机制,机器翻译方法最好)


目录
相关文章
|
7天前
|
机器学习/深度学习 自然语言处理 算法
Seq2Seq模型在机器翻译任务中如何优化以提高翻译质量?
Seq2Seq模型在机器翻译任务中如何优化以提高翻译质量?
|
3月前
|
机器学习/深度学习 自然语言处理 算法框架/工具
python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译
python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译
|
人工智能 自然语言处理 搜索推荐
FlowSeq、mBART、BERT-fused、mRASP、mRASP2...你都掌握了吗?一文总结机器翻译必备经典模型(3)
FlowSeq、mBART、BERT-fused、mRASP、mRASP2...你都掌握了吗?一文总结机器翻译必备经典模型
207 0
FlowSeq、mBART、BERT-fused、mRASP、mRASP2...你都掌握了吗?一文总结机器翻译必备经典模型(3)
|
机器学习/深度学习 自然语言处理 算法
FlowSeq、mBART、BERT-fused、mRASP、mRASP2...你都掌握了吗?一文总结机器翻译必备经典模型(2)
FlowSeq、mBART、BERT-fused、mRASP、mRASP2...你都掌握了吗?一文总结机器翻译必备经典模型
297 0
|
机器学习/深度学习 自然语言处理 算法
FlowSeq、mBART、BERT-fused、mRASP、mRASP2...你都掌握了吗?一文总结机器翻译必备经典模型(1)
FlowSeq、mBART、BERT-fused、mRASP、mRASP2...你都掌握了吗?一文总结机器翻译必备经典模型
136 0
|
机器学习/深度学习 人工智能 自然语言处理
Unsupervised NMT、PBSMT、coarse-to-fine...你都掌握了吗?一文总结机器翻译必备经典模型(3)
Unsupervised NMT、PBSMT、coarse-to-fine...你都掌握了吗?一文总结机器翻译必备经典模型
170 0
|
机器学习/深度学习 自然语言处理
Unsupervised NMT、PBSMT、coarse-to-fine...你都掌握了吗?一文总结机器翻译必备经典模型(2)
Unsupervised NMT、PBSMT、coarse-to-fine...你都掌握了吗?一文总结机器翻译必备经典模型
124 0
|
机器学习/深度学习 自然语言处理 索引
机器翻译——基于注意力机制的seq2seq结构(下)
机器翻译——基于注意力机制的seq2seq结构(下)
|
机器学习/深度学习 数据采集 自然语言处理
机器翻译——基于注意力机制的seq2seq结构(上)
机器翻译——基于注意力机制的seq2seq结构
|
机器学习/深度学习 存储 JSON
在PyTorch中使用Seq2Seq构建的神经机器翻译模型
在PyTorch中使用Seq2Seq构建的神经机器翻译模型
296 1
在PyTorch中使用Seq2Seq构建的神经机器翻译模型