Brains


Algorithm、Machine Learning、Search、cloud computing
on NLP, LDA主题模型的实现及思考

LDA 的实现

参考LDA数学八卦和GibbsLDA++实现的LDA模型,以及自己对这个模型的理解 LDA的Gibbs抽样 在上一篇文章中提到了Gibbs抽样的推导最终结果,根据这个推导公式可以在计算机上模拟文档集的生成过程。Gibbs抽样的推导结果如下: 实现思路: 1:先随机为每个单词赋予一个主题 2:根据抽样公式计算当前单词生成每个主题的概率 3:利用掷骰子算法生成下一个主题 4:一直迭代下去,最后计算文档——主题、主题——单词的概率分布 代码放在了Github - LDA上了 数据结构的设计 根据抽样公式公式可知,需要保存的东西有 1:每个主题对应单词的个数 2:每个单词对应某个主题的单词个数 3:每篇文章单词的个数 4:每篇文章的每个主题对应的单词总数 用Python定义的数据结构如下: # 单词到ID的映射表 self.word_map = {} # ID到单词的映射 self.id2word = [] # 保存每篇文章的词数 self.doc_word_num = [] # 保存每篇文章 self.doc
Read More
on NLP, LDA主题模型的理解

Latent Dirichlet Allocation

LDA在机器学习领域是一个应用很广泛的主题模型,这几天一直在学习这个模型,现在很勉强的对这个模型有了整体的把握,并且用Python简要的实现了一下,打算把自己对LDA的理解暂且记录一下,以后继续完善~ 主题模型 LDA是一个主题模型,关于主题模型的解释有个很通俗的例子: 第一个是:“乔布斯离我们而去了。” 第二个是:“苹果价格会不会降?” 我们一眼就可以看出这两句是有关联的,第一句里面有了“乔布斯”,我们会很自然的把“苹果”理解为苹果公司的产品,它们属于了同一个主题:苹果公司。 而像我之前那种计算关联度的时候,即文档之间重复的词语越多越可能相似,是无法达到这个效果的。文档之间重复的词语越多越可能相似,这一点在实际中并不尽然。很多时候相关程度取决于背后的语义联系——主题描述,而非表面的词语重复。 LDA的与上述方法不同之处在于:上述方法直接处理单词与文章的关系,而LDA过程在单词与文章之间加了一层主题,即文档——主题,主题——单词的路径计算。 LDA的概要 很多关于介绍LDA的文章大多以学术、理科学生的思维出发的,即用数学公式的严谨性来推导整个LDA的过程。我看了好久才理清了这个流程,因为它涉及到的数学推导很多,很容易陷入公式推导的怪圈里,无法对整个LDA的思想有个整体把握。。。 JULY博主说LDA分为五个部分: 一个函数:gamma函数 四个分布:二项分布、多项分布、
Read More
on 朴素贝叶斯分类器的实现, NLP

朴素贝叶斯分类器

因为工程实践里需要实现语义分析的功能,关于如何语义分析,我也是一头雾水。最近花了点时间,依据贝叶斯原理,针对工程实践,写了一个分类器,效果还阔以~~ 哈哈 写在前头 在研一上学期的时候,学院里分配了一个工程实践项目,我所在的4人组选了基于语义的搜索引擎这个课题,项目主页:https://github.com/willstudy/SearchEngine。目前项目进展到语义分析模块了,我就查阅了相关资料,然后根据项目的数据集,定制了一个贝叶斯分类器。 贝叶斯定理 老是说我第一眼看到这个定理的时候,完全没有任何印象。其实这个定理最早出现在本科所学的概率论中的,好惭愧,竟然被我忘光了。。。 贝叶斯定理主要是:当知道A发生的情况下,B发生的概率* P( B | A) 时, 求 B发生的条件下,A发生的概率 P( A | B ) *,其公式为: 这个公式在生活很有用,我们在不知不觉中可能就用到了它。比如说,在街上看到一个黑种人,我们很自然的联想到,他可能来自非洲。在得出判断的过程中,
Read More