如何使用BERT大规模生成元描述

如何使用BERT大规模生成元描述

在过去的几个月中,Google宣布了两个已在Google搜索中投入生产并且也是开源的系统。任何人都可以看到他们的工作方式。

甚至在一年前,您都不认为Google搜索的Google开放源代码部分是可行的。

不出所料,没有很多最终指南可以帮助您优化BERT的网站。你不能

BERT可以帮助Google更好地理解某些查询的意图,并且与每个公告的页面内容无关。

如果您读过我的 深度学习 文章中,您不仅应该对BERT的工作原理有实际的了解,而且应该如何将其用于SEO目的–特别是对于 自动意图分类

让我们扩展它并涵盖另一个用例:最新的文本摘要。

我们可以使用自动文本摘要来生成元描述,然后将其填充到没有文字描述的页面上。

为了说明这种强大的技术,我将自动下载并总结我的 上一篇 和往常一样,我将分享Python代码段,您可以遵循这些代码段并适应您自己的网站或客户的。

这是我们的行动计划:

  • 讨论自动文本摘要。
  • 了解如何找到可用于汇总的最新(SOTA)代码。
  • 下载文本摘要代码并准备环境。
  • 下载 我的最后一篇文章 并仅抓取页面上的主要内容。
  • 使用抽象文本摘要来生成文本摘要。
  • 回顾一下PreSumm背后的概念。
  • 讨论一些限制。
  • 最后,我将分享资源以了解更多信息和社区项目。

文本汇总以生成元描述

当我们拥有内容丰富的页面时,我们可以利用自动文本摘要来大规模生成元描述。

根据输出,有两种主要的文本汇总方法:

  • 摘录:我们将文本分为句子,然后根据它们作为整篇文章的摘要的有效程度对其进行排名。摘要将始终包含在文本中找到的句子。

  • 抽象性:我们生成可能新颖的句子,以捕捉文本的本质。

在实践中,通常最好尝试两种方法,然后选择能为您的网站带来最佳效果的方法。

如何找到用于文本摘要的最新技术(SOTA)代码

我最喜欢的查找尖端代码和论文的地方是 带代码的文件

如果您浏览 最先进的部分,您可以找到许多类别中效果最好的研究。

如果我们将搜索范围缩小到 文字摘要,我们可以找到本文: 使用预编码器进行文本汇总,它利用了BERT。

从那里,我们可以方便地找到指向 研究论文,最重要的是 实施研究。

如何使用BERT生成规模的元描述“ width =” 2384“ height =” 1290“ Size =”(最大宽度:2384px)100vw,2384px“ data-srcset =” https://cdn.searchenginejournal.com/ wp-content / uploads / 2019/10 / global_rank-5db7cb0e3806e.png 2384w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/10/global_rank-5db7cb0e3806e-480x260.png 480w,https:// cdn.searchenginejournal.com/wp-content/uploads/2019/10/global_rank-5db7cb0e3806e-680x368.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/10/global_rank-5db7cb0e3806e-768x416 .png 768w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/10/global_rank-5db7cb0e3806e-1024x554.png 1024w,https://cdn.searchenginejournal.com/wp-content/uploads/2019 /10/global_rank-5db7cb0e3806e-1600x866.png 1600w“ data-src =” https://cdn.searchenginejournal.com/wp-content/uploads/2019/10/global_rank-5db7cb0e3806e.png

如果出现优秀论文,经常检查全球排名也是个好主意。

下载PreSum并设置环境

在Google Colab中创建一个笔记本,以执行后续步骤。

在研究人员的存储库中找到原始代码后,很难使用这些代码来生成摘要。

只需阅读这篇文章,您就可以感受到痛苦 Github问题。 ?

我们将使用 分叉版本 回购和我简化的一些简化步骤 这个笔记本

首先,克隆存储库。

!git克隆https://github.com/mingchen62/PreSumm.git

然后安装依赖项。

!pip install torch == 1.1.0 pytorch_transformers tensorboardX多进程pyrouge

