机器学习为何重要|通过计算一个句子的音节总数证明给你看

 对信息时代的大多数人来说,如果想通过电脑编程解决一些难题,你只有两种方法:查找式和启发式。

现在,便利的机器学习算法的出现提供了新的有力选择,我们可以用它来解决一些以前无法解决的问题。

我们用这个看似简单实则困难的例子,计算一个句子里面音节的总数来说明机器学习的强大。

◆ ◆ ◆

计算一个句子里面音节的总数

解决这个难题的一个方法是从现有的列表里去寻找答案。似乎我们可以通过简单地查字典,找出每一个词的音节数,然后把所有的词加起来就得到了总数。

这个非常直接的方法在实践中很快就失效了。

因为实际的句子中包含出乎意料之多的没有收录在普通字典里的单词,如外来词,姓名,拼写错误,流行文化词,俚语等。字典通常不包含一个单词的所有变异体,也不包含所有单词的音节数。如果一个句子中即使只有一个单词我们找不到,使用这种查找的办法就解决不了问题。因此,这种方法非常局限,很多情况下不能使用。

作为替代,多数软件使用启发式的或者称作“聪明的算法”。这种方法汇总一套用某种编程语言写下来的算法,或一系列的指令让计算机去遵从。只要你对问题了解得足够好,能够写下来这些算法,启发式算法则能非常有力地解决问题并能得到很好的结果。不幸的是,它们很脆弱——计算机只会照着指令执行。

如果你的问题有许多特例,你必须不断地在算法里面增加特殊的逻辑,当问题变得越来越微妙时,比如检测自然语言(examing nature langguage)——启发式就会失败,而且超过一定阈值,则没有办法再改进。超过某个点,启发式在一堆相互矛盾的特例中纠结成一团乱麻,顾此而失彼。


◆ ◆ ◆

而机器学习会采用一个完全不同的方法

程序员不再需要写算法,只要选择一个机器学习的模型应用于训练数据就可以了。基于反馈机制,模型会进行自调节来得到理想的结果。

一个好的模型可以学习到数据中潜在的规则,即便这些规则是复杂的,例如我们自己写程序时,因为没有完全理解问题而写出的不够明确的规则,但只要反馈机制是扎实可靠的,模型就可以对自身进行动态的调整,并可学习在这个系统建立最初培训中没有学到的数据中的变化。如果能够建立一个比较好地查出实际句子中音节数的机器学习模型,并且定期的给它反馈,我们就可以期望随着时间的推移,它变得越来越来好– 即使有从不同来源的新词加入。

启发式和机器学习有相反的特征。

一个启发式可以很快地提供非常好的结果,但是当数据量增加、或一些之前没有料到的特例出现时,它的质量就会变得不可靠。想要提高启发式则需要不断地修改它的代码,而且会逐渐变得复杂和昂贵。一旦错过了某些时机,想要改良启发式也会变得几乎不可能。相比之下,虽然一个机器学习模型在最初的阶段需要更多的功夫来创造和训练,但是之后它就可以通过学习来不断提高它自己。这种提高是通过从更多的数据中学习得来的,而不是通过重新设计算法。最终,这个机器学习模型可以通过学习处理一些连我们都无法清晰表述的微小的规则。这是一个从根本上与我们所了解的查找或启发式方法都不同的功能,它帮我们创造出的软件解决方案是之前通过查找和启发法所无法达到的。

机器学习本身并不是一个新的方法,但它的使用已经开始大爆发。这种爆发是通过多种因素综合作用驱使的,如提高了的训练方法、逐渐增长的电脑的计算能力、巨大型“大数据”数据集中启发式显露出的缺陷、以及机器学习工具包的可用性的不断改善。

机器学习的真正价值在于它为我们开辟了一个全新的技术能力,可以很好地解决基于查找或是启发式无法处理的棘手问题。我们现在可以重新审视以前觉得遥不可及的挑战,并期待着有更多的新一代产品能够应用这个强大的新方法。

原文发布时间为:2016-08-19

时间: 2024-08-04 01:54:51

