自动从文本中提取概念和关键字(第二部分:语义方法)

已发表: 2022-09-20

本文是关于从文本中自动提取关键字的第一部分的后续文章。 上一篇文章讨论了从文本中提取关键字的所谓“传统”方法:基于统计或基于图形。

在这里,我们将探索具有更多语义方法的方法。 首先,我们将介绍词嵌入和转换器,即上下文嵌入。 然后我们将分享一个基于 BERT 模型的关于 John Coltrane 的专辑 Impressions(来源 francemusique.fr)的同文示例。 最后,我们将介绍一些评估方法,例如P@kf1-score以及最新技术水平的基准。

与传统方法不同,语义方法使您能够链接属于相似词汇领域的单词,即使它们不同。 这种方法背后的想法是省略文本中单词出现频率的计算,以便提取最有意义的单词,换句话说,那些提供与文本相关的最相关信息的单词。

词嵌入

这种方法可以追溯到 2013 年,当时引入了一个名为 word2vec 的模型。 它是一种“简单”的人工神经网络架构——与所谓的“深度学习”架构不同——它提出将词汇表中的单词集表示为向量。 换句话说,每个单词都由一行数字表示。 这组向量代表词汇的语义场,能够将这些向量相互比较。 通过测量这些向量之间的距离,我们可以判断这些词在语义上是否相似。 将单词表示为数字数组称为嵌入

word2vec-embedding-example-en

嵌入示例

一旦你有了你的词集的向量表示,你就可以将这些词相互比较。 如果两个向量之间的角度非常小,则两个词将具有接近的含义:这就是语义距离- 一个介于 -1 和 1 之间的值。该值越接近 1,词就越具有“相似性”意义。 相反,接近-1 的值将表示“相反”的含义,例如“好”和“坏”。

该模型的目标是从不可忽略的大量文本文档中“制造”这些著名的嵌入。 假设你有几十万个文本,模型将学习根据与之相似的词来预测一个词。

word2vec-window-en

单词窗口

该模型将输入几组单词——例如大小为 5 的单词——并尝试找到<mask>的最佳替代品。 在你的语料库中,有相似的短语或词组; 我们将能够找到这些词:例如“爵士”、“摇滚”、“古典”或“雷鬼”。 因此,所有这些词都将具有非常相似的向量。 因此,该模型可以将相似词汇领域中的概念和单词组合在一起。

[案例研究] 查找并修复索引问题

从零流量到指数增长:了解 GroupM Turkey 如何使用 Oncrawl 解决联合利华的索引问题。
阅读案例研究

另一方面,对于具有相同拼写但在上下文中没有相同含义的单词可能存在歧义:这些是同形异义词。

例如:

  1. 他在塞纳河畔坐下。
  2. 她将钱存入大通银行。

这是此类模型的一个限制:无论上下文如何,单词都将具有相同的向量表示。

变形金刚

一种更新的方法主要出现在 2017 年,Google 的 Attention Is All You Need。 在word2vec方法难以表示两个具有不同含义的相同单词的情况下, transformers类型模型能够根据上下文区分单词的含义。 请注意,还有一些 NLP 模型能够考虑单词序列,例如 RNN 或 LSTM,但我们不会在本文中讨论它们。

Transformers将在神经网络架构中普及一个新概念:注意力机制。 这使您能够在一系列单词(例如一个句子)中找到每个单词与其他单词的关系。

BERT 模型由 Google 于 2018 年创建,是一种强大且流行的模型。 这些语言模型的优势在于它们基于预训练模型,即该模型已经在大量英语、法语等文本上进行了训练。然后可以基于更详细的分析。 然后可以按原样使用它来比较文本、从问题中生成答案、进行情绪分析、对更具体的文本正文进行微调等。

bert-attention-visualisation

注意力可视化

该图像是使用exBERT可视化工具生成的。 我们可以看到,选中的单词“money”与“ deposit ”和“ bank有很强的联系 由于上下文,模型更容易消除“银行”一词的歧义。