接下来,我们需要下载预训练的模型。

然后,我们需要解压缩并将它们移动到组织的目录中。

完成此步骤后,我们应该已准备好摘要软件。

让我们下载我们接下来要总结的文章。

创建一个文本文件进行汇总

正如我提到的,我们将总结我的上一篇文章。让我们下载它并清理HTML,以便只剩下文章内容。

首先,让我们创建保存输入文件所需的目录以及摘要的结果。

!mkdir / content / PreSumm / bert_data_test /
!mkdir / content / PreSumm / bert_data / cnndm

%cd / content / PreSumm / bert_data / cnndm

现在,让我们下载文章并提取主要内容。我们将使用 CSS选择器 仅刮擦帖子的正文。

如何使用BERT生成规模的元描述“ width =” 2464“ height =” 1280“ Size =”(最大宽度:2464px)100vw,2464px“ data-srcset =” https://cdn.searchenginejournal.com/ wp-content / uploads / 2019/10 / body-selector-5db7d229c686b.png 2464w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/10/body-selector-5db7d229c686b-480x249.png 480w, https://cdn.searchenginejournal.com/wp-content/uploads/2019/10/body-selector-5db7d229c686b-680x353.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/10 /body-selector-5db7d229c686b-768x399.png 768w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/10/body-selector-5db7d229c686b-1024x532.png 1024w,https://cdn.searchenginejournal .com / wp-content / uploads / 2019/10 / body-selector-5db7d229c686b-1600x831.png 1600w“ data-src =” https://cdn.searchenginejournal.com/wp-content/uploads/2019/10/body -selector-5db7d229c686b.png

文本输出在一行中,我们将用下一个代码将其拆分。text = text.splitlines(True)#保持换行

我删除了包含赞助广告代码的第一行和包含某些文章元数据的后几行。

text = text(1:-5)#删除赞助商代码并结束元数据

最后,我可以使用此代码将文章内容写到一个文本文件中。

>使用open(“ python-data-stories.txt”,“ a”)作为f:

  f.writelines(文字)

在此之后,我们准备进行摘要步骤。

生成文本摘要

我们将生成一个抽象摘要,但是在生成摘要之前,我们需要修改文件 summary.py

为了使事情简单,我创建了一个 补丁文件 您可以使用以下代码下载所做的更改。

!wget https://gist.githubusercontent.com/hamletbatista/f2741a3a74e4c5cc46ce9547b489ec36/raw/ccab9cc3376901b2f6b0ba0c4bbd03fa48c1b159/summarizer.patch

您可以在此处查看将要进行的更改。红线将被删除,绿线将被添加。

我从上面链接的笔记本中借用了这些更改,这些更改使我们能够传递文件进行摘要并查看结果。

您可以使用此应用更改。

!patch <summaryer.patch

我们有最后的准备步骤。接下来的代码下载摘要器所需的一些标记器。

导入NLTK
nltk.download('punkt')

最后,让我们用以下代码生成摘要。

#CNN_DM抽象

%cd / content / PreSumm / src

!python summaryr.py-任务abs-模式测试-test_from /content/PreSumm/models/CNN_DailyMail_Abstractive/model_step_148000.pt -batch_size 32 -test_batch_size 500 -bert_data_path ../bert_data/cnndm -log_file ../logs/val_abs_bert_rond_cn -sep_optim true -use_interval true -visible_gpus -1 -max_pos 512 -max_src_nsents 100 -max_length 200 -alpha 0.95 -min_length 50 -result_path ../results/abs_bert_cnndm_sample

这是部分输出的样子。

现在,让我们回顾一下结果。

这应该显示。

这是候选人摘要。

!ls -l / content / PreSumm /结果

这应该显示。

这是候选人摘要。

!head /content/PreSumm/results/abs_bert_cnndm_sample.148000.candidate

(UNK)(UNK)(UNK):大量的情感故事和强大的故事隐藏在大量的数据中,等待被发现她说,这项活动非常有效,赢得了许多奖项,包括戛纳国际创意节大奖(UNK):我们将从subreddit数据漂亮的地方重建流行的数据可视化

