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

[UIM]论文解读:subword Regularization: Multiple Subword Candidates

文章目录

    • 一、完整代码
    • 二、论文解读
      • 2.1 介绍
      • 2.2 NMT
      • 2.3 Unigram language model
      • 2.4 subword 抽样
      • 2.5 效果
    • 三、整体总结

论文:Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates
作者:Taku Kudo
时间:2018

一、完整代码

这里我们使用python代码进行实现

# 完整代码在这里
有时间再来写;

二、论文解读

2.1 介绍

根据论文标题,subword regularization,类似于其他的regularization,其目的是为了增强结果的robust,这里的目标是利用多种分割方式产生的结果来改善NMT的效果;

subwords是一个解决NMT中的oov问题有效的方法,但是其在切词的时候会出现一个问题,就是说单个词可能被切割成多种形式,这给切割带来了模糊性,这里论文考虑能否利用切割的模糊性作为噪声来增强结果的鲁棒性;

论文中利用概率抽样的方式对多种分割方式进行抽取数据来进行训练;

BPE segmentation gives a good balance between the vocabulary size and the decoding efficiency, and also sidesteps the need for a special treatment of unknown words.

BPE能够很好的平衡词表大小和模型转化效率,但是其弊端在于同一个词可能有多种的分割方式;如图所示:

同一个词的多种分词方式可能会造成语意不明确,但是我们可以利用这个弊端,把其看作噪声进行训练;实验证明这种处理方式可以得到显著的改进;

2.2 NMT

NMT其本质是一个语言模型,给定一个序列 x = ( x 1 , x 2 , … , x 3 ) x=(x_1,x_2,\dots,x_3) x=(x1,x2,,x3), y = ( y 1 , y 2 , … , y 3 ) y=(y_1,y_2,\dots,y_3) y=(y1,y2,,y3),语言模型就是使

概率达到最大,本质使用的是最大似然估计MLE,在给定语料 D = { < X ( s ) > , < Y ( s ) > } s = 1 ∣ D ∣ D=\{<X^{(s)}>,<Y^{(s)}>\}_{s=1}^{|D|} D={<X(s)>,<Y(s)>}s=1D时,对总体,其Loss,就可以对 p p p,求log得到:

但是由于在分词的时候 x x x y y y可能会被分为多个subwords,所以这里我们可以把模型修改为

其中 P ( x ∣ X ) P(x|X) P(xX) P ( y ∣ Y ) P(y|Y) P(yY) x x x y y y的分割概率,这个稍后会讲解是如何计算的;

由于分词数量相对于句子的长度呈现指数型增长,所以我们不可能把所有的分词都计算出来,我们只使用一部分,比如都只使用 k k k个分词结果,得到最后的公式为:

在decoding阶段,由于我们只有一个 x x x的分割序列,我们选出概率最大的 x x x作为best decoding,或者我们选出前几个概率最大的 x x x作为best decoding,后一种由于有不同的分割 x i x_i xi,会产生不同的 y i y_i yi,所以我们需要选择一个好的 y i y_i yi来做最终的 y y y;这里论文给了一个评分公式:

这里 ∣ y ∣ |y| y是指 y y y的subwords的个数; λ \lambda λ是其惩罚参数;

2.3 Unigram language model

BPE分割方式是在NMT任务中运用较为广泛的一种方式,该方法可以有效平衡词表大小和模型转化效率,同一个词可能有多种的分割方式,这是我们需要利用的点,但是如何给出每种分割方式的概率很困难;

为了解决这个问题,这里提出了一个新的分割方法,利用Unigram language model去计算每个分割的subwords的分割概率;

首先定义 P ( x ) P(x) P(x)

这里要满足上述条件,最简单的方式就是统计一段文本中subword出现的次数,然后用次数除以总次数得到 P ( x i ) P(x_i) P(xi)

这里再定义 S ( x ) S(x) S(x) x x x的所有分割序列;

因为文本越长,subword就呈现指数型增长,这里并不好直接计算,但是可以利用Viterbi算法快速求到;

在给定词表vocabulary的情况下,我们接着定义:

通过EM估计最大化似然函数 L L L,再结合上面 P ( x ) P(x) P(x)的定义等式条件,我们可以估计出每一个 P ( x i ) P(x_i) P(xi)

Unigram language model的步骤如下所示:

  1. 先从训练语料中建立一个种子词表,最自然的方式便是结合所处出现的字符以及最常见的字符串,由于UIM是从大表到小表,所以说初始表要尽可能的大才行;这里使用the Enhanced Suffix Array 算法,可以在O (T)时间和O(20T)空间中枚举频繁的子字符串,这里T是语料库的大小;然后选择出现次数排在前面的字符串便可;要值得注意的是,必须要包括所有的单个字符;
  2. 重复这一步直到vocabulary的大小符合预期;首先在词表给定的情况下,通过EM估计每一个 P ( x i ) P(x_i) P(xi),然后计算在vocabulary中删除了 x i x_i xi后似然函数 L L L的变化 l o s s i loss_i lossi,把 l o s s i loss_i lossi从大到小排列,选择排在前面的 η \eta η%的 x i x_i xi构建新的词表;在这里必须要保证单个字符在词表内;

