- TF-IDF算法:(需要大的语料库)
(1)TF是词频,表示词在文本中出现的频次,TF越高,这个词就越重要。
IDF强调的是词的区分能力,统计一个词在文档集的多少个文档中出现,其值越小越好。
加1是防止因为有些新词没在文档集中出现过从而导致分母为0,取对数是为防止浮点数下溢。
(2)根据上面两个值乘积后从大到小排名,取前n个作为关键词。
(3)缺点:只考虑了词的两个统计信息,对文本的利用程度小(比如词在文档的不同位置贡献不一样);生僻字的影响;对出现次数少的重要人名地名等提取效果不佳。
二、TextRank算法:(不用语料库,对单片文档即可分析)
(1)其来源于PageRank算法,是一种网页排名算法,有着两个重要思想:链接数量和链接质量
(2)PageRank是有向无权图,每个网页将自己的分数平均地贡献给每个出链,而TextRank算法是有权图即把平均分配换成了通过计算权重占总权重的比例来分配,权重就是指的两个句子之间的相似度。
(3)TextRank算法是利用局部词汇之间关系(共现窗口)对后续关键词进行排序,直接从文本本身抽取。先设置一个窗口的大小,所有的词都视作词节点相邻节点,依据连接节点的多少来给每个节点赋予一个初始权重,根据某个词所连接所有词汇的权重重新计算该词汇的权重,再传递下去直到达到一种平衡,最后根据权重排名取出关键词。
注:在应用到关键词提取时,因为不是每一个词都和文档中的所有词都有链接,所以提出窗口(窗口中的词是有链接的)。
(4)相比于高频词提取的不同在于TextRank算法利用了局部词汇之间关系,再通过更新权重来进行的,还是依赖于词频,结果并不一定比TF-IDF算法好。
三、主题模型:
主题模型认为词与文档之间没有直接的联系,中间应该有个维度将他们串联起来,主题模型称这个维度为主题。一篇文章的每个词都是以一定概率选择某个主题,并从这个主题中以一定概率选择某个词语而组成的。用公式表示为:
从公式来看, 可以通过文档中该词语出现的次数除以文档中词语总数计算出来。求出右边两个分布可以通过LSA/LSI算法或LDA算法。
1. LSA/LSI算法
(1)为潜在语义分析,利用SVD降维的方法将词项和文本映射到一个新的空间。LSA/LSI使用SVD来对单词-文档矩阵进行分解将原来的数据映射到语义空间内,在单词-文档矩阵中不相似的两个文档,可能在语义空间内比较相似。
(2)输入n个文档,利用词袋模型表示成向量在拼接起来构成词-文档矩阵,通过SVD得到[mxr][rxr][rxn]三个矩阵形式,再进行降维得到[mxk][kxk][kxn]即近似SVD结果每个词和每个文档都可以表示为k个主题构成的空间中的一个点,(最大特征值对应的特征向量方向上包含更多的信息量,所以可以舍弃后面小的值)根据降维后的矩阵利用余弦相似度计算每个词和文档的相似度,从而获取关键词。
[mxr]:是对词进行分类的结果,行代表每一词,列代表语义相近的词类,矩阵里面的值表示词与词类之间的相关性。
[rxr]:指词的类和文章主题之间的关系,
[rxn]:对文本进行分类,行代表每一个主题,列代表一个文本,其值表示的是这篇文章在不同主题中的相关性。
(3)优点:一次奇异值分解就可以得到主题模型,同时解决词义的问题
缺点:SVD计算复杂度太高;主题值的选取对结果的影响非常大,很难选择合适的k值。
2. LDA算法
(1)LDA是一种无监督机器学习方法,可以用来识别文档集中潜藏的主题信息,通过贝叶斯学派的方法对分布信息进行拟合。只输入文档集以及指定主题的数量 k 即可。根据词的共现信息的分析,拟合出词-文档-主题的分布,进而将词、文本映射到一个语义空间中。
把各个主题在文档中出现的概率称为主题分布,各个词在主题下出现的概率称为词分布,都是多项式分布。
(2)
对于任一篇文档 m,从 中随机抽取一次,产生一个多项分布
。对于任一主题 k,从
中随机抽取一次,产生一个多项分布
。其中
是分布的超参数,是一个 k维向量,k表示主题的数量,
是分布的超参数,是一个V维向量,V表示词汇表里所有词的个数。对于文档集的统计也可以得到每篇文章中主题的多项式分布和每个主题对应词的多项式分布,通过先验的Dirichlet分布和观测数据的得到的多项式分布,可以得到一组Dirichlet-multi共轭,以此来推断文档中主题的后验分布和主题中词的后验分布。
(3)LDA训练过程
输入:m篇文档出现的所有词汇,每篇文档中各个词汇出现的频率,设定topic的个数(依据经验),迭代次数
输出:训练得到每个词与那些主题相关,即(t,w)样本对, topic-word共现频率矩阵就是训练得到的LDA模型
(4)LDA预测过程
输入:该文档中各个词汇出现的频率
输出:该文档的主题分布(该文档与那些主题相关以及相关度);利用训练得到的(t,w)相关度矩阵和该文档的单词不断更新该文档的主题分布。
然后可以根据分布信息计算文档与词的相似性,然后取出关键词。