一文带你读懂自然语言处理 - 事件提取

栏目: 数据库 · 发布时间: 5年前

内容简介:本文为 AI 研习社编译的技术博客,原标题 :Natural Language Processing — Event Extraction

一文带你读懂自然语言处理 - 事件提取

本文为 AI 研习社编译的技术博客,原标题 :

Natural Language Processing — Event Extraction

作者 |  Rodrigo Nader

翻译 | 胡瑛皓      编辑 | 酱番梨、王立鱼

原文链接:

https://towardsdatascience.com/natural-language-processing-event-extraction-f20d634661d3

一文带你读懂自然语言处理 - 事件提取

每天产生的文本信息令人叹为观止。数百万数据源以新闻稿、博客、消息、手稿和无数其他形式发布,因而自动组织和处理就必不可少。

随着神经网络算法的改进、计算机算力的显著提升以及大量涌现的理解框架,自然语言处理的能力正被前所未有的探索。其中一个常见应用称为事件提取,即处理收集蕴藏在文本中的一个阶段内发生的事件,自动识别发生了什么和什么时候发生。

比如:

  • 2018/10 — President Donald Trump’s government banned countries from importing Iranian oil with exemptions to seven countries.

  • 2019/04 — US Secretary of State Mike Pompeo announced that his country would open no more exception after the deadline.

  • 2019/05 — The United States ended with exemptions that allowed countries to import oil from Iran without suffering from US sanctions.

凭借获得信息上下文的能力,可以关联时间上互相独立的事件,汲取其影响,发现事件序列如何随着时间推移展开。这些科技洞见力正驱动诸如 EventRegistry和 Primer.AI等组织,用科技服务各个市场。

本文将构建一个简单的事件提取脚本,接收新闻输入处理后输出事件。

    获取数据

首先需要收集数据。我们可以用任何形式的文本,只要这些文字的内容可通过时间线表示。本文选用 newsapi,从该数据源获取数据很容易,其开发者计划每天可获取500个免费请求。以下是处理请求的代码:

一文带你读懂自然语言处理 - 事件提取

一文带你读懂自然语言处理 - 事件提取

最后一个函数,返回特定查询的结果列表,大约包含2000篇文章。我们的目的是抽取这些文章总的事件。为简化这一过程,只保留文章标题 (理论上,标题应该蕴涵新闻的核心内容)。

一文带你读懂自然语言处理 - 事件提取

执行后得到一个data frame,其内容如下,包括日期、标题和描述

一文带你读懂自然语言处理 - 事件提取

    获得句子含义

前面拿到了文章的标题,现在需要将其转换为算法能理解的形式。注,本文跳过了整个文本预处理环节,因为与本文不太相关。不过,如果你是新手,应用模型前务必作预处理 → 请打开原文查看一篇很好的教程。

SpaCy的预训练词嵌入模型,可帮助获取独立词语的含义,进一步获得整句句子的含义。具体来说用的是SpaCy large model (en_core_web_lg), 其中包含了685k英语单词的预训练词向量。当然也可以用任意其他预训练词向量表示 (诸如Word2Vec, FastText, GloVe等等)。

SpaCy中默认将词向量的平均值作为句子向量,这是一种简易处理方法,忽略了句子中的词序信息。如想使用更精巧的策略,可以看一下Sent2Vec、SkipThoughts等模型。这篇文章 详细介绍了SkipThoughts如何用无监督方法提取摘要。

本文中使用SpaCy自带的方法:

一文带你读懂自然语言处理 - 事件提取

可以看到每篇文章被表示为300维的数组,如下:

一文带你读懂自然语言处理 - 事件提取

    向量聚类

即便采用搜索方式过滤获取数据,同一查询中会出现不同的主题。比如,搜索关键词 “Paris” 可以得到:

  • Paris comes together after a devastating fire

或:

  • Brazil football legend Pele admitted to hospital in Paris

现在用聚类算法分组不同的主题。

本例中,我使用DBSCAN算法,该算法不需要指定聚类簇的数量。算法自己决定聚类簇的数量和规模。

