写给新手看的机器学习原理--基于机器翻译
欢迎转载,转载请注明出处: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)。我们在训练模型之前得到若干组数据,如果数据量充足,我们就把它分为这三个集合。其中,训练集用于训练模型,验证集用于决定什么时候停止训练模型,测试集用于评价模型好坏。这三个集合的交集为空。
写给新手看的机器学习原理--基于机器翻译相关推荐
- 我学习 Java 的历程和体会(写给新手看,欢迎老司机批评和建议,持续更新中)
我学习 Java 的历程和体会(写给新手看,欢迎老司机批评和建议,持续更新中) 最初写这篇文章的时候,是在今年的 9 月中旬.今天,我想再写写这将近两个多月以来的感受. 在今年的 10 月我来到北京求 ...
- 写给大家看的机器学习书【Part3】直观易懂的感知机学习算法PLA
作者:徐晗曦 原文:写给大家看的机器学习书(第三篇) 本次转载已获得作者授权,尊重原创,若需转载请联系作者本人. 相关文章: 写给大家看的机器学习书[Part1]什么是机器学习?机器学到的到底是什么? ...
- 写给大家看的机器学习书【Part1】什么是机器学习?机器学到的到底是什么?
写给大家看的机器学习书[Part1]什么是机器学习?机器学到的到底是什么? 机器学习 深度学习 神经网络 人工智能 阅读1390
- 学习 Java 的历程和体会『写给新手看,欢迎老司机批评和建议』
转载出处:https://blog.csdn.net/lw_power/article/details/52502698#commentBox Java 基础只能说熟悉,还达不到熟练,更谈不上精通.框 ...
- idea启动springboot卡_写给新手看的 Spring Boot 入门学习指南
什么是 Spring Boot ? 解释一下:Spring Boot 可以构建一切.Spring Boot 设计之初就是为了最少的配置,最快的速度来启动和运行 Spring 项目.Spring Boo ...
- idea构建springboot项目右边没有maven_写给新手看的 Spring Boot 入门学习指南
什么是 Spring Boot ? 解释一下:Spring Boot 可以构建一切.Spring Boot 设计之初就是为了最少的配置,最快的速度来启动和运行 Spring 项目.Spring Boo ...
- 写给新手看的 Spring Boot 入门学习指南
什么是 Spring Boot ? 解释一下:Spring Boot 可以构建一切.Spring Boot 设计之初就是为了最少的配置,最快的速度来启动和运行 Spring 项目.Spring Boo ...
- 机器学习Tensorflow基于MNIST数据集识别自己的手写数字(读取和测试自己的模型)
机器学习Tensorflow基于MNIST数据集识别自己的手写数字(读取和测试自己的模型)
- 前端编程提高之旅(五)----写给大家看的css书
自实习也有几个月的时间了,以爱奇艺实习为敲门砖.进入了眼下这家公司.假设说当初能进爱奇艺是暂时袭击DIV+CSS的话,眼下在这家公司体验到.不论什么技术都必须悉知原理,这样才干做到庖丁解牛.做一 ...
- 新手科普 | 探索机器学习模型,保障账户安全
账号安全往往是企业首先需要保障安全的数据之一,薅羊毛.账号泄露,背后的原因都是账号保护的缺失. 本文转自FreeBuf.COM 但如何保障账户安全往往是企业需要面临的难题,而随着攻击者的手段越来越高超 ...
最新文章
- python 作用域 前缀_TENSORFLOW变量作用域(VARIABLE SCOPE)
- P1681 最大正方形 Iand II
- 采用 opencv surf 算子进行特征匹配
- 展开收起功能实现_Windows10自带的7大隐藏功能,个个都实用!
- Tomcat Filter 源码分析
- 一款炫酷Loading动画--载入成功
- python语言打印菱形_Python 实现打印单词的菱形字符图案
- 【Cinemachine智能相机教程】VirtualCamera(三):Aim属性
- 计算机工作过程中 电压应稳定在,计算机组装与维修前三章测评卷.doc
- 数据库加主键sql_SQL数据库设计:选择主键
- MySQL授权root
- HASP/Sentinel加密狗的服务器地址设置
- 当当网上书店头部和尾部——JS源码
- 2018年国考行测错题集(省级)
- 爬虫BeautifulSoup库学习-小猪短租网
- deepin firewall
- Rhythmbox 乱码问题
- 通俗易懂的哈希算法讲解
- 一篇文章从了解到入门shell
- Linux分区磁盘空间扩展、扩容、合并