[BPE]论文实现:Neural Machine Translation of Rare Words with Subword Units

简介: [BPE]论文实现:Neural Machine Translation of Rare Words with Subword Units

论文:Neural Machine Translation of Rare Words with Subword Units

作者:Rico Sennrich, Barry Haddow, Alexandra Birch

时间:2016

一、完整代码

这里我们使用python仅对BPE做一个简单的实现

import re, collections  
  
  
def get_stats(vocab):  
    pairs = collections.defaultdict(int)  
    for word, freq in vocab.items():  
        symbols = word.split()  
        for i in range(len(symbols) - 1):  
            pairs[symbols[i], symbols[i + 1]] += freq  
    return pairs  
  
  
def merge_vocab(pair, v_in):  
    v_out = {}  
    bigram = re.escape(' '.join(pair))  
    p = re.compile(r'(?<!\S)' + bigram + r'(?!\S)')  
    for word in v_in:  
        w_out = p.sub(''.join(pair), word)  
        v_out[w_out] = v_in[word]  
    return v_out  
  
  
if __name__ == '__main__':  
    vocab = {'l o w </w>': 5, 'l o w e r </w>': 2, 'n e w e s t </w>': 6, 'w i d e s t </w>': 3}  
    num_merges = 10  
    for i in range(num_merges):  
        pairs = get_stats(vocab)  
        best = max(pairs, key=pairs.get)  
        vocab = merge_vocab(best, vocab)  
      
    print(vocab)

二、论文解读

word-levelNMT任务上的不足:

  • a back-off to a dictionary look-up:用字典中相似且存在于vocabulary的词计算;
  • copy:对于名字来说处理有效,但是词的形态可能会发生改变,而翻译又需要词型的信息;

这篇文章主要介绍了两个方法:

  • 使用subwords而不是word,可以有效的提高NMT的能力;
  • byte pair encoding,利用压缩算法来构建词汇表;

2.1 模型架构

encoder:一个双向的GRU网络,隐藏层的结果合并作为最终的隐藏层;

decoder:RNN,利用前馈神经网络做对其模型输出结果;

2.2 BPE

字节对编码(BPE)(Gage,1994)是一种简单的数据压缩技术,它迭代地用一个未使用的字节替换序列中最频繁的字节对。我们将该算法用于分词。我们不合并频繁的字节对,而是合并字符或字符序列。

首先,我们用字符词汇表初始化字符词汇表,并将每个单词表示为一个字符序列,再加上一个特殊的词末字符“·”,这允许我们在翻译后恢复原始的序列。我们迭代地计算所有的字符对,并将每次出现的最频繁的字符对(“A”,“B”)替换为一个新的字符“AB”。每个合并操作都会产生一个新的字符,它表示一个字符n-gram。频繁的字符n-克(或整个单词)最终被合并成一个单一的字符,因此BPE不需要候选名单。最终的字符词汇表大小等于初始词汇表的大小,再加上合并操作的数量——后者是算法中唯一的超参数。

实现代码如下:

import re, collections  
  
  
def get_stats(vocab):  
    pairs = collections.defaultdict(int)  
    for word, freq in vocab.items():  
        symbols = word.split()  
        for i in range(len(symbols) - 1):  
            pairs[symbols[i], symbols[i + 1]] += freq  
    return pairs  
  
  
def merge_vocab(pair, v_in):  
    v_out = {}  
    bigram = re.escape(' '.join(pair))  
    p = re.compile(r'(?<!\S)' + bigram + r'(?!\S)')  
    for word in v_in:  
        w_out = p.sub(''.join(pair), word)  
        v_out[w_out] = v_in[word]  
    return v_out  
  
  
if __name__ == '__main__':  
    vocab = {'l o w </w>': 5, 'l o w e r </w>': 2, 'n e w e s t </w>': 6, 'w i d e s t </w>': 3}  
    num_merges = 10  
    for i in range(num_merges):  
        pairs = get_stats(vocab)  
        best = max(pairs, key=pairs.get)  
        vocab = merge_vocab(best, vocab)  
      
    print(vocab)

学习两种独立的编码,一种用于源句子,一种用于目标句子;可以使文本和词汇大小方面更紧凑,更能保证每个子词单元都在各自语言的训练文本中看到;

