摘要:
使用SRILM这个工具编写语言模型工具的问题就是内存不怎么够。。。,内存最多就3G,还在跑另外的一个程序,所以想要一次训练完是不可能的,在http://www-speech.sri.com/projects/srilm/manpages/srilm-faq.7.html给出了一个解决的办法,那就是将大文件拆分成多个小文件,然后再将多个小文件的count合并,完成最终的训练。具体的做法如下: 首先使用split将一个大文件分成最多26*26(使用字母后缀,这是默认的行为)或者是100(使用数字后缀,需要-d参数)个文件,可以将文件按行拆分(使用-l num参数)或者是按大小拆分(使用-bsiz. 阅读全文
摘要:
闲来无事,就想在mac平台下编译Moses,以后没事的时候可以折腾一下。但是编译的过程中发生了很多想不到的问题。Moses依赖于其他几个工具,比如GIZA++,SRILM和XMLRPC等工具包,相比于第一次编译,突然发觉现在的编译过程已经极大的简化了,但是有些网站却没有做相应的更新(http://www.statmt.org/moses_steps.html),但是可以很明显的看出问题,也就不详细解释了。 在编译SRILM这个工具包遇到了一个我觉得很蛋疼的问题,编译错误的提示信息如下:make[2]: [http://www.cnblogs.com/bin/macosx-m64/f... 阅读全文
摘要:
英语单词拼写检查是word提供的一个功能,使用google的时候也可以看到,当你打错字了,会给你提供一个备选。也就是给定一个词c,你应该提供一个候选的词w,这个词w应该是c因为打错一个字而产生的。即表述为argmax p(w|c). 利用贝叶斯定理即转换为 argmax p(c|w)p(w)/p(c) = argmax p(c|w)p(w). 挑选出词w由两个公式来描述,一个是p(w):这是词w的概率,可以称之为语言模型,一个是p(c|w):是词w产生词c的概率,可以称之为错误模型。 p(w):语言模型,用于描述一个词w在整个语言中的分布概率,如果出现多个词则可以称之为n-gram语言模型,. 阅读全文
摘要:
在emacs中我们可以将一个交互式的命令绑定到一个按键序列中。比如C-x C-f就绑定了命令find-file,而一般的字母和数字则绑定到了self-insert命令。使用这一个方式我们就可以做很灵活的绑定,让那些我们经常使用的命令绑定到非常方便的key sequence上面。这种命令绑定是通过key-map数据结构实现的。但是我们知道在emacs之中存在不同的major mode和minor mode,而且不同key-sequence的长度也不相同,那么这些因素对键盘绑定有什么影响呢?1. 存在不同major mode和minor mode对命令绑定的影响 一个很明显的需求就是同样的key. 阅读全文
摘要:
首先需要记住一件事情,那就是计算机中存储的一定是二进制数,是浮点,有符号数,还是无符号数或者是代码完全取决于你如何处理这些二进制,即运算规则。这里只是关心这些二进制数跟文字之间的关系,也就是不同的二进制数如何映射到文字的,或者反过来。 有一个术语用来表示不同的文字和二进制数之间的关系:字符编码。简单的来说字符编码就是把一堆文字映射到一堆数字的标准。这也就是说同样一个... 阅读全文
摘要:
搜索引擎就是运用机器学习、数据挖掘知识的典型啊。简单的来说,搜索引擎就是存储所有的可以访问的静态网页并将它们存储起来,当你查询的时候将那些跟你的要求相关的网页送给你。搜索引擎也经历了一段时间,期间起起伏伏、波澜壮阔,从雅虎的目录式的搜索引擎,再到谷歌的崛起,被墙,然后百度开始NB起来,到现在国内还是有很多家企业进入搜索领域(搜狗、搜搜、360等等)。 从前面的介绍可以看出,建立一个搜索引擎首先需要做的是获取所有的可以访问的网页,这一过程称之为爬取(crawling),相应的程序称之为爬虫(crawler)。然后需要将这些网页存储起来。因为在使用搜索引擎时,我们提供给搜索引擎的是好几个“词... 阅读全文
摘要:
字符串匹配有很多算法,最简单的算法就是从模式P的开头(j=0)和主串S的某个位置开始进行比较(i),如果相等(p[j] == s[i]),则比较模式串的下一个位置和主串的下一个位置(++j;++i),如果不相等(p[j] != s[i]),则要发生回溯,从主串的位置i-j重新开始匹配,这样速度会收到影响( i = i-j+1; j=0 )。 KMP算法的优势即在于避免了回溯,当模式串j和主串i位置的字符不匹配时,查询一个数组next,从模式串位置p[ next[j] ]开始和主串的i位置开始匹配,这样主串就没有回溯,速度也就加快了,那么如何计算next数组呢? 首先对nex... 阅读全文
摘要:
简要的介绍搜索引擎的原理,然后在本机实现了一个较为简单的搜索引擎。主要的任务就是设计一个爬虫,然后整理和存储爬取的网页内容,分析链接,当有用户查询的时候根据按照一定的原则返回相应网址。因为任务就分为以下几个部分,抓取网页,分析网页,存储网页和相关内容,根据查询返回结果。 网页抓取的任务,需要使用到python的urllib2库,用于获取网页,需要注意的是在抓取的时候可能会因为网络... 阅读全文
摘要:
聚类是一种很常见的数据处理方式,为的就是把具有相同类型的数据聚集在一起,再做处理,聚类属于无监督学习算法的一种,没有正确的结果可供检验。 书中介绍了两种聚类的方法,一种是层次聚类,另一种是是k-均值聚类。 层次聚类可以看做是在一个图中找出最小代价树的kruskal算法,每次处理时会将两个相聚最近的不同类聚集在一起,这个过程一直重复直到整个数据集属于一个类,当然也可以等有k个类别的时候就停止聚类操作。初始数据集中的每个数据都属于不同的类别,经过一次操作后两个最接近的数据点会被划分成同一个类别,这个时候就会出现一个问题,这一个类别中包含了多个点,当计算这个类别和其他类别的相似度时该如何计算呢? . 阅读全文
摘要:
第二章的内容主要是介绍推荐系统的基本原理。如果想要搭建一个推荐系统,最基本的组件就是相似性的判定,比如用户的相似性,物品的相似性。从另一个方面来说,相似性可以很简单,也可以很复杂,取决于你所需要的效果,比如百度知道在一个问题的下面都会提供很多相似的问题,这个我觉得也是相似性判定的一部分,恐怕就没有书里讲的那么容易,当然这两个东西所要处理的数据格式也是有很大的差别的,书中的数据都是非常简单的-浮点数之类的,但是百度知道的数据是自然语句,难度不可能在一个数量级。 书中介绍了两个方法,一个是判断两个用户(物品)的欧式距离,算法如下:首先找到两个用户共同评价的事物(比如电影),然后以每一部电影作为一. 阅读全文