NLP--人机交互翻译中的输入提示

2020 年 7 月 14 日 AINLP

本篇文章大概总结下近期做的一个比赛。

场景说明

以en2zh(英文到中文)任务为例子,给定待翻译的英文句子,用户在编辑框键入想要输入的中文词拼音首字母,我们需要根据首字母,提示出要翻译的suggestion词是什么。

比如下图所示(来自官方),待翻译句子input=China mulls change to officials’ welfare system,用户看完后再编辑框键入input=zg,此时,我们模型应当给出suggestion=中国。其余两个建议词这个、整个,虽然拼音首字母也是zg,但是结合输入句子,最高概率的应该是中国这个词

在这里插入图片描述

那么zh2en(中文到英文)任务也是类似的,给定中文句子、只有前几个字母的英文输入词,给出最有可能的英文单词作为suggestion。

数据说明

  • 训练集:由2000w+个平行语料组成的训练集,每个样本格式类似于:

      i love china	我爱中国
  • 验证集:分为两个部分,en2zh 和  zh2en,每个样本格式类似于下:en2zh:

      	en2zh.en:i love china
    typeseq: zg (中文词拼音首字母)
    suggesttion:中国 (模型所要预测的词)

    zh2en:

      	en2zh.en:我爱中国
    typeseq: ch (英文词前缀)
    suggesttion:china (模型所要预测的词)
  • 测试集:同样分为两部分,en2zh 和 zh2en,每个样本格式类似于下:en2zh:

      	en2zh.en:i love china
    typeseq: zg (中文词拼音首字母)

    zh2en:

      	en2zh.en:我爱中国
    typeseq: ch (英文词前缀)

解题思路

在这里插入图片描述

统计规则PMI方法

本赛题,是由source句子和typeseq,预测用户最有可能想键入的词。简单来说,可以根据typeseq确定符合条件的候选集,再根据语义相似度,找到候选集中与source句子语义相似度最高的候选词,作为预测结果。难点在于如何获取两两中英文词之间的语义相似度。

这里我们提供一个假设:如果一对中英文词频繁出现在多对平行语料样本中,那么该中英文词可能在语义上比较接近。

在这里插入图片描述

根据上述计算公式,可以计算得到训练集中,两两中英文词的pmi或norm-pmi值,并将其存为字典。在预测时,首选根据typseq确定符合条件的候选集,然后由pmi词典获取候选集中每个候选词与source句子内所有词pmi或norm-pmi值,可以分别尝试以max、sum、mean的方式获取每个候选词与source句子的匹配程度。取匹配程度最大的候选词作为预测结果。

在这里插入图片描述

几个优化的点

  • 用norm-pmi计算方式获取pmi词典,效果更好
  • 对训练集分块,每块的样本都会计算出一个pmi词典(multi_sub_norm_pmi),在预测时,每个pmi词典都会得出一个结果,投票取最大的作为预测结果,效果更好,而且节省计算资源。
  • 分别尝试以reduce-max、reduce-mean、reduce-sum三种方式计算一个候选词与source句子的匹配程度,与预期以为reduce-max效果最好不同,reduce-sum效果最好。
  • pmi的预测结果可以为下面深度学习模型预测进行兜底,例如在en2zh任务中,模型词表里没有对应候选词,这时可以用pmi预测结果

一些实验记录

在这里插入图片描述

深度学习方法

分类+翻译的多任务训练

在这里插入图片描述

注意的点

  • 模型有两个loss,一个是Encoder端分类loss,一个是Decoder端翻译loss
  • 训练时,从target句子按照一定比例采样部分词作为suggesttion,并且根据这些suggesttion获取词表中与其前缀(typeseq)一致的候选词(中文suggest词根据拼音首字母,英文suggest随机选择前一个字母、前两字母、前三个字母作为前缀)
  • 当采样得到的suggest拥有一样的前缀(typeseq),这摒弃该前缀的分类样本。
  • 在dev和test上预测时,只需要在encoder端找概率最大的候选词作为预测结果即可。

该方案优点

  • 一个平行语料样本,可以带多个分类样本进行训练,大大提高的训练效率
  • 分类和翻译多任务实验效果大幅领先于仅分类任务实验效果,思考了下,可能有以下原因:单纯的分类任务学习仅仅能更新词表上suggest词与其对应候选词位置处的神经元参数,无法更新其他位置的神经元参数,而此时翻译任务正好可以弥补这一缺失,对所有神经元参数进行更新,这两个任务是相辅相成的

grid-beam-search方法

普通的beamsearch无法根据先验知识,限制生成的句子里必 须含有一些约束词,但是Grid Beam Search可以做到,这里可以理解为“受限的beamsearch”。原论文中提出,在每个timesteps生成词时,可以以下面三种 策略生成:

  • Generate:直接在模型词表分布上选词,这个词不是约束 词。
  • Start:生成单独的一个约束词,或者约束短语的第一个 词。
  • Continue:继续生成constraint,是一个短语级别的中间状 态。

grid-beam-search方法比较复杂,这里就不再详述原论文里面内容了,有兴趣可以参考最后面的论文和开源代码链接。

在这里插入图片描述
在这里插入图片描述

以比赛中的en2zh预测任务举例:

source: I l𝑜𝑣𝑒 𝑐ℎ𝑖𝑛𝑎 𝑝𝑒𝑜𝑝𝑙𝑒 typeseq:“zg”