学习两个词汇的联合编码,提高了源句子和目标句子分割之间的一致性;

三、过程实现

论文整体比较简单,框架已经过时,没有实现的必要;

四、整体总结

这篇文章主要介绍了两个方法:

  • 使用subwords而不是word,可以有效的提高NMT的能力;
  • byte pair encoding,利用压缩算法来构建词汇表;


目录
相关文章
|
4月前
|
机器学习/深度学习 网络协议 PyTorch
【文献学习】DCCRN: Deep Complex Convolution Recurrent Network for Phase-Aware Speech Enhancement
本文介绍了一种新的深度复数卷积递归网络(DCCRN),用于处理语音增强问题,特别是针对低模型复杂度的实时处理。
168 5
|
7月前
|
TensorFlow 算法框架/工具
[seq2seq]论文实现:Effective Approaches to Attention-based Neural Machine Translation(上)
[seq2seq]论文实现:Effective Approaches to Attention-based Neural Machine Translation(上)
51 1
|
7月前
|
机器学习/深度学习 Python TensorFlow
[seq2seq]论文实现:Effective Approaches to Attention-based Neural Machine Translation(下)
[seq2seq]论文实现:Effective Approaches to Attention-based Neural Machine Translation(下)
48 1
|
机器学习/深度学习 编解码 数据可视化
Speech Emotion Recognition With Local-Global aware Deep Representation Learning论文解读
语音情感识别(SER)通过从语音信号中推断人的情绪和情感状态,在改善人与机器之间的交互方面发挥着至关重要的作用。尽管最近的工作主要集中于从手工制作的特征中挖掘时空信息,但我们探索如何从动态时间尺度中建模语音情绪的时间模式。
144 0
|
机器学习/深度学习 算法 数据挖掘
A Generative Adversarial Network-based Deep Learning Method for Low-quality Defect ImageReconstructi
本文提出了一种基于生成对抗网络 (GAN) 的 DL 方法,用于低质量缺陷图像识别。 GAN用于重建低质量缺陷图像,并建立VGG16网络识别重建图像。
153 0
《The 8 Neural Network Architectures Machine Learning Resarchers Need to Learn》电子版地址
The 8 Neural Network Architectures Machine Learning Resarchers Need to Learn
86 0
《The 8 Neural Network Architectures Machine Learning Resarchers Need to Learn》电子版地址
|
机器学习/深度学习 PyTorch 算法框架/工具
Batch Normlization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》论文详细解读
Batch Normlization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》论文详细解读
128 0
Batch Normlization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》论文详细解读
|
机器学习/深度学习
【论文阅读】(2019)SimGNN:A Neural Network Approach to Fast Graph Similarity Computation
- 图形相似性搜索是最重要的基于图形的应用程序之一,例如查找与查询化合物最相似的化合物。 - 图相似性距离计算,如图编辑距离(GED)和最大公共子图(MCS),是图相似性搜索和许多其他应用程序的核心操作,但实际计算成本很高。 - 受神经网络方法最近成功应用于若干图形应用(如节点或图形分类)的启发,我们提出了一种新的基于神经网络的方法来解决这一经典但具有挑战性的图形问题,**旨在减轻计算负担,同时保持良好的性能**。 - 提出的**方法称为SimGNN**,它结合了两种策略。 - 首先,我们**设计了一个可学习的嵌入函数**,将每个图映射到一个嵌入向量中,从而提供图的全局摘要。**提出了一种新的
269 0
【论文阅读】(2019)SimGNN:A Neural Network Approach to Fast Graph Similarity Computation
《Multi-Task Multi-Network Joint-Learning of Deep Residual Networks and Cycle-Consistency Generative Adversarial Networks for Robust Speech Recognition》电子版地址
Multi-Task Multi-Network Joint-Learning of Deep Residual Networks and Cycle-Consistency Generative Adversarial Networks for Robust Speech Recognition
106 0
《Multi-Task Multi-Network Joint-Learning of Deep Residual Networks and Cycle-Consistency Generative Adversarial Networks for Robust Speech Recognition》电子版地址
|
机器学习/深度学习 算法 数据挖掘
【论文泛读】 Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
【论文泛读】 Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
【论文泛读】 Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift