实现数据字典翻译_Transformer单卡实现中-英文翻译器

Transformer 最近可以算是大放异彩了,最开始是用来做nlp 的,主要是通过注意力机制学习跨邻域之间的关系,取得了非常好的效果。这两年已经将这个思想应用到了视觉等其他方面。尤其是从ICLR2021 的 OpenAI DALL·E 以及AN IMAGE IS WORTH 16X16 WORDS 等文章的惊艳效果,势必会带来一波图像、文字相结合的高潮。

为了跟踪一下热点,也是为了后面想通过transformers 来实现视觉相关的一些任务,所以利用元旦假期学习一下这篇开山之作,希望到后续工作中借鉴,同时也希望对像我一样没有接触过翻译的初学者能够有一点用处。

对于transformer的介绍,有一篇博客写的非常详细[jalammar](The Illustrated Transformer),但是“纸上得来终觉浅”,我想还是跑跑代码更能加深理解,所以这篇文章会基于一个中-英 文翻译任务来帮助理解。因为我没做过翻译相关的项目,理解可能比较浅显 或者有错误,还希望大佬们能帮忙指正。

中-英翻译

从头开始,应该怎么实现这个任务?当然是找开源项目。

[官方项目 tensor-to-tensor](tensorflow/tensor2tensor) 这个项目覆盖比较全,包含了其他一系列论文的实现。

[pytorch-attention](jadore801120/attention-is-all-you-need-pytorch) 基于pytorch的项目,内容相对少,比较适合初学者,我就是基于这个项目来实现的.

  1. 环境
```
GPU -NVIDIA 1080ti >=1张
ubuntu 16.0

python 3.4+
pytorch 1.3.1
torchtext 0.4.0
spacy 2.2.2+

2.找数据

我们需要找中-英 对照的数据,可以去爬双语著作,但是要处理很麻烦,我在这里[WMT2019](ACL 2019 fourth Conference on Machine Translation) 找到了不同语言之间的翻译数据,其中**news-commentary-v14.en-zh.tsv** 这个是中-英的对照数据,也可以换成其他数据。我们下载之后有30多万行中-英一一对应的句子。

 lines = [line.rstrip() for line in open(txt_dir)]
 for i in range(len(lines)):
        value = re.split(r't', lines[i])
        if len(value)<2:
            continue
        en = value[0]
        zh =value[1]

我将数据随机之后再分成 train、val、test,分别占90%、5%、5%。

3. 预处理:

英文是每个单词是一个词,但是中文则会有一些组合词,比如说“开心”,开、心、开心有不同的意思。所以中文应该是需要分词的,怎么实现分词的我不是很清楚,可以参考下[分词算法总结](中文分词算法总结_mandagod的博客-CSDN博客_中文分词算法)。我找到了一个别人训练好的模型,可以帮助我实现分词,这个网站 [spacy](spaCy 101: Everything you need to know · spaCy Usage Documentation)有十几种语言的训练好的模型,我找到中文**zh_core_web_sm** (这是小模型、还有中模型、大模型,我想我用小的就够了,毕竟资源有限) 和英文的模型**en_core_web_sm**,分别下载下来,然后对上面得到的数据每一句中英文分别进行分词。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值