这样UIM的步骤就完成了!

最终的词汇表vocabulary包含了语料库中的所有单个字符,语言模型的分词可以看作是charwordsubword的概率混合;

2.4 subword 抽样

如上文介绍,抽样我们是从 P ( x ∣ X ) P(x|X) P(xX)分布中抽取,首先抽取 l − b e s t l-best lbest分割,这是我们主要考虑的分割;

P ( x ∣ X ) P(x|X) P(xX)分布如下,做了一些平滑处理,其中 α \alpha α是平滑因子:

l l l趋近于无穷的时候,即充分考虑所有的分割,单个计算是不显示的,这里可以使用FFBS算法进行优化;

2.5 效果

效果如图所示,有一点点提升:

三、整体总结

noise regularization技术在神经网络中比较常见;

seq2seq中添加噪声:

  • 通过改变句子顺序添加噪声 DAEs(Lample et al., 2017; Artetxe et al., 2017)
  • 用word embeding的平均来表示word sequence,在平均之前,随机删除某些单词 Word dropout (Iyyer et al., 2015)
  • 随机改变wordcharacter的顺序(Belinkov and Bisk, 2017)(Xie et al., 2017)

subword regularization背后的基本思想和动机与之前的工作相似。为了提高robust,通过随机改变句子的内部表示方式,向输入的句子注入噪声。然而,以往的方法往往依赖于启发式方法来产生合成噪声,这些噪声并不总是反映训练和推理时的真实噪声;此外,这些方法只能应用于源句(编码器),因为它们不可逆地重写了句子的表面。另一方面,subword regularization是用底层语言模型生成合成的子词序列,以更好地模拟噪声和分割错误。由于subword regularization是基于可逆转换的,我们可以安全地将其应用于源句和目标句。

相关文章:

  • 智慧景区(园区)数字孪生可视化GIS解决方案
  • pWnOS v2.0
  • 2023年【R2移动式压力容器充装】最新解析及R2移动式压力容器充装模拟考试题
  • 鼎捷受邀出席“中国制造业产品创新数字化国际峰会”,共话工业软件创新发展
  • mysql导入、更新、插入、迁移数据时出现Got a packet bigger than ‘max_allowed_packet’ bytes的解决方法
  • 深度解析IP应用场景API:提升风险控制与反欺诈能力
  • CleanMyMac X2024最新版本mac优化软件好用吗?
  • 外包干了一个月,技术明显进步。。。。。
  • 【Go语言反射reflect】
  • GNSEC 2022年第8届全球下一代软件工程线上峰会-核心PPT资料下载
  • 【FPGA】Verilog:计数器 | 异步计数器 | 同步计数器 | 2位二进制计数器的实现 | 4位十进制计数器的实现
  • 如何学习 Spring ?学习 Spring 前要学习什么?
  • 第九节HarmonyOS 常用基础组件1-Text
  • 多人聊天Java
  • OTSU算法及其Python实现
  • .pyc 想到的一些问题
  • 【comparator, comparable】小总结
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • canvas绘制圆角头像
  • Cumulo 的 ClojureScript 模块已经成型
  • ECMAScript6(0):ES6简明参考手册
  • PermissionScope Swift4 兼容问题
  • storm drpc实例
  • Vue 动态创建 component
  • 警报:线上事故之CountDownLatch的威力
  • 如何设计一个微型分布式架构?
  • 正则学习笔记
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​插件化DPI在商用WIFI中的价值
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • .bat批处理出现中文乱码的情况
  • .cfg\.dat\.mak(持续补充)
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .net Stream篇(六)
  • .Net 垃圾回收机制原理(二)
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • /var/lib/dpkg/lock 锁定问题
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @拔赤:Web前端开发十日谈
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [ 第一章] JavaScript 简史
  • [20150629]简单的加密连接.txt
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [Firefly-Linux] RK3568 pca9555芯片驱动详解
  • [Flutter]WindowsPlatform上运行遇到的问题总结
  • [IE编程] IE 是如何决定Accept-Language 属性的
  • [J2ME]如何替换Google Map静态地图自带的Marker
  • [Latex] \bibitem{} | .bbl 格式参考文献转换与获得
  • [leetcode] 103. 二叉树的锯齿形层次遍历
  • [LeetCode] 148. Sort List 链表排序