机器学习为何重要|通过计算一个句子的音节总数证明给你看的相关文章

Python计算一个文件里字数的方法

 本文实例讲述了Python计算一个文件里字数的方法.分享给大家供大家参考.具体如下: 这段程序从所给文件中找出字数来. ? 1 2 3 4 5 6 7 8 9 10 11 12 from string import * def countWords(s): words=split(s) return len(words) #returns the number of words filename=open("welcome.txt",'r') #open an file in rea

php计算一个文件大小的方法

 这篇文章主要介绍了php计算一个文件大小的方法,涉及php操作文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php计算一个文件大小的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <?php function dirSize($directoty){ $dir_size=0; if($dir_handle=@opendir($directoty))

用C语言计算一个单链表的长度,单链表的定义如下:要求使用递归,不得出现循环。

问题描述 用C语言计算一个单链表的长度,单链表的定义如下:要求使用递归,不得出现循环. 用C语言计算一个单链表的长度,单链表的定义如下:要求使用递归,不得出现循环. 解决方案 如果链表有环,永远算不出来 只能假定,这个链表不是环形链表,也没有环 简单事情用递归做是低效率的,即便学习递归,也是不必要的 递推, 可以用递归实现 也可以用迭代实现 前者无循环,后者有 解决方案二: int listLength(List *l) { if(l->next!=NULL) { l=l->next; ret

js 工作日 php-PHP计算一个时间段中的工作日天数

问题描述 PHP计算一个时间段中的工作日天数 目前我有一个js版本的,我想做成PHP版本的,希望大家能帮忙.结果就是一个时间段中,计算工作日天数,排除法定节假日,周末,还要加上调休.js的代码我先贴上来,请大家帮忙.因菜鸟,目前没有C币,sorry! <script src=""/Public/Js/jquery.js"" type=""text/javascript""></script><sc

Android sqlite 计算一个int字段的总和,怎么在主页显示

问题描述 Android sqlite 计算一个int字段的总和,怎么在主页显示 5C SQLite数据库有个表叫account ,里面有一列的名字是balance,类型是int的.如何在dao里面写一个方法统计balance这一字段全部值的总和,并在mainactivity显示出来图片是写在dao方法里面的,dao包里面包括了数据库的增删改功能 解决方案 http://blog.csdn.net/cqupt_chen/article/details/8980669 解决方案二: 你上面的sql

java-求问各位大神,if语句里面的一个句子看不懂了- -我的天,谢谢大神们了

问题描述 求问各位大神,if语句里面的一个句子看不懂了- -我的天,谢谢大神们了 public class UserBiz { /** * 用户登录 * @param uname 参数的定义,类型+变量名,被称为形参 * @param pwd */ public User login(String uname,String pwd) throws SQLException,ClassNotFoundException,NameNullException,Exception{ User user

c++-C++使用while for do...while分别计算一个数字的阶乘

问题描述 C++使用while for do...while分别计算一个数字的阶乘 C++使用while for do...while分别计算一个数字的阶乘 要求编写三个程序,用三种循环分别实现 解决方案 while: #include<iostream> using namespace std; int main() { unsigned long long result=1,n; cin>>n; while(n)result*=n--; cout<<result&l

【编程错误求指教】计算一个数字前的所有数字中1出现的次数

问题描述 [编程错误求指教]计算一个数字前的所有数字中1出现的次数 function deal(m) { var n = 0, i = 0,h = 0; for (; n < m + 1; n++) { i = n; while (i > 0) { if ((i % 10) == 1) { h++; }; i /= 10; }; }; alert(h); }; deal(11); 计算11之前包括11数字中1出现的次数 错在哪里 11的结果是3 谢谢 解决方案 直接用正则表达式就可以了. va

php计算一个文件大小的方法_php技巧

本文实例讲述了php计算一个文件大小的方法.分享给大家供大家参考.具体如下: <?php function dirSize($directoty){ $dir_size=0; if($dir_handle=@opendir($directoty)) { while($filename=readdir($dir_handle)){ $subFile=$directoty.DIRECTORY_SEPARATOR.$filename; if($filename=='.'||$filename=='..