文本抽取式摘要

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本抽取式摘要相关的知识,希望对你有一定的参考价值。

参考技术A 关键词:抽取式,BM25算法,行业知识后处理。

背景

笔者所在的公司原来已经有一个自动摘要的模块,我只是在原来的基础上,做了些针对特定领域的优化。

首先自动文本摘要大概分为 抽取式和生成式两类。抽取式摘要主要是直接抽取输入文本的几句话来概括整段的内容,这个实现相对简单(常用算法 TextRank、TF-IDF 等,本文使用的是 BM25 算法)。另一种是生成式,生成式的构成比较复杂,实现难度也很大,效果在实际落地过程中也并不理想。所以下文主要是针对抽取式自动摘要来讨论的。

问题的算法抽象

首先抽取式摘要,问题可以归结为从文章中选取和其他句子最相关的那句话。也就是将每句话当成“搜索框”里输入的句子,然后计算其他句子和他的相关度得分,然后选取和其他句子相关性得分最高的那句话作为摘要。

BM25算法:

首先BM25算法在搜索引擎领域是很有用的。这里关于BM25解析,讲的很好的文章:  BM25 - ywl925 - 博客园  。这里就不展开介绍了。

BM25算法得分的归一化

经过BM25算法计算的得分,范围相差会很大,笔者为了实现后面的静态加分,先对BM25算的score进行了一个归一化。归一化一般最常见的两种: Min-Max和Z score,是相对常见的概念。可以参考博客: 数据归一化和两种常用的归一化方法 - ChaoSimple - 博客园

特定领域知识的积累

这里明确一下,这里所说的领域知识,主要是某些很有区分度的词和短语。这里涉及的底层模块也比较多。

首先是特定领域的语料库的积累。

以中文为例,除了一些公开的语料库,我们还需要一些扩充一些专门领域的语料。并对他们进行标注。

然后相应的,分词模块也要增强。

特别是针对那些领域专有的名词。由于现在中文分词的技术已经比较成熟,所以这块相对来说挑战不是很大。而且这面即使是基于HMM或者CRF做的分词,都已经有很可观的实用表现,和相当的泛化。不过如果能把底层的分词的模块性能和准确率提升一点,也会有很大的帮助,毕竟在中文文本处理中,分词是第一步要做的基础操作。

行业知识静态加分

这里的实现目前还是比较粗糙的。首先总结每个行业有区分度的词。这个词的获取会上面提到的特定的行业语料库,以及针对这个领域的分词。

在句子计算BM25得分,并归一化后,这里判断句子里面是否有领域关键词,如果有领域关键词,则静态的给归一化后的BM25 分数加一个静值。 之后对各个句子,按照这个新的分数排序。抽取得分最高的那句话。

这里还有一个问题可以深挖,就是笔者目前实现的领域知识加分,是在已经预先分好了分类的前提下,也就是说传入的参数,除了原文还会有属于哪个领域的具体信息。如果这个领域分类信息没有提前获得,那么就需要对整段文字做一个大概的分类,这样的难度就会大增。我们后续可以继续讨论这种情况。

以上是关于文本抽取式摘要的主要内容,如果未能解决你的问题,请参考以下文章

文本自动摘要发展历程

抽取式摘要生成

python实现的一个文本摘要程序

自然语言处理NLP之文本摘要机器翻译OCR信息检索信息抽取校对纠错

TensorFlow文本摘要生成 - 基于注意力的序列到序列模型

TensorFlow文本摘要生成 - 基于注意力的序列到序列模型