为什么 gensim summarize() return 有时会空白?

why does gensim summarize() return blank sometimes?

我是 nlp 的初学者,我是第一次使用 gensim。 我注意到有些文本 returns 是空白摘要。例如:

from gensim.summarization import summarize
text ="The continued digitization of most every sector of society and industry means that an ever-growing volume of data will continue to be generated. The ability to gain insights from these vast datasets is one key to addressing an enormous array of issues — from identifying and treating diseases more effectively, to fighting cyber criminals, to helping organizations operate more effectively to boost the bottom line."
summarize(text, 0.6)

returns: ''

当我在其他情况下有相同大小的段落时,它 returns 是一个摘要,所以我知道这并不是我的比例太小。任何见解表示赞赏!

为了回答问题,我假设 Gensim 版本为 3.8.3 - 这是(当前)支持摘要的最新版本,因为版本 4 中不再有 API 个存根。

具体在看summarize()的参考时,我们可以阅读以下内容:

Get a summarized version of the given text.
The output summary will consist of the most representative sentences and will be returned as a string, divided by newlines.

突出显示的部分还解释了为什么您的输出为空:Gensim 使用提取式摘要器,它只能选择不同的 句子 ,而不是 句子部分 .因此,要么选择整个句子(导致没有“摘要”),要么 return 空答案。解决这个问题也不是微不足道的,我认为你只有两个(次优)选择之一:

  • 使用抽象摘要器。与提取式摘要相比,抽象模型实际上可以做人类通常从系统中“期望”的事情,即从句子中重新措辞和选择短语以形成更短的输出,而不依赖于句子的选择。然而,此类模型通常是计算密集型的,并且没有通过 Gensim (AFAIK) 提供的此类模型。
  • 预分块你的文本。如果您可以将输入句子合理地分割成几个文本块,这些可以代替“多个句子”,因此可以让您有一个大概的摘要,即使它可能不是很好.

请注意,从 gensim-4.0.0 开始删除之前的 Gensim 摘要代码的原因是该代码既不是很好,也不是很适应,也没有任何活跃的项目贡献者能够 maintain/improve代码。

所以你不应该对它抱有太大期望。当然,如果它足以满足您的目的,您可以继续使用它,方法是安装较旧的 Gensim 或简单地将其源代码提升到另一个兼容许可的项目中。

您已经特别指出了它不太好的(许多)方式之一:它的“提取摘要”风格可以做的最好的事情是选择一些它推断出最多的现有句子-代表全文。

但只有2个句子,其粗糙的字数统计算法基本上无法决定2个中哪个更好。基本上,没有第三句话可以打破平局。因此,根据其文档,不知道要回答的句子的较小子集,它什么都不回答。

提取式摘要最有可能对较长的文本产生良好的结果,这些文本已经以清晰的说明文风格编写 - 作者已经混合使用了介绍性、更深入的解释和摘要性句子。然后,对于算法而言,某些句子将通过字数与其他句子的最大数量“最相似”,因此是摘要或 key/repeated 点的好选择。