当前位置:   article > 正文

java信息熵抽取关键词算法_9. HanLP《自然语言处理入门》笔记--9.关键词、关键句和短语提取...

java hanlp 关键词 词性

9. 信息抽取

信息抽取是一个宽泛的概念,指的是从非结构化文本中提取结构化信息的一类技术。这类技术依然分为基于规则的正则匹配、有监督学习和无监督学习等各种实现方法。我们将使用一些简单实用的无监督学习方法。由于不需要标注语料库,所以可以利用海量的非结构化文本。

本章按照颗粒度从小到大的顺序,介绍抽取新词、关键词、关键短语和关键句的无监督学习方法。

9.1 新词提取

概述

新词是一个相对的概念,每个人的标准都不一样,所以我们这里定义: 词典之外的词语(OOV)称作新词。

新词的提取对中文分词而言具有重要的意义,因为语料库的标注成本很高。那么如何修订领域词典呢,此时,无监督的新词提取算法就体现了现实意义。

基本原理

提取出大量文本(生语料)中的词语,无论新旧。

用词典过滤掉已有的词语,于是得到新词。

步骤 2 很容易,关键是步骤 1,如何无监督的提取出文本中的单词。给定一段文本,随机取一个片段,如果这个片段左右的搭配很丰富,并且片段内部成分搭配很固定,则可以认为这是一个词。将这样的片段筛选出来,按照频次由高到低排序,排在前面的有很高概率是词。

如果文本足够大,再用通用的词典过滤掉“旧词”,就可以得到“新词”。

片段外部左右搭配的丰富程度,可以用信息熵来衡量,而片段内部搭配的固定程度可以用子序列的互信息来衡量。

信息熵

在信息论中,信息熵( entropy )指的是某条消息所含的信息量。它反映的是听说某个消息之后,关于该事件的不确定性的减少量。比如抛硬币之前,我们不知道“硬币正反”这个事件的结果。但是一旦有人告诉我们“硬币是正面”这条消息,我们对该次抛硬币事件的不确定性立即降为零,这种不确定性的减小量就是信息熵。公式如下:

\[H(X)=-\sum_{x} p(x) \log p(x)

\]

给定字符串 S 作为词语备选,X 定义为该字符串左边可能出现的字符(左邻字),则称 H(X) 为 S 的左信息熵,类似的,定义右信息熵 H(Y),例如下列句子:

两只蝴蝶飞啊飞

这些蝴蝶飞走了

那么对于字符串蝴蝶,它的左信息熵为1,而右信息熵为0。因为生语料库中蝴蝶的右邻字一定是飞。假如我们再收集一些句子,比如“蝴蝶效应”“蝴蝶蜕变”之类,就会观察到右信息熵会增大不少。

左右信息熵越大,说明字符串可能的搭配就越丰富,该字符串就是一个词的可能性就越大。

光考虑左右信息熵是不够的,比如“吃了一顿”“看了一遍”“睡了一晚”“去了一趟”中的了一的左右搭配也很丰富。为了更好的效果,我们还必须考虑词语内部片段的凝聚程度,这种凝聚程度由互信息衡量。

互信息

互信息指的是两个离散型随机变量 X 与 Y 相关程度的度量,定义如下:

\[\begin{aligned}

I(X ; Y) &=\sum_{x, y} p(x, y) \log \frac{p(x, y)}{p(x) p(y)} \\

&=E_{p(x, y)} \log \frac{p(x, y)}{p(x) p(y)}

\end{aligned}

\]

互信息的定义可以用韦恩图直观表达:

fdddfd992ad0bd4893ff8be7f37a2513.png

其中,左圆圈表示H(X),右圆圈表示H(Y)。它们的并集是联合分布的信息熵H(X,Y),差集有多件嫡,交集就是互信息。可见互信息越大,两个随机变量的关联就越密切,或者说同时发生的可能性越大。

片段可能有多种组合方式,计算上可以选取所有组合方式中互信息最小的那一种为代表。有了左右信息熵和互信息之后,将两个指标低于一定阈值的片段过滤掉,剩下的片段按频次降序排序,截取最高频次的 N 个片段即完成了词语提取流程。

实现

我们用四大名著来提起100个高频词。

代码请见(语料库自动下载): extract_word.py

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/814873
推荐阅读
相关标签
  

闽ICP备14008679号