在 KeyBERT 的情况下,它是一个从 BERT 派生的模型,称为 Sentence-BERT,它允许我们轻松地在语义上比较句子。

如果您想了解更多关于所有可用的开源和预训练模型的信息,您可以访问 Huggingface 中心,该中心专门存储和共享与 NLP 相关的数据集和模型(最近还包括音频和图像)。

使用 KeyBERT 提取关键字

那么,我们如何使用转换器从文本中提取相关关键字呢? 有几个项目,包括 KeyBERT:使用 BERT 进行最小关键字提取,这是一个使用 BERT 模型的开源 Python 库。

默认情况下,KeyBERT 将使用基于 BERT 的句子转换器将句子而不是单个单词表示为向量。 这是比较句子或词组的一种非常有效的方法。 KeyBERT 算法的原理非常简单。 让我们看一个示例文本,然后:

  1. 该代码将从文本中提取所有唯一单词。 在这一步中,停用词通常会被消除。
  2. 计算整个文本和每个单词的嵌入。
  3. 然后,我们可以计算来自单词的向量与代表整个文本的向量之间的语义距离。

一旦计算了所有的距离,我们就可以提取与文本的整体含义密切相关的词:这些将是算法选择的关键词。

此外,KeyBERT 让您能够选择关键字的长度:我们实际上可以选择单个单词,或者成对甚至三个单词。 此外,该代码提供了一种实现“最大边际相关性”(MMR)方法的方法,以增加结果的多样性。 这可以帮助您避免重复某个术语,该术语可能与文档的内容相关,但在结果中经常出现,例如:“爵士音乐会”、“爵士音乐”、“爵士风格” , ETC。

总而言之,也可以将其他 NLP 模型用于 KeyBERT,例如 spaCy 或 flair 的模型。

和上一篇文章一样,这里是 KeyBERT 从关于 John Coltrane 的专辑 Impressions 的同一篇文章中提取的关键字示例:

“coltrane印象”、“音乐四重奏”、“爵士宝藏”、“约翰音乐会”、“珍珠序列”、“格拉茨曲目”、“次中音萨克斯”

评价方法

​​在本文和上一篇文章中,我们介绍了几种用于从文档中提取关键字的方法:RAKE、Yake、TextRank 和 KeyBERT。 但是,重要的是能够根据您的上下文选择正确的。

因此,有必要查看评估方法,以便将一种方法的结果与另一种方法的结果进行比较。 从关键字已经被人类定义和验证的数据(document, keywords)中,可以将模型的结果与这个“现实”进行比较。 我们有准确率、召回率和 f1 分数等指标,这些指标经常用于分类问题。 因此,我们可以通过知道模型提取的给定关键字是否确实在相关关键字列表中来构建混淆矩阵。

由于模型可以提取一系列关键字,我们经常将前k关键字ground truth进行比较。 由于结果可能会根据我们希望比较的关键字数量而有所不同,因此我们根据k值对模型进行多次评估。 这些指标称为Precision@k ,意思是:“我计算 top-k 的精度”。

[电子书] 您的内部链接方案如何影响 Inrank

遵循 Chris Green 的实验,了解您的内部链接方案如何影响使用 Inrank 的页面的相对重要性。
您的内部链接方案如何影响 Inrank

精确

这是所有预测关键字top-k正确关键字的数量。

Precision calculation

记起

这是基本事实的总关键字前 k正确关键字的数量。

Recall calculation

f1-分数

它是前两个指标的组合——或者换句话说,准确率和召回率之间的和谐平均值:

F1 score calculation

地图@k

平均平均精度

计算MAP的第一步是计算平均精度。 我们将获取模型找到的所有关键字,并计算模型找到的每个相关关键字的P@k 。 例如,使用 5 个建议的关键字中的 3 个相关关键字计算AP@5

 关键词:爵士音乐会音乐萨克斯收音机
   相关:1 0 1 1 0
   P@k:1/1 2/3 3/4

   AP:1/3 (1 + 2/3 + 3/4) ~= 0.80

我们在这里注意到相关关键字的位置很重要。 事实上,如果五个关键字中的前三个关键字不相关(resp.related),则AP将不会获得相同的分数。

