【无标题】Datawhale AI夏令营笔记:术语词典干预机器翻译挑战赛——Baseline

引言

在Datawhale AI夏令营中,我参与了“术语词典干预机器翻译挑战赛”。这项挑战要求我们利用给定的术语词典来提高机器翻译的准确性。为了完成这一任务,我选择使用基于Encoder-Decoder架构的seq2seq模型作为baseline,并引入BLEU评分函数来评估模型的翻译质量。

二、模型架构

2.1 编码器(Encoder)\n编码器负责理解输入的英语句子,embedding把每个英语单词变成一串数字,rnn(GRU)用来理解整个句子的含义,dropout帮助模型不要\"死记硬背\",而是真正理解句子。\n\nclass Encoder(nn.Module):\n    def __init__(self, input_dim, emb_dim, hid_dim, n_layers, dropout):\n        super().__init__()\n        self.embedding = nn.Embedding(input_dim, emb_dim)\n        self.rnn = nn.GRU(emb_dim, hid_dim, n_layers, dropout=dropout, batch_first=True)\n        self.dropout = nn.Dropout(dropout)\n​\n    def forward(self, src):\n        embedded = self.dropout(self.embedding(src))\n        outputs, hidden = self.rnn(embedded)\n        return outputs, hidden\n2.2 解码器(Decoder)\n解码器负责生成中文翻译。在解码器中它也使用embedding来处理中文字,rnn(GRU)帮助它记住之前翻译的内容,fc_out用来预测下一个中文字。\n\nclass Decoder(nn.Module):\n    def __init__(self, output_dim, emb_dim, hid_dim, n_layers, dropout):\n        super().__init__()\n        self.output_dim = output_dim\n        self.embedding = nn.Embedding(output_dim, emb_dim)\n        self.rnn = nn.GRU(emb_dim, hid_dim, n_layers, dropout=dropout, batch_first=True)\n        self.fc_out = nn.Linear(hid_dim, output_dim)\n        self.dropout = nn.Dropout(dropout)\n​\n    def forward(self, input, hidden):\n        input = input.unsqueeze(1)\n        embedded = self.dropout(self.embedding(input))\n        output, hidden = self.rnn(embedded, hidden)\n        prediction = self.fc_out(output.squeeze(1))\n        return prediction, hidden\n2.3 Seq2Seq模型\n这是把编码器和解码器组合在一起的完整翻译模型。这个模型用编码器理解英语句子,用解码器一个字一个字地生成中文翻译,有时候(由teacher_forcing_ratio控制)会使用正确的中文来指导翻译,这叫\"教师强制\"。\n\nclass Seq2Seq(nn.Module):\n    def __init__(self, encoder, decoder, device):\n        super().__init__()\n        self.encoder = encoder\n        self.decoder = decoder\n        self.device = device\n​\n    def forward(self, src, trg, teacher_forcing_ratio=0.5):\n        batch_size = src.shape[0]\n        trg_len = trg.shape[1]\n        trg_vocab_size = self.decoder.output_dim\n​\n        outputs = torch.zeros(batch_size, trg_len, trg_vocab_size).to(self.device)\n        \n        _, hidden = self.encoder(src)\n        \n        input = trg[:, 0]\n        \n        for t in range(1, trg_len):\n            output, hidden = self.decoder(input, hidden)\n            outputs[:, t] = output\n            teacher_force = random.random() \u003C teacher_forcing_ratio\n            top1 = output.argmax(1)\n            input = trg[:, t] if teacher_force else top1\n​\n        return outputs\n三、BLEU评分函数\nBLEU(Bilingual Evaluation Understudy)是一种广泛使用的机器翻译评估方法。它通过比较机器翻译的结果与人工翻译的参考文本来评估翻译质量。\n\nfrom sacrebleu.metrics import BLEU\n​\ndef evaluate_bleu(model, dataset, src_file, ref_file, terminology, device):\n    model.eval()\n    src_sentences = load_sentences(src_file)\n    ref_sentences = load_sentences(ref_file)\n    \n    translated_sentences = []\n    for src in src_sentences:\n        translated = translate_sentence(src, model, dataset, terminology, device)\n        translated_sentences.append(translated)\n    \n    bleu = BLEU()\n    score = bleu.corpus_score(translated_sentences, [ref_sentences])\n    \n    return score

BLEU(Bilingual Evaluation Understudy)是一种常用的自动评价指标,用于衡量计算机生成的翻译与一组参考译文之间的相似度。这个指标特别关注 n-grams(连续的n个词)的精确匹配,可以被认为是对翻译准确性和流利度的一种统计估计。计算BLEU分数时,首先会统计生成文本中n-grams的频率,然后将这些频率与参考文本中的n-grams进行比较。如果生成的翻译中包含的n-grams与参考译文中出现的相同,则认为是匹配的。最终的BLEU分数是一个介于0到1之间的数值,其中1表示与参考译文完美匹配,而0则表示完全没有匹配。\n\nBLEU-4 特别指的是在计算时考虑四元组(即连续四个词)的匹配情况。\n\nBLEU 评估指标的特点:\n\n优点:计算速度快、计算成本低、容易理解、与具体语言无关、和人类给的评估高度相关。\n\n缺点:不考虑语言表达(语法)上的准确性;测评精度会受常用词的干扰;短译句的测评精度有时会较高;没有考虑同义词或相似表达的情况,可能会导致合理翻译被否定。\n\n除了翻译之外,BLEU评分结合深度学习方法可应用于其他的语言生成问题,例如:语言生成、图片标题生成、文本摘要、语音识别。

三、学习心得
理论与实践相结合:通过参与实践活动和挑战赛,将理论知识应用于实际问题解决中,加深对理论知识的理解。
持续学习与跟踪:持续跟踪最新的机器学习技术和研究进展,不断更新自己的知识体系。
团队协作与交流:与来自不同背景的学员交流学习心得和经验,共同解决问题并提升技能。
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值