当前位置:   article > 正文

Datawhale AI 夏令营(NLP方向)2024 2期 笔记1

Datawhale AI 夏令营(NLP方向)2024 2期 笔记1

一、了解机器翻译

机器翻译(Machine Translation,简称MT)是自然语言处理领域的一个重要分支,其目标是将一种语言的文本自动转换为另一种语言的文本。它使用特定的算法和模型,目的是实现在不同语言之间的最佳语义映射,即语义的准确表达。

一个简单的例子:当我们输入“hello world”到任意翻译软件,并将其翻译为中文,将会得到“你好世界”。这就一个是最简单的机器翻译示例。

在上述例子中,“hello world”的语言—英语,即为源语言,“你好世界”的语言—汉语,即为目标语言。

二、翻译模型

机器翻译的核心是翻译模型,机器翻译发展至今,总体上经历了三大阶段:基于规则,基于统计,基于神经网络。这些模型的目的都是找到一种最佳语义映射以实现不同语言之间的转换,但是他们的工作原理和侧重点都有所不同。

1. 基于规则的机器翻译(RBMT)

早期的机器翻译系统主要采用基于规则的方法,即利用语言学家编写的语法规则和词典进行翻译。这种方法需要对源语言和目标语言的语法和词汇有深入的理解,但其灵活性和适应性较差,难以处理复杂的语言结构和多义词问题。

基于规则的机器翻译是机器翻译任务的第一套解决方案,它基于“每一种语义在不同的语言当中都存在与其相对应的符号”这一假设。对于某种语言中的大多数单词而言,通常都能够在另一种语言当中找到表达相同含义的对应的单词。在这类方法当中,翻译过程通常被看作一个源语言的词替换过程。

之所以被称为“基于规则的方法”,是因为同一种语义在不同的语言当中通常会以不同的词序去表达,词替换过程相对应地需要两种语言的句法规则作为指导。源语言中的每一个单词需要被放置在目标语言中相对应的位置。基于规则的机器翻译方法的理论非常简洁清晰,但在实践中的性能却不尽如人意。这是由于选择与给定源语言相适配的句法规则在计算上非常低效。同时,为了应对多样的语言现象,语言学家们设计了规模庞大的句法规则。

但是,这些规则很难被有效地组织,甚至会出现不同规则相互矛盾的情况。基于规则的方法最严重的缺陷在于其缺乏翻译过程中对上下文信息的建模,这使得基于规则的翻译模型的鲁棒性不佳。 

以下使用Java模拟一个简化的RBMT模型。

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. public class RBMT {
  4. private Map<String, String> dictionary = new HashMap<>();
  5. public RBMT() {
  6. // 构建一个简单的英汉词典
  7. dictionary.put("hello", "你好");
  8. dictionary.put("world", "世界");
  9. dictionary.put("goodbye", "再见");
  10. dictionary.put("I", "我");
  11. dictionary.put("am", "是");
  12. dictionary.put("a", "一个");
  13. dictionary.put("student", "学生");
  14. dictionary.put("teacher", "老师");
  15. dictionary.put("book", "书");
  16. dictionary.put("and", "和");
  17. }
  18. public String translate(String sentence) {
  19. StringBuilder translation = new StringBuilder();
  20. String[] words = sentence.split("\\s+"); // 分割句子为单词数组
  21. for (String word : words) {
  22. // 如果词典中没有,则保留原词
  23. translation.append(dictionary.getOrDefault(word, word)).append(" ");
  24. }
  25. return translation.toString().trim(); // 移除末尾空格
  26. }
  27. public static void main(String[] args) {
  28. RBMT rbmt = new RBMT();
  29. String originalSentence = "Hello world. I am a student and I have a book.";
  30. String translatedSentence = rbmt.translate(originalSentence);
  31. System.out.println("Original: " + originalSentence);
  32. System.out.println("Translated: " + translatedSentence);
  33. }
  34. }

2. 基于统计的机器翻译(SMT)

随着计算机性能的提升和大规模平行语料库的出现,统计机器翻译开始兴起。这种方法通过分析大量双语文本,自动学习源语言和目标语言之间的对应关系,从而实现翻译。统计机器翻译在处理多义词和语言变异方面表现出更好的效果,但由于其依赖于大量训练数据,对于资源匮乏的语言支持不足。

与基于规则的机器翻译方法不同,统计机器翻译完全从数据驱动的角度建模机器翻译任务。具体来说,通过对双语语料库的统计找到表达相同含义的单词或短语。给定一个源语言句子,统计机器翻译首先将其分割成若干个子句,接下来每个部分可以被目标语言的单词或短语替代。

统计机器翻译中最主流的方法是基于词的统计机器翻译(Word-based MT)以及基于短语的统计机器翻译(Phrase-based SMT),总体上来看包含预处理、句子对齐、词对齐、短语抽取、短语特征准备、语言模型训练等步骤。

以下使用Java模拟一个简化的SMT翻译概率估计模型。

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. public class SMT {
  4. private Map<String, Integer> sourceCounts = new HashMap<>();
  5. private Map<String, Map<String, Integer>> translationCounts = new HashMap<>();
  6. public void train(String[][] corpus) {
  7. for (String[] pair : corpus) {
  8. String sourceWord = pair[0];
  9. String targetWord = pair[1];
  10. sourceCounts.put(sourceWord, sourceCounts.getOrDefault(sourceWord, 0) + 1);
  11. Map<String, Integer> targetCounts = translationCounts.computeIfAbsent(sourceWord, k -> new HashMap<>());
  12. targetCounts.put(targetWord, targetCounts.getOrDefault(targetWord, 0) + 1);
  13. }
  14. }
  15. public double getTranslationProbability(String source, String target) {
  16. int totalSourceCount = sourceCounts.getOrDefault(source, 0);
  17. Map<String, Integer> targetCounts = translationCounts.getOrDefault(source, new HashMap<>());
  18. int targetCount = targetCounts.getOrDefault(target, 0);
  19. return totalSourceCount > 0 ? (double) targetCount / totalSourceCount : 0;
  20. }
  21. public static void main(String[] args) {
  22. SMT smt = new SMT();
  23. // 平行语料库,每个数组元素是一个源语言-目标语言的单词对
  24. String[][] corpus = {
  25. {"hello", "你好"},
  26. {"world", "世界"},
  27. {"hello", "你好"},
  28. {"goodbye", "再见"}
  29. };
  30. smt.train(corpus);
  31. // 输出翻译概率
  32. System.out.println("Probability of 'hello' -> '你好': " + smt.getTranslationProbability("hello", "你好"));
  33. System.out.println("Probability of 'world' -> '世界': " + smt.getTranslationProbability("world", "世界"));
  34. System.out.println("Probability of 'goodbye' -> '再见': " + smt.getTranslationProbability("goodbye", "再见"));
  35. }
  36. }

3. 基于神经网络机器翻译(NMT)

神经网络方法在机器翻译任务上的应用可以追溯到上世纪八九十年代。但受限于当时的计算资源和数据规模的限制,神经网络方法的性能差强人意,故而其发展停滞了很多年。

近年来,深度学习技术的快速发展推动了神经网络机器翻译(Neural Machine Translation,简称NMT)的兴起。NMT使用深度神经网络模型,如长短期记忆网络(LSTM)和 Transformer,能够自动学习源语言和目标语言之间的复杂映射关系,无需人工设计特征或规则。NMT在翻译质量、速度和适应性方面取得了显著进步,成为当前机器翻译领域的主流方法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/862376
推荐阅读
相关标签
  

闽ICP备14008679号