然后,对于每一个(document, keywords) ,我们将计算所有AP的平均值,最终得到MAP。

请注意,这些不同的指标也广泛用于评估排名模型或推荐系统。

对其中一些指标的一个小批评涉及相关基本事实关键字的数量,每个数据集和每个文档可能会有所不同。

  • 例如, recall@k :分数很大程度上取决于基本事实的相关关键字的大小。 如果您有多达 20 个相关关键字,那么对于一个recall@10 ,您将比较这组 20 个关键字中的前 10 个关键字。 在最好的情况下,如果模型提出的所有关键词都是相关的,那么召回分数不会超过 0.5。
  • 另一方面,如果相关的 ground truth 关键字的数量与模型提出的相比非常少,您将无法获得良好的precision@k分数。 对于五个相关的基本事实关键字, precision@10最多只能获得 0.5 分,但不会更高。

无论用于评估结果的指标是什么,都必须有一个数据集(文本、关键字),其中关键字先前由人们定义——文本的作者、读者、编辑等。有几个数据集,主要在英语和不同主题:科学文章、摘要、新闻、IT 等。例如,这里是这个 Github KeywordExtractor-Datasets 存储库,其中列出了大约 20 个数据集。

基准

除了对各种评估方法的介绍之外,我还想为您提供一些提出基准的研究论文的“摘要”

第一个是实施 Yake 的研究人员! 论文中的方法,“YAKE! 使用多个局部特征从单个文档中提取关键字”。 他们在大约 20 个不同的数据集上分析了他们的方法:PubMed、WikiNews、SemEval2010 和 KDD,使用了上面描述的大部分指标: P@krecall@k等。Yake! 将与其他大约十种方法进行比较,包括 Rake、Text Rank 等。通过整合所有可用的数据集和计算精度召回率,Yake! 方法要么更好,要么非常接近最先进的方法。 例如,对于f1@10

数据集呸! 最佳或第二
维基新闻0.450 0.337
KDD 0.156 0.115
检查0.316 0.378

呸! 往往高达 50-100% 更好,这接近领先的方法。

在另一篇较新的论文“TNT-KID:基于 Transformer 的关键字识别神经标注器”中,我们还比较了传统方法和基于Transformer的方法。 使用Transformer进行提取的方法表现更好。 不过要小心,因为这些是所谓的“监督”方法,不像 Rake、KeyBERT 和 Yake,它们不需要对大量数据进行训练即可产生结果。

最后,让我们看看另外两个基准:

  • Simple Unsupervised Keyphrase Extraction using Sentence Embeddings 使用词嵌入,在 Inspec 和 DUC 等数据集上与 TextRank 相比表现良好。
  • 比较 7 种算法(在 Python 中)的博客文章:关键字提取 — Python 中 7 种算法的基准。 作者比较了 KeyBERT、RAKE、Yake 方法的计算时间以及每种方法可以提取的相关词的数量方面的性能。

结论

正如您在这两篇文章中所看到的,确实有许多非常不同的方法可以从文本中提取相关关键字。 查看不同的基准,您会注意到没有一个在指标方面真正超过所有其他基准。 这将取决于文本和上下文。 而且,正如关于 7 种提取算法的博客文章的作者所指出的,我们在面对冗长的文本时也可以依靠算法的处理时间。

在将算法付诸实施和处理数十万份文档时,这一次肯定会成为一个因素。 对于 KeyBERT,您应该考虑使用带有 GPU 的基础设施来从根本上增加处理时间。 事实上,这种方法依赖于具有需要大量计算的深度学习架构的 Transformer。

如果让我做出选择,那肯定是在 KeyBERT 和 Yake 之间。 前者用于转换器和语义方面,后者用于其效率和执行速度。

参考书目

  • 2017年,你需要的只是注意力
  • BERT:用于语言理解的深度双向变压器的预训练,2019
  • 带有自我标签的自我监督上下文关键词和关键词检索。 Sharma P. & Li Y. (2019)
  • 探索不同的关键词提取器——评估指标和策略