欢迎转载,转载请注明出处:http://blog.csdn.net/lucygill

本文基于个人理解,欢迎讨论交流。

最近在看斯坦福大学机器翻译的开源代码,琢磨着把代码稍微改动一下,做成中文到英文的翻译。参考了业界大牛的不少论文,大致明白了机器翻译实现的步骤:

1.将源文件转化成词向量(像中文这种词之间没有明显符号的,要先进行分词)

转化的方法,最简单的是生成one-hot词向量。具体来说就是,如果文件中包含n个不同的词,那么每个词的词向量都是n维的,而且只有一个元素的值为1,其余元素都为0. 这样做虽然简单,但需要的空间极大,而且无法反映出词与词之间的联系。我们想得到的词向量是这样的:舅舅-男人=舅妈,或者,王子+女人=公主。斯坦福大学的论文中是这样做的:先生成one-hot词向量,再通过一个变换矩阵将其压缩成低维向量。

注意,机器翻译是有监督学习,所以词向量的转化涉及将源语言和目标语言的文件进行词向量转化。通过转化,我们就把语言与语言之间的转换,等价变为向量与向量之间的转换。为什么要这样做呢?因为电脑本身是没有语言的概念的,它只认一串串数字。事实上,语言在电脑上的存在,也是通过ascii,Unicode等编码实现的。但我们不能直接用这些编码进行机器翻译,因为它们的规律性弱,也没法很好地展示词之间的关系,存储方式也比较复杂。机器翻译也算是一种数学模型,而数学模型的精髓就是简化问题,忽略不必要的条件。(数学系妹子的职业病==)

2.学习转换规则(训练模型)

现在,我们将不同语言都转化为向量了。那么,我们怎样把两组向量联系起来呢?学过线性代数的人都知道,向量的线性变换可以把一组向量映射成另一组向量。而机器翻译也像是一种映射。(但它实际上不是映射,比如,中文到英文的变换,可能涉及到冠词、介词等词语,而这些词语有时候不会体现在中文中)那么,我们能否找到一种变换(不一定是线性的),将源语言的句子映射成目标语言的句子?(一个句子包含若干词向量,所以这个问题被我们转化成了将一组向量映射成另一组向量)

若干年前,这种转换规则还是人为设定的。但这样的方法,对人的要求极高(不仅要精通至少两种语言,还要精通编程),而且准确率也不高。后来,基于统计的机器翻译给这项工作减少了人为成分。但是,有很多参数仍然需要人为设定。所以,有人把当时的程序员戏称为“调参狗”。(统计机器翻译我不太了解,后面看过之后再进行补充)

深度学习的出现,给机器翻译注入了新的血液。所谓深度学习,就是用多层神经网络构建一个系统,只需赋给它一些初始值(通常都设为0)和训练数据,它就可以自行修改调整参数。也就是说,深度学习是一种生成算法的工具,输入大量数据,它就能根据数据提供的信息自行调参,使模型符合人的要求。在机器翻译中,深度学习能帮助人类找到一种复合的变换,这种变换将源语言句子转换为目标语言句子。

我们需要做的,就是赋予机器一个学习的框架,可以简单理解为学习流程。机器只能调参,不能改变运算符号。所以我们的框架至关重要。

现在比较流行的学习方法是RNN(Recurrent Neural Network,循环神经网络)。因为RNN的学习过程符合语言的习惯--它能记录上下文信息。而LSTM(Long Short Term Memory,长短期记忆)是RNN的一种特例,它能自行决定什么时候遗忘过去的信息,什么时候记住当前的信息。关于RNN和LSTM的具体信息,可以参照这篇文章:http://blog.csdn.net/LucyGill/article/details/65627047、

3.模型的选择

就如第2步所说,我们可以通过数据学习转换方法。那么,这种学习到什么时候结束呢?我们一定要让自己的模型与训练数据完全匹配吗?不是的。这里存在“过拟合”的问题。通俗来讲,“过拟合”就是,你的模型与训练数据匹配度很高,你输入训练数据里的任意一句中文,模型都能输出一句与之匹配的英文。但是,你输入训练数据之外的一句中文,输出结果却不尽如人意。这是怎么回事?因为,你的模型太匹配训练数据了,以致失去了普适性。举一个例子:如果我用很多苹果的图片来训练模型,这些苹果多数都是红色的,但我测试模型时,输入了一个黄苹果,模型可能会错误地认为这不是苹果。

那么我们什么时候停止训练呢?事实上,我们并不是不间断地训练模型。每过一段时间,我们都要拿验证集中的几组数据来验证模型的好坏。还是上面苹果的例子,训练了一段时间后,我把一个黄苹果的照片输入模型,模型判定其不是苹果,而我的数据中却记录着,这是苹果,所以模型判定错误,本次的训练使得模型“过拟合”了。然而,我们在上一个时间点测试的时候,机器还能识别出黄苹果。所以,我们舍弃本次的训练结果,保留上一次训练的参数,并停止训练。

4.模型的测试

停止训练后,我们的模型就完成了学习。现在,我们想要测试一下模型的精确度。这次,我们既不用训练集中的数据,也不用验证集中的数据。我们用一个新的集合来测试,这个集合就叫做测试集。测试集不会对模型产生影响,它只能评估模型。将测试集中的数据输入模型,将模型的输出与数据中存储的标准输出进行对比,最终通过一定的规则对模型进行评判。

