日志

基于词向量的文本分类推断

之前的文章中介绍过提取文本标签特征(关键词)的几种算法TF-IDFTextRankTWE, 提取到标签特征后,我们可以进一步推断文本的内容分类。本文主要介绍通过词向量模型进行内容分类的一般思路。

提取文本标签特征

假设有以下一段文本:

2016/17赛季欧冠决赛在威尔士卡迪夫千年球场打响,最终尤文图斯以1-4不敌皇家马德里,遗憾错失冠军。赛后,尤文门将布冯表示对结果非常失望,因为尤文已经做了所有能做的事情。

通过关键词提取算法我们提取到以下标签:
#欧冠#决赛#尤文图斯#皇家马德里#布冯#门将#球场#冠军

假设我们有一个关于体育的分类体系:
分类体系

图:分类体系
  • 一级分类:体育
  • 二级分类:篮球(关联标签:NBA,CBA,篮球,篮板球,助攻,盖帽,FIBA,姚明,乔丹,三双…)
  • 二级分类:足球(关联标签:世界杯,亚冠,欧冠,中超,足球,英超,西甲,梅西,里皮,马拉多纳,门将,广州恒大,曼联…)

分类推断

通过词向量模型(Word2Vec)我们可以计算两个词之间的相似度(余弦距离):

Similarity(tagA, tagB) = cos(tagA_Vec, tagB_Vec)

因此,计算文本与分类的相似度实际上就是计算文本的标签与各个分类的关联标签的相似度。
我们发现上面这段文本与足球的相似度大于与篮球的相似度:

Dist(doc_tags, soccer_tags) > Dist(doc_tags, basketball_tags)

所以推断它是关于足球的内容,再进一步把它归类到体育这个一级分类。

转载请注明出处:

© http://hejunhao.me

日志

基于 TWE 模型的关键词提取

在之前的两篇文章中分别介绍了两种常见的关键词提取算法:TF-IDFTextRank。实际上不管是 TF-IDF 还是 TextRank,它们都没有考虑文本的语义,也就是文本的内容意义。为了进一步提升效果,我们引入主题模型(LDA)和词向量模型(word2vec)也就是TWE算法。

TWE (Topical Word Embedding)

主题模型

LDA

图:主题向量模型
  • 在主题模型中每个主题实际上是一系列代表该主题的词的分布 ,例如:上图主题 Topic#1 包含的主题词分布主要有 “红包”、“微信”、“支付宝”、“玩法”等,文字大小代表该词的概率分布差异,可以推断 Topic#1 是一个关于新年红包活动的主题。

词向量模型

word2vec

图:词向量模型
  • 在词向量模型中每个词都有自己的坐标,关联度越高的词相互的距离越近。例如:“梅西” 和 “足球” 的距离比 “奥巴马” 与 “足球” 的距离要近得多,所以 “梅西” 与 “足球” 的关联度相比 “奥巴马” 更高。

基于 TWE 提取关键词

  1. 通过主题模型我们可以知道一段文本的主题分布:P(topic | doc)
  2. 结合词向量和主题向量,我们可以通过余弦函数计算两者的距离:cos(word_vec, topic_vec)
  3. 通过计算词向量与该文本所有关联主题的主题向量的余弦相似度,最终得到词与文本的语义关联度:
Sim\displaystyle\text{(word, doc)}=\sum_{k=1}^K \cos(\text{word\_vec, topic\_vec}_{_k}) \times P(\text{topic}_{_k} \mid \text{doc})

算法比较

假设有以下一段文本:
文本
分别对该文本采用 TF-IDFTextRank 以及 TWE 算法提取关键词,结果如下:
算法对比

效果评价

  1. TF-IDF 更倾向于高频词。
  2. TextRank 综合考虑文本结构和词频,但它致命的问题在于,头尾的信息由于只有单边的入度,容易被抛弃掉,例如本例中的核心词 “pagerank”。
  3. TWE 更强调语义相关性,实际的提取效果也优于前面两种方式。

论文参考

转载请注明出处:

© http://hejunhao.me

日志

NLP 关键词提取算法之 TextRank

对文本提取关键词,除了经典的 TF-IDF 算法,还有另一种常用的算法 — TextRank

TextRank 介绍

TextRank 是一种基于图的排序算法,它的基本思想来自于著名的 Google PageRank.

PageRank via @Wikipedia

图:PageRank via @Wikipedia

PageRank 的基本思想

  • 一个网页的入链越多,它就越重要。
  • 如果一个网页被越重要的网页所指向,它也越重要。

TextRank 算法简释

下图是通过 TextRank 进行关键词提取的一个简单例子
例子

图:通过 TextRank 提取文本关键词

通过 TextRank 进行关键词提取的主要步骤

  1. 对文本进行分词,并去掉停用词以及非目标词性词汇。
  2. 通过一个固定长度的滑动窗口在分词文本上滑动,每个窗口内的词根据共现关系构建一条边,最终形成一个图。
  3. 对图进行 PageRank,实际上就是投票和迭代的过程。
  4. 选出权重最高的 TopK 个词。

算法总结

  • TextRank 算法一定程度上考虑了文本中词与词之间的关系,也就是文本结构,在实际应用中它的效果一般会比 TF-IDF 好,当然它的计算复杂度也比 TF-IDF 高得多。
  • TextRank 算法更擅长处理长文本,对短文本的效果并不理想,主要因为短文本的词汇信息较弱,构建的图并不理想。
  • TextRank 算法仍然倾向于选择出现较为频繁的词作为关键词。
转载请注明出处:

© http://hejunhao.me

日志

NLP 关键词提取算法之 TF-IDF

TF-IDF 是处理 NLP 问题时经常使用的经典算法,常用于对文本进行关键词的提取。

TF-IDF 介绍

计算公式

TF-IDF 的计算非常简单


TF-IDF = TF(\text{文章词频}) * IDF(\text{逆文档频率})

概念解释

TF: 指某个词在一段文本中出现的词频


TF = \dfrac{\text{某个词在文章中出现的次数}}{\text{文章总词数}}

IDF: 指某个词在所有文本(对应语境所在的训练语料,例如:科学领域、体育领域)中的区分度,它认为越少出现的词区分度越高,相应的 IDF 值也越高。


IDF = \log\dfrac{(\text{训练语料的总文档数+1})}{(\text{出现该词的文档数+1})}

分母 “+1” 是为了防止分母为零,同时相应地分子 “+1” 以防止 IDF 为负数。

算法总结

经验

从计算公式可知,TF-IDF 的准确性非常依赖 IDF 模型的质量。同一个词在不同领域对应的区分度(IDF)也不同甚至差别巨大,例如 “冠军” 在体育领域的语料中出现的次数远远大于在政治领域的语料中所出现的次数,这意味着在后者的语境下,“冠军” 这个词的区分度更高,IDF 值更大。要提升 TF-IDF 的算法效果一般需要根据业务场合单独训练特定领域的 IDF 模型。

评价

  • TF-IDF 计算复杂度低,适合对效率优先的场景。
  • 由于它只依赖关键词的统计特征进行排序,有时候效果并不理想,比如有时候文本的关键要素不一定是频繁出现的元素。
  • 另外它也缺乏对文本结构的考虑。
转载请注明出处:

© http://hejunhao.me