在预测阶段,首先找到词表中拼音首字母为”zg”的候选词,例如有“中国”,”中共 “,”终稿“三个候选词。在Grid Beam Search内初始化三个hypothesis(在一个 beam内) ,每个hypothesis负责生成其中一个候选词(这里没有Continue生成方 式),并且在每个timestep时,所有hypothesis在一起参与top-beamsize-hypothesis的筛 选,看看包含哪个候选词的hypothesis能走到最后,我们认为能走到最后的,其概率 最大的hypothesis所含的候选词最有可能是用户想要得到的翻译词。

本以为这种受限的beamsearch方法比较适用该比赛场景,但是在实际生成时,因为在每 个timestep,所有负责生成各自约束词的hypothesis在一起参与top-beamsizehypothesis的筛选,在半路中,绝大部分的候选词所在的hypothesis都被过滤掉了,走 到最后的hypothesis往往都包含相同的候选词,多样性大大降低,相比分类+翻译的 多任务效果,也只有微小提升。

set-grid-beam-search方法

前面提到grid Beam Search可能使走到最后的beam多样性大大降低,导致效果提 升不明显,思考可能因为在每个timestep,所有负责生成各自约束词的hypothesis 在一起参与筛选和过滤导致的,而负责生成不同约束词hypothesis之间应该是不 可比的,其平均概率大的很大,小的很小,很容易导致一些约束词所在 hypothesis都被过滤掉。一旦负责生成某个约束词的hypothesis被过滤掉,那么在后面就不可能再生成这 个约束词了,这样做貌似有些不太合理。

在此基础上,改进了grid_beam_search,暂且称为set  Grid Beamsearch方法,之前在Grid Beamsearch中,初始化三个 hypothesis ,每个hypothesis 的所得到的beam负责生成一个约 束词,这里我们只初始化一个hypothesis ,这个hypothesis 只 负责生成三个约束词中的一个即可。当某个hypothesis已经包 含一个约束词,那么这个hypothesis只要以generate方式继续 生成到最后即可,而其他hypothesis还是可以生成其他约束 词,多样性得到提高。最后选取平均概率最大的hypothesis所包含的词作为答案即可。实验表明该做法,对分类+翻译多任务效果有一点提升。

这里举两个good case

在这里插入图片描述

上图中第一个case,suggesttion为“联接”,而encoder端的分类器得到的是“连接”,但是set-grid-beam-search方法,生成的概率最大句子所包含的候选词为“联接”,纠正了分类器的结果。第二个case类似,在实际实验中,单模型上set-grid-beam-search方法大约能将分类结果从66.1提升到66.5。

本来以为grid-beam-search与set-grid-beam-search方法能大幅度提升分类+翻译多任务效果,结果只是提升一点而已,很失望,并且这种grid-beam-search的方法预测很慢,验证集上1500个样本,要1个小时以上才能预测完。

还做了其他一些有意思的提升优化,这里就不再详述了。

参考文献

https://arxiv.org/pdf/1704.07138.pdf https://github.com/chrishokamp/constrained_decoding


推荐阅读

这个NLP工具,玩得根本停不下来

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

登录查看更多
0

相关内容

基于改进卷积神经网络的短文本分类模型
专知会员服务
26+阅读 · 2020年7月22日
【论文推荐】文本摘要简述
专知会员服务
69+阅读 · 2020年7月20日
【ICML2020-西电】用于语言生成的递归层次主题引导RNN
专知会员服务
22+阅读 · 2020年6月30日
机器翻译深度学习最新综述
专知会员服务
99+阅读 · 2020年2月20日
哈工大讯飞联合实验室发布中文XLNet预训练模型
哈工大SCIR
13+阅读 · 2019年8月20日
Google怎么利用贝叶斯方法,实现"拼写检查"?
七月在线实验室
6+阅读 · 2019年5月9日
卷积神经网络四种卷积类型
炼数成金订阅号
18+阅读 · 2019年4月16日
赛尔原创 | 文本摘要简述
哈工大SCIR
22+阅读 · 2019年3月25日
【干货】--基于Python的文本情感分类
R语言中文社区
5+阅读 · 2018年1月5日
干货 | 自然语言处理(1)之聊一聊分词原理
机器学习算法与Python学习
5+阅读 · 2017年12月7日
干货 | 一文搞懂极大似然估计
AI100
7+阅读 · 2017年12月3日
基于图片内容的深度学习图片检索(一)
七月在线实验室
20+阅读 · 2017年10月1日
Neural Image Captioning
Arxiv
5+阅读 · 2019年7月2日
Arxiv
6+阅读 · 2018年1月29日
Arxiv
3+阅读 · 2017年12月18日
Arxiv
5+阅读 · 2017年9月8日
VIP会员
相关资讯
哈工大讯飞联合实验室发布中文XLNet预训练模型
哈工大SCIR
13+阅读 · 2019年8月20日
Google怎么利用贝叶斯方法,实现"拼写检查"?
七月在线实验室
6+阅读 · 2019年5月9日
卷积神经网络四种卷积类型
炼数成金订阅号
18+阅读 · 2019年4月16日
赛尔原创 | 文本摘要简述
哈工大SCIR
22+阅读 · 2019年3月25日
【干货】--基于Python的文本情感分类
R语言中文社区
5+阅读 · 2018年1月5日
干货 | 自然语言处理(1)之聊一聊分词原理
机器学习算法与Python学习
5+阅读 · 2017年12月7日
干货 | 一文搞懂极大似然估计
AI100
7+阅读 · 2017年12月3日
基于图片内容的深度学习图片检索(一)
七月在线实验室
20+阅读 · 2017年10月1日
Top
微信扫码咨询专知VIP会员