一些令牌,例如(UNK)和 需要解释。 (UNK)代表BERT词汇表中的一个单词。您可以忽略这些。 是一个句子分隔符。

PreSumm如何工作

如何使用BERT生成规模的元描述“ width =” 2228“ height =” 1140“ Size =”(最大宽度:2228px)100vw,2228px“ data-srcset =” https://cdn.searchenginejournal.com/ wp-content / uploads / 2019/10 / bertsum-5db7dda408295.png 2228w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/10/bertsum-5db7dda408295-480x246.png 480w,https:// cdn.searchenginejournal.com/wp-content/uploads/2019/10/bertsum-5db7dda408295-680x348.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/10/bertsum-5db7dda408295-768x393 .png 768w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/10/bertsum-5db7dda408295-1024x524.png 1024w,https://cdn.searchenginejournal.com/wp-content/uploads/2019 /10/bertsum-5db7dda408295-1600x819.png 1600w“ data-src =” https://cdn.searchenginejournal.com/wp-content/uploads/2019/10/bertsum-5db7dda408295.png

大多数传统的提取性文本摘要化技术都依赖于复制被确定很好地包含在摘要中的文本部分。

这种方法虽然对许多用例有效,但是却很局限,因为可能没有句子可用于总结文本。

在之前的深度学习文章中,我比较了传统/幼稚的文本匹配方法和在街道上按名称查找业务的方法。

是的,它可以工作,但是将其与GPS系统允许的功能进行比较时,它是相当有限的。

我解释了使用嵌入的能力取决于它们在空间中像坐标一样运作的事实。当您使用坐标时(就像在GPS系统中一样),无论如何命名事物(或使用哪种语言命名),它都仍然在同一地方。

BERT的另一个优势是,根据上下文,同一单词的坐标可以完全不同。例如,华盛顿州和乔治华盛顿大桥中的“华盛顿”一词含义完全不同,编码方式也有所不同。

但是,BERT和类似系统的最强大优势是NLP任务不是从头开始学习的,而是从预先训练的语言模型开始的。

换句话说,在对诸如回答问题之类的特定任务进行微调之前,该模型至少了解该语言的细微差别,例如如何组织主题,副词,介词等。

PreSumm研究人员在总结中列出了他们工作中的三个主要贡献:

  • 他们采用了BERT神经结构,以轻松学习完整的句子表示。考虑句子的词嵌入,以便您可以轻松识别相似的词。
  • 它们显示出将预训练的语言模型用于摘要任务的明显好处。请参阅我的评论,为什么这是有益的
  • 他们的模型可以用作构建更好的汇总模型的基础。

汇总前的局限性

该推文强调了PreSumm和依赖预训练模型的类似系统的明显局限性之一。他们的写作风格很大程度上受用于训练他们的数据的影响。

PreSumm受过CNN和DailyMail文章的培训。当用于生成小说小说章节的摘要时,摘要不是特别好。

目前,解决方案似乎是使用您所在域中的数据集重新训练模型。

了解更多信息和社区项目的资源

这是一个 伟大的底漆 关于经典文本摘要。

几个月前,我在DeepCrawl上介绍了文本摘要 网络研讨会。那时,PreSumm的研究人员发布了他们的工作的早期版本,仅专注于提取性文本摘要。他们称它为 BERTSum

我也有大多数相同的想法,但是很有趣的是,他们以多快的速度改进了工作以涵盖抽象方法和提取方法。加上在这两个类别中都达到了最先进的性能。

惊人的进步。

在谈论进展时,Python SEO社区继续让每个人每个月都在努力并发布的新项目吸引我。

这是一些著名的例子。请随时克隆他们的存储库,看看您可以改进或适应您的需求,然后将您的改进反馈回去!

图片积分

作者截取的所有屏幕截图,2019年10月
后期图片: 使用预编码器进行文本汇总

相关文章