分类目录归档:语言模型

中英文维基百科语料上的Word2Vec实验

最近试了一下Word2Vec, GloVe 以及对应的python版本 gensim word2vecpython-glove,就有心在一个更大规模的语料上测试一下,自然而然维基百科的语料进入了视线。维基百科官方提供了一个很好的维基百科数据源:https://dumps.wikimedia.org,可以方便的下载多种语言多种格式的维基百科数据。此前通过gensim的玩过英文的维基百科语料并训练LSI,LDA模型来计算两个文档的相似度,所以想看看gensim有没有提供一种简便的方式来处理维基百科数据,训练word2vec模型,用于计算词语之间的语义相似度。感谢Google,在gensim的google group下,找到了一个很长的讨论帖:training word2vec on full Wikipedia ,这个帖子基本上把如何使用gensim在维基百科语料上训练word2vec模型的问题说清楚了,甚至参与讨论的gensim的作者Radim Řehůřek博士还在新的gensim版本里加了一点修正,而对于我来说,所做的工作就是做一下验证而已。虽然github上有一个wiki2vec的项目也是做得这个事,不过我更喜欢用python gensim的方式解决问题。

关于word2vec,这方面无论中英文的参考资料相当的多,英文方面既可以看官方推荐的论文,也可以看gensim作者Radim Řehůřek博士写得一些文章。而中文方面,推荐 @licstar的《Deep Learning in NLP (一)词向量和语言模型》,有道技术沙龙的《Deep Learning实战之word2vec》,@飞林沙 的《word2vec的学习思路》, falao_beiliu 的《深度学习word2vec笔记之基础篇》和《深度学习word2vec笔记之算法篇》等。
继续阅读

概率语言模型及其变形系列-PLSA及EM算法

本系列博文介绍常见概率语言模型及其变形模型,主要总结PLSA、LDA及LDA的变形模型及参数Inference方法。初步计划内容如下

第一篇:PLSA及EM算法

第二篇:LDA及Gibbs Samping

第三篇:LDA变形模型-Twitter LDA,TimeUserLDA,ATM,Labeled-LDA,MaxEnt-LDA等

第四篇:基于变形LDA的paper分类总结

第五篇:LDA Gibbs Sampling 的JAVA实现

第一篇 PLSA及EM算法

[Update 2012/12/21 为了解决部分朋友反映的网页图片无法显示的问题,更新PDF版本

下载地址 PLSA及EM算法-yangliuy]

前言:本文主要介绍PLSA及EM算法,首先给出LSA(隐性语义分析)的早期方法SVD,然后引入基于概率的PLSA模型,其参数学习采用EM算法。接着我们分析如何运用EM算法估计一个简单的mixture unigram 语言模型和混合高斯模型GMM的参数,最后总结EM算法的一般形式及运用关键点。对于改进PLSA,引入hyperparameter的LDA模型及其Gibbs Sampling参数估计方法放在本系列后面的文章LDA及Gibbs Samping介绍。
继续阅读

概率语言模型及其变形系列-LDA及Gibbs Sampling

本系列博文介绍常见概率语言模型及其变形模型,主要总结PLSA、LDA及LDA的变形模型及参数Inference方法。初步计划内容如下

第一篇:PLSA及EM算法

第二篇:LDA及Gibbs Samping

第三篇:LDA变形模型-Twitter LDA,TimeUserLDA,ATM,Labeled-LDA,MaxEnt-LDA等

第四篇:基于变形LDA的paper分类总结

第五篇:LDA Gibbs Sampling 的JAVA实现

第二篇 LDA及Gibbs Sampling

[Update 2012/12/21 为了解决部分朋友反映的网页图片无法显示的问题,更新PDF版本

下载地址 LDA及Gibbs Sampling-yangliuy]

1 LDA概要

LDA是由Blei,Ng, Jordan 2002年发表于JMLR的概率语言模型,应用到文本建模范畴,就是对文本进行“隐性语义分析”(LSA),目的是要以无指导学习的方法从文本中发现隐含的语义维度-即“Topic”或者“Concept”。隐性语义分析的实质是要利用文本中词项(term)的共现特征来发现文本的Topic结构,这种方法不需要任何关于文本的背景知识。文本的隐性语义表示可以对“一词多义”和“一义多词”的语言现象进行建模,这使得搜索引擎系统得到的搜索结果与用户的query在语义层次上match,而不是仅仅只是在词汇层次上出现交集。
继续阅读

微软:Web N-gram Services

  微软研究院的官方网站上近期发布了一篇文章:“Microsoft Web N-gram Services",大意是邀请整个社区使用其提供的"Web N-gram services",这个服务旨在通过基于云的存储平台,推动网络搜索,自然语言处理,语音技术等相关领域,在研究现实世界的大规模网络数据时,利用该服务所提供动态数据对项目中的常规数据进行补充更新,进而有所发现和创新。 继续阅读

Beautiful Data-统计语言模型的应用三:分词8

  对于一个包含n个字符的单词来说,利用语言模型进行分词的前提是首先枚举出所有的候选切分,而segment函数中:
  candidates = ( [first] + segment( rem ) for first, rem in splits( text ) )
的作用正是如此,它包含了递归调用,因此能枚举出所有的候选切分。那么,这个函数的时间复杂度是多少呢?一个包含n个字符的字符串有2^(n-1)种不同的分词方案(在字符之间有n-1个位置,每一个位置既可以作为单词边界也可以不作为边界),因此segment函数的时间复杂度为O(2^n),难怪之前的测试当字符串比较长时就跑不出结果了! 继续阅读

安装Srilm的一点新变化

  读者Fanlc昨天在《Ubuntu 64位系统下SRILM的配置详解》下留言:“为什么我下载到的1.5.10版本,没有test文件夹呢?编译之后也没有……这怎么测试”。我手头没有Srilm的1.5.10版本,于是下载了一个看看,发现主目录下的确没有test文件夹,对比了一下1.5.9版本的Srilm目录,发现这是一点新变化。 继续阅读

Beautiful Data-统计语言模型的应用三:分词5

  上一节我们已经解读了Pdist类中的__init__函数,这一节重点关注一下Python类中的__call__函数。首先简单的回顾一下上一节提到的一段话:缺省的情况,对于未知的单词,其概率均为1/N,但是对于每一个实例,Pdist均提供一个函数重载这个缺省值。为了避免过长 的单词拥有过高的概率,我们从概率10/N出发,对于候选单词的每一个字母都除以10。 继续阅读

Beautiful Data-统计语言模型的应用三:分词4

  对于Pw函数,这里稍微多做一点说。首先我们从一元语言模型的文件里读取单词及其计数,如果一个单词在语料库中出现,它的概率就是Count(word)/N,这里N是语料库的单词数目的规模。事实上,相对于使用完整的1千3百万单词(词型)的一元语言模型,Peter Norvig大牛对这个一元语言模型进行了简化:(a) 创建了一个更通用的词汇表,并且其中的单词是大小写不敏感(不区分)的,故“the”,”The”以及“THE”的计数是加在一起作为“the”的计数的;(b)只有由字母(letter)组合的单词才被计入其中,而对于其他包含数字或者标点的“单词”则被过滤,故“+170.002”以及“can’t”都不会被计入;(c)只列出其中最常用的1百万单词中的前1/3,也就是333333个单词。 继续阅读