阅读大概需要11分钟
跟随小博主,每天进步一丢丢
引文
人们是如何从大量文本资料中便捷得浏览和获取信息?答案你肯定会说通过关键字。仔细想想,我们人类是怎么提取关键词?我们从小就接触语言,语法,当听到或者看到一句话时,我们大脑自动会对这句话按规则分词(小学是不是做过断句的训练),还记得语文老师讲过,一句话中主语(名词),谓语(动词),宾语(名词)通常就是重点,这样我们大脑从小就会根据词性和语法对句中词进行打标签,训练分类器,随着我们接触到的语料越来越多,分类器也越来越准确(如果你是从事语言学的,那你的分类器就更准)。仅仅通过词性和语法,会在长文本中出现一个问题,因为一篇文章中会出现很多主语,谓语,宾语,不可能所有的这些词都是关键词,这样我们大脑是怎么处理的,如果我们对一篇文章的背景和主题很熟悉的话,我们会很准确得从一篇文章中提取关键词,但当我们接触一篇比较陌生的文章,我们往往很难准确提取关键词。
算法
上面其实对应的是机器学习的两种方法:监督学习和无监督学习。监督学习的关键字提取方法是通过分类的方式进行,通过打标签,训练分类器,从而实现关键字提取,但缺点就是需要大批量的标注数据,人工成本太高。相对于监督学习,无监督学习的方法就无需标注数据,常用的无监督关键词提取算法包括:TF-IDF算法、TextRank算法和主题模型算法(LDA、LSA、LSI),现重点介绍LDA算法,其他算法后续再讲.
我不喜欢讲大多学术上比较难懂的词,下面我将通俗得去讲解LDA算法原理。通常我们可以定义主题是一种关键词集合,如果一篇文章出现这些关键词,我们可以直接判断这篇文章属于某种主题。但这种定义主题会有个弊端,比如一篇文章出现了一个球星的名字,那么这篇文章的主题就是体育。可能你马上反驳说不一定,文章确实有球星的名字,但是里面全部在讲球星的性丑闻,和篮球没半毛钱关系,此时主题是娱乐还差不多。所以一个词不能硬性地扣一个主题的帽子,如果说一篇文章出现了某个球星的名字,我们只能说有很大概率他属于体育的主题,但也有小概率属于娱乐的主题。同一个词,在不同的主题背景下,它出现的概率是不同的。LDA认为文章都是用基本的词汇组合而成, LDA通过词汇的概率分布来反映主题!
由此可以定义LDA的生成过程:
1.对每篇文档,在主题分布中抽取一个主题
2.对抽到的主题所对应的单词分布中随机抽取一个单词
3.重复上述过程直至遍历整篇文档中的每个单词
4.经过以上三步,就可以看一下两个分布的乘积,是否符合给定文章的分布,以此来调整。
LDA的训练就是根据现有的数据集生成 文档-主题分布矩阵 和 主题-词分布矩阵。
所以LDA的核心,其实就是这个公式
P(词 | 文档)=P(词 | 主题)P(主题 | 文档)
实练
上面说了这么多,下面我们通过代码去实现吧,Gensim中有实现好的训练方法,直接调用即可。Gensim是一款开源的第三方Python工具包,用于从原始的非结构化文本中,无监督地学习到文本隐层的主题向量表达。
训练一个关键词提取算法需要以下步骤:
(很多博客上都是通过jieba分词,但我个人认为结巴分词不是很准确,如果分词都不准确,那怎么提取准确的关键词呢),个人采用pyhanlp的感知机算法进行分词,这是通过多次工作实践,感觉分词最准确的一种算法。
a.导入相关库
b.定义好停用词表的加载方法
c.定义一个分词方法
d.定义干扰词过滤方法:根据分词结果对干扰词进行过滤
e.加载数据集,对数据集中的数据分词和过滤干扰词,每个文本最后变成一个非干扰词组成的词语列表
f.训练LDA模型
g.调用主函数,对目标文本进行关键词提取
LDA模型结果:
总体来说结果还算准确。
以上就是本篇文章【【NLP基础】NLP关键字提取技术之LDA算法原理与实践】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/news/157.html 资讯 企业新闻 行情 企业黄页 同类资讯 首页 网站地图 返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多