Datawhale AI夏令营 Task01笔记

此篇博客分为两部分,第一部分是对机器翻译的了解,第二部分则是对第一个打卡的解析。

机器翻译

1.基于规则的机器翻译

        该方法依赖于语言学家制定的语法规则和词典进行翻译,基于“语义在不同语言中有对应符号”的假设,将翻译简化为词替换过程。然而,这种方法灵活性差,难以应对复杂语言结构和多义词,且需深入理解两种语言的语法和词汇。尽管理论清晰,但实践中因句法规则选择低效、规则规模庞大且难以有效组织(甚至相互矛盾)、缺乏上下文建模,导致性能不佳和鲁棒性低。

        由于代码方面的不足,这里使用一篇由AI生成的代码

        java代码:

import java.util.HashMap;  
import java.util.Map;  
  
public class SimpleRuleBasedMachineTranslation {  
  
    // 假设我们有一个简单的英文到法文的单词映射  
    private static final Map<String, String> wordTranslations = new HashMap<>();  
  
    static {  
        wordTranslations.put("hello", "bonjour");  
        wordTranslations.put("world", "monde");  
        wordTranslations.put("goodbye", "au revoir");  
        // 这里可以添加更多的单词映射  
    }  
  
    // 简单的翻译方法,只处理单词级别的替换  
    public static String translateSentence(String sentence) {  
        // 分割句子为单词数组  
        String[] words = sentence.split(" ");  
        StringBuilder translatedSentence = new StringBuilder();  
  
        for (String word : words) {  
            // 查找并替换单词,如果找不到则保留原单词  
            String translation = wordTranslations.getOrDefault(word.toLowerCase(), word);  
            translatedSentence.append(translation).append(" ");  
        }  
  
        // 移除末尾的空格(如果有的话)  
        if (translatedSentence.length() > 0 && translatedSentence.charAt(translatedSentence.length() - 1) == ' ') {  
            translatedSentence.deleteCharAt(translatedSentence.length() - 1);  
        }  
  
        return translatedSentence.toString();  
    }  
  
    public static void main(String[] args) {  
        String originalSentence = "Hello world goodbye";  
        String translatedSentence = translateSentence(originalSentence);  
        System.out.println("Original: " + originalSentence);  
        System.out.println("Translated: " + translatedSentence);  
    }  
}

2.基于统计的机器翻译

        随着计算机性能的提升和大规模平行语料库的可用性增加,统计机器翻译得以发展。它通过分析大量双语文本,自动学习两种语言间的对应关系,进行翻译。在处理多义词和语言变异方面,统计机器翻译表现出色。然而,该方法高度依赖大量训练数据,导致对资源匮乏语言的支持有限。

        与基于规则的翻译方法不同,统计机器翻译完全基于数据驱动,通过统计双语语料库中的单词或短语对应关系来实现翻译。在处理翻译任务时,它首先分割源语言句子为多个部分,然后为每个部分寻找目标语言中的对应项进行替换。

        统计机器翻译的主流方法包括基于词的翻译和基于短语的翻译,这些方法通常涉及多个处理步骤,如预处理、句子和词对齐、短语抽取、短语特征准备以及语言模型训练等,以确保翻译过程的准确性和效率。

代码:

import java.util.HashMap;  
import java.util.Map;  
import java.util.ArrayList;  
import java.util.List;  
  
public class SimplePhraseBasedSMT {  
  
    // 假设的短语对(源语言到目标语言)  
    private static final Map<String, List<String>> phrasePairs = new HashMap<>();  
  
    static {  
        // 初始化短语对,实际应用中这些对会从语料库中提取  
        List<String> translations = new ArrayList<>();  
        translations.add("bonjour le monde");  
        phrasePairs.put("hello world", translations);  
  
        translations = new ArrayList<>();  
        translations.add("au revoir");  
        phrasePairs.put("goodbye", translations);  
  
        // 可以添加更多的短语对  
    }  
  
    // 简单的翻译函数,查找并返回匹配的翻译,如果没有找到则返回null  
    public static List<String> translatePhrase(String sourcePhrase) {  
        return phrasePairs.getOrDefault(sourcePhrase, null);  
    }  
  
    // 简单的句子翻译函数,将句子分割为短语并翻译(这里只处理简单的空格分割)  
    public static List<String> translateSentence(String sourceSentence) {  
        List<String> translatedSentence = new ArrayList<>();  
        String[] phrases = sourceSentence.split(" ");  
        for (String phrase : phrases) {  
            List<String> translations = translatePhrase(phrase);  
            if (translations != null) {  
                translatedSentence.addAll(translations);  
            } else {  
                // 如果短语没有翻译,可以保留原文或做其他处理  
                translatedSentence.add(phrase);  
            }  
        }  
        return translatedSentence;  
    }  
  
    public static void main(String[] args) {  
        String originalSentence = "hello world goodbye";  
        List<String> translatedSentence = translateSentence(originalSentence);  
        System.out.println("Original: " + originalSentence);  
        System.out.println("Translated: " + String.join(" ", translatedSentence));  
    }  
}

3.基于神经网络的机器翻译

        神经网络在机器翻译领域的应用历史可追溯至上世纪八九十年代,但当时由于计算资源有限且数据规模较小,其性能未能达到令人满意的程度,导致发展陷入停滞。

        然而,近年来随着深度学习技术的飞跃式发展,神经网络机器翻译(NMT)迎来了新的春天。NMT利用深度神经网络模型,特别是长短期记忆网络(LSTM)和Transformer等先进架构,实现了对源语言和目标语言之间复杂映射关系的自动学习,摆脱了传统方法对人工设计特征和规则的依赖。这一转变在翻译质量、处理速度和系统适应性等方面带来了显著提升,使得NMT迅速成为机器翻译领域的主流技术,推动了整个行业的进步与发展。

        这里我们简要说一下Transfoemer:Transformer的核心思想是完全基于自注意力机制(self-attention mechanism)来处理输入序列。传统的序列模型如循环神经网络(RNN)在处理长距离依赖时容易面临梯度消失或梯度爆炸的问题,而Transformer通过自注意力机制解决了这一问题。自注意力机制允许模型在处理序列时,能够同时关注到序列中的所有位置,并根据序列内部不同位置的相关性自动学习每个位置的权重。

Task01

        首先跑了一下baseline,其实一开始只是跟着教程做,不知道其中的原理,后面知道各个文件的作用。dataset的包中包含着训练集、开发集、测试集的数据。

        然后运行程序,不是特别看的懂程序,这里我们按照运行的先后顺序来讲解

        1.定义数据集类

        2.生成Encoder类、Seq2seq类、Decider类

        3.新增术语词典加载部分

        4.新增def train

        5.可以对模型进行训练

        6.在开发集上进行模型评价

        7.新增def evaluate_bleu

        8.一个主函数,可进行赋值

        9.在测试集上进行推理

        10.翻译完成

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值