一文带你读懂自然语言处理 - 事件提取

算法中 epsilon 参数决定两个样本间的最大距离,以此决定是否临近,这意味着如果 eps 设置太大形成的簇就比较少,如果设置太小大多数点都无法被临近聚类,于是被分到默认簇 (-1)里,产生的簇也不多。下图显示聚类簇的数量与的epsilon关系:

一文带你读懂自然语言处理 - 事件提取

给 eps 调参是最为精巧的一步,因为聚类的结果会改变很多,也就是如何确定句子是相似的。通过试验找到恰当的值,能保持句子间的相似度,同时不把相近的句子分到不同组去。

总的来说,由于我们期望同一组中包含非常相似的句子,也就是得到一个较高的分类数。因此选取 0.08 ~ 0.12之间。参见 Scikit Learn 中关于 eps 和其他参数的说明。

现在看一下每个类中包含的数量:

一文带你读懂自然语言处理 - 事件提取

-1 类表示未明确聚类的句子,其他是已被分类的句子。我们分析一下最大的类,表示最重要的主题 (或者评论最多的那个)。

抽样一下其中一个类:

一文带你读懂自然语言处理 - 事件提取

一文带你读懂自然语言处理 - 事件提取

    转换为事件

对于每个分类我们得到如上形式的data frame。接下来是以时间线排列这些句子,并过滤掉相似的句子。每天只呈现一篇文章,这样实现出来的时间线就干净而统一。

由于每天关于同一主题会产生许多标题,会用一个条件去过滤。该句子将最好的表达事件,也就是蕴涵着这些标题代表的核心内容。

按天聚类句子,在每个组中选择其最靠近中心的句子。以下是从一组向量中找出中心向量的函数:

一文带你读懂自然语言处理 - 事件提取

一文带你读懂自然语言处理 - 事件提取

干净整洁。最后用Plotly绘制一下时间线图: 雷锋网 (公众号:雷锋网) 雷锋网雷锋网

一文带你读懂自然语言处理 - 事件提取

就是这样,用一个脚本从2000篇文章中提取和组织事件。现在可以想象每天将这一技术应用于上百万篇文章有多大用处。仅以股票市场每日新闻影响为例,事件提取可以说非常有价值。

可以增加许多步骤提升事件提取的效果,诸如更好的预处理包括POS tagging和NER,使用更好的句子向量模型等等。不过本文的方法,已经可以快速达到理想的结果。

感谢阅读本文。本文聚焦NLP及事件提取。如果想了解更多有关数据科学和机器学习的信息,请follow我的账号。有任何想法、评论或问题,请给我留言。

想要继续查看该篇文章相关链接和参考文献?

点击 一文带你读懂自然语言处理-事件提取 即可访问:

https://ai.yanxishe.com/page/TextTranslation/1704

社长今日推荐: AI入门、大数据、机器学习免费教程

35本世界顶级原本教程限时开放,这类书单由知名数据科学网站 KDnuggets 的副主编,同时也是资深的数据科学家、深度学习技术爱好者的Matthew Mayo推荐,他在机器学习和数据科学领域具有丰富的科研和从业经验。

点击链接即可获取: https://ai.yanxishe.com/page/resourceDetail/417

雷锋网原创文章,未经授权禁止转载。详情见 转载须知


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

游戏编程权威指南

游戏编程权威指南

Mike McShaffry 麦克沙福瑞、David “Rez” Graham 格雷海姆 / 师蓉、李静、李青翠 / 人民邮电 / 2016-3 / 99.00元

全书分为4个部分共24章。首部分是游戏编程基础,主要介绍了游戏编程的定义、游戏架构等基础知识。 第二部分是让游戏跑起来,主要介绍了初始化和关闭代码、主循环、游戏主题和用户界面等。 第三部分是核心游戏技术,主要介绍了一些*为复杂的代码 示例,如3D编程、游戏音频、物理和AI编程等。 第四部分是综合应用,主要介绍了网络编程、多道程序设计和用C#创建工具等,并利用前面所讲的 知识开发出......一起来看看 《游戏编程权威指南》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具