本篇文章大概总结下近期做的一个比赛。
以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 (英文词前缀)
本赛题,是由source句子和typeseq,预测用户最有可能想键入的词。简单来说,可以根据typeseq确定符合条件的候选集,再根据语义相似度,找到候选集中与source句子语义相似度最高的候选词,作为预测结果。难点在于如何获取两两中英文词之间的语义相似度。
这里我们提供一个假设:如果一对中英文词频繁出现在多对平行语料样本中,那么该中英文词可能在语义上比较接近。
根据上述计算公式,可以计算得到训练集中,两两中英文词的pmi或norm-pmi值,并将其存为字典。在预测时,首选根据typseq确定符合条件的候选集,然后由pmi词典获取候选集中每个候选词与source句子内所有词pmi或norm-pmi值,可以分别尝试以max、sum、mean的方式获取每个候选词与source句子的匹配程度。取匹配程度最大的候选词作为预测结果。
普通的beamsearch无法根据先验知识,限制生成的句子里必 须含有一些约束词,但是Grid Beam Search可以做到,这里可以理解为“受限的beamsearch”。原论文中提出,在每个timesteps生成词时,可以以下面三种 策略生成:
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往往都包含相同的候选词,多样性大大降低,相比分类+翻译的 多任务效果,也只有微小提升。
前面提到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
推荐阅读
完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)
模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法
征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)
文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。
阅读至此了,分享、点赞、在看三选一吧🙏