至此,机器翻译就完成了。

5.其他需要注意的地方

你可能已经注意到了,我分别在2、3、4步提到了三个集合:训练集(training set),验证集(validation set),测试集(testing set)。我们在训练模型之前得到若干组数据,如果数据量充足,我们就把它分为这三个集合。其中,训练集用于训练模型,验证集用于决定什么时候停止训练模型,测试集用于评价模型好坏。这三个集合的交集为空。

写给新手看的机器学习原理--基于机器翻译相关推荐

  1. 我学习 Java 的历程和体会(写给新手看,欢迎老司机批评和建议,持续更新中)

    我学习 Java 的历程和体会(写给新手看,欢迎老司机批评和建议,持续更新中) 最初写这篇文章的时候,是在今年的 9 月中旬.今天,我想再写写这将近两个多月以来的感受. 在今年的 10 月我来到北京求 ...

  2. 写给大家看的机器学习书【Part3】直观易懂的感知机学习算法PLA

    作者:徐晗曦 原文:写给大家看的机器学习书(第三篇) 本次转载已获得作者授权,尊重原创,若需转载请联系作者本人. 相关文章: 写给大家看的机器学习书[Part1]什么是机器学习?机器学到的到底是什么? ...

  3. 写给大家看的机器学习书【Part1】什么是机器学习?机器学到的到底是什么?

     写给大家看的机器学习书[Part1]什么是机器学习?机器学到的到底是什么? 机器学习 深度学习 神经网络 人工智能 阅读1390

  4. 学习 Java 的历程和体会『写给新手看,欢迎老司机批评和建议』

    转载出处:https://blog.csdn.net/lw_power/article/details/52502698#commentBox Java 基础只能说熟悉,还达不到熟练,更谈不上精通.框 ...

  5. idea启动springboot卡_写给新手看的 Spring Boot 入门学习指南

    什么是 Spring Boot ? 解释一下:Spring Boot 可以构建一切.Spring Boot 设计之初就是为了最少的配置,最快的速度来启动和运行 Spring 项目.Spring Boo ...

  6. idea构建springboot项目右边没有maven_写给新手看的 Spring Boot 入门学习指南

    什么是 Spring Boot ? 解释一下:Spring Boot 可以构建一切.Spring Boot 设计之初就是为了最少的配置,最快的速度来启动和运行 Spring 项目.Spring Boo ...

  7. 写给新手看的 Spring Boot 入门学习指南

    什么是 Spring Boot ? 解释一下:Spring Boot 可以构建一切.Spring Boot 设计之初就是为了最少的配置,最快的速度来启动和运行 Spring 项目.Spring Boo ...

  8. 机器学习Tensorflow基于MNIST数据集识别自己的手写数字(读取和测试自己的模型)

    机器学习Tensorflow基于MNIST数据集识别自己的手写数字(读取和测试自己的模型)

  9. 前端编程提高之旅(五)----写给大家看的css书

       自实习也有几个月的时间了,以爱奇艺实习为敲门砖.进入了眼下这家公司.假设说当初能进爱奇艺是暂时袭击DIV+CSS的话,眼下在这家公司体验到.不论什么技术都必须悉知原理,这样才干做到庖丁解牛.做一 ...

  10. 新手科普 | 探索机器学习模型,保障账户安全

    账号安全往往是企业首先需要保障安全的数据之一,薅羊毛.账号泄露,背后的原因都是账号保护的缺失. 本文转自FreeBuf.COM 但如何保障账户安全往往是企业需要面临的难题,而随着攻击者的手段越来越高超 ...

最新文章

  1. python 作用域 前缀_TENSORFLOW变量作用域(VARIABLE SCOPE)
  2. P1681 最大正方形 Iand II
  3. 采用 opencv surf 算子进行特征匹配
  4. 展开收起功能实现_Windows10自带的7大隐藏功能,个个都实用!
  5. Tomcat Filter 源码分析
  6. 一款炫酷Loading动画--载入成功
  7. python语言打印菱形_Python 实现打印单词的菱形字符图案
  8. 【Cinemachine智能相机教程】VirtualCamera(三):Aim属性
  9. 计算机工作过程中 电压应稳定在,计算机组装与维修前三章测评卷.doc
  10. 数据库加主键sql_SQL数据库设计:选择主键
  11. MySQL授权root
  12. HASP/Sentinel加密狗的服务器地址设置
  13. 当当网上书店头部和尾部——JS源码
  14. 2018年国考行测错题集(省级)
  15. 爬虫BeautifulSoup库学习-小猪短租网
  16. deepin firewall
  17. Rhythmbox 乱码问题
  18. 通俗易懂的哈希算法讲解
  19. 一篇文章从了解到入门shell
  20. Linux分区磁盘空间扩展、扩容、合并

热门文章

  1. 逐点比较直线插补和圆弧插补
  2. 编译原理自顶向下语法分析
  3. logisitic 回归 +极大似然法 + 梯度下降法 (迭代优化)
  4. 用于热水器行业气密性检测的五款快速密封接头
  5. 暑期作息时间表模板_小学生暑假作息时间表模板
  6. 创建TPL自定义模板
  7. android 全局dns解析,Android中DNS解析
  8. 毕业论文答辩开题报告PPT模板
  9. 2021最新(ISC)2 CISSP 考试费用列表
  10. petalinux - 修改fsbl