神圣的NLP!一文理解词性标注、依存分析和命名实体识别任务

2018 年 8 月 22 日 深度学习与NLP

    词性标注(Part-of-Speech TaggingPOS)、命名实体识别(Name Entity Recognition,NER)和依存句法分析(Dependency Parsing)是自然语言处理中常用的基本任务,本文基于SpaCy python库,通过一个具体的代码实践任务,详细解释这三种NLP任务具体是什么,以及在实践中三个任务相互之间的关系。


介绍

    说到数据科学时,我们经常想到的是数字的统计分析。但是,越来越多的情况下,社区会生成大量可以量化和分析的非结构化文本数据。比如,社交网络评论、产品评论、电子邮件、面试记录。

    为了分析文本,数据科学家经常使用自然语言处理( NLP )技术。在这篇博客文章中,我们将讲解3个常见的NLP任务,看看它们如何一起用于分析文本。我们将讨论的三项任务是:

    1、词性标注——这是什么类型的词?

    2、依存句法分析——这个词和这个句子中的其他词有什么关系?

    3、命名实体识别——这个词是专有名词吗?

我们将基于spaCy python库,将三种NLP任务综合放在一起,分析它们是如何协同工作的。在这儿,我们将使用这些结构化的数据进行一些有趣的可视化。

    这种方法可以应用于任何问题,在这些问题拥有大量的文本数据,我们需要了解主要实体是谁,它们出现在文档中的位置,以及它们在做什么。例如,DocumentCloud在其“View Entities”分析选项中使用了与此类似的方法。


Token(符号)&词性标注

    从文本中提取含义(meaning)的一种方法是分析单个单词。将文本分解成单词的过程称为tokenization——产生的单词称为token(tokens)。标点符号也是tokens。句子中的每一个token都有几个我们可以用来分析的属性。比如说一个词的词性:人、地方或事物是名词;动作或事件是动词;描述名词的词是形容词。使用这些属性,通过通过简单的计算最常见的名词、动词和形容词来创建一段文本的摘要。

    使用spaCy,我们可以tokenize一段文本,并访问每个token(token)的词性属性。作为一个示例应用程序,一下代码给出了一个实例,我们先对一段话进行标签化,然后计算其中最常见的名词。我们还将对这些token进行归类,定义一个词为根节点,方便我们对其他的词进行标准化。


依存句法分析

    单词之间也是有关系的,有几种类型的关系。例如,名词可以成为句子的主语,表示它执行了一个动作(一个动词),如“吉尔笑了”。名词也可以是句子的宾语,表示被句子的主语所作用,就像这句话中的约翰一样:”吉尔嘲笑约翰。"

    依存句法分析是理解句子中单词之间关系的一种方法。虽然吉尔和约翰都是句子“吉尔嘲笑约翰”中的名词,但吉尔是笑的主体,约翰是被嘲笑的对象。依存关系是一种更细粒度的属性,可以通过句子中的关系来理解单词的含义。

    这些词之间的关系会变得复杂,这取决于句子的结构。依存句法分析的结果是以动词为根的树形数据结构。

    让我们来看一下“The quick brown fox jumps over the lazy dog” 的依存关系分析。

    依存关系也是token属性,spaCy有一个很好的API,可以访问不同的token属性。下面我们将打印出每个token的文本、其依存关系以及其parent(头)token的文本。

    出于分析的目的,我们关心任何具有nobj关系的token,表明它们是句子中的对象。在例句中,这意味着我们想要捕捉“狐狸”这个词。


命名实体识别

    最后是命名实体识别。命名实体是句子的专有名词。计算机已经非常擅长于判断在句子中是否存在实体,以及区分它们是什么类型的实体。

    spaCy可以处理document level的命名实体识别,因为一个实体的名称可以跨越多个token。使用IOB方案将分别表示单个token实体的一部分,分别表示token实体的开始、内部和外部。

    在下面的代码中,我们将打印初文档中所有命名实体。然后,我们将打印每个token、其IOB注释、其实体类型(如果它是实体的一部分)。我们将使用的例句是“Jill laughed at John Johnson."


实例解析:NLPing圣经

    上面提到的每种方法本身都很棒,但是当我们将这些方法结合起来提取遵循语言模式的信息时,自然语言处理的真正力量就显示出来了。我们可以使用词性标注、依存句法分析和命名实体识别来理解大量文本中的所有参与者(actors)及其行为(actions)。圣经是一个很好的例子,因为它很长且具有丰富的角色。

如下图所示,我们正在导入的数据包含每个圣经章节一个对象。经文被用作圣经部分的参考资料,通常包含一句或多句经文。我们将仔细阅读每一节,提取主题,确定它是否是一个人,并抽出这个人所做的动作。

    首先,让我们将圣经以JSON格式从GitHub存储库中载入。然后,我们将抽出每一节中的文本,通过spaCy进行依存解析和tagging,并将结果存入文档。

    我们用3分钟左右的时间将JSON中的文本解析成verse_docs,大约每秒160节。作为参考,以下是bible_JSON的前3行:


使用token属性

    为了提取actors和actions,我们将迭代一首诗中的所有token,并考虑3个因素: 

    1. token是句子的主语吗(它是依存关系nsubj吗?) 。

    2. 是一个动词token的parent吗?(这通常应该是真的,但是有时POS标记器和依存解析之间会有冲突,所以必须小心处理。另外,可能还存在其他一些奇怪的边缘案例(edge cases)。

    3. token是一个人名实体吗?我们不想提取任何非人的名词。(为了简单起见,我们只提取名字)

    如果我们的token满足上述三个条件,我们将收集以下属性: 

    1. 名词/实体token。

    2. 从名词到动词之间的短语(span/phrase)。

    3. 动词。

    4. 标准英文文本中动词出现的概率(在这里使用使用这些记录是因为这些概率通常都很小)。

     5. 诗号(verse number)。


分析

    我们已经抽取出了一份包含所有actor及其actions的列表。为了加快分析,需要做两件事:

    1、找出每个人最常见的action(动词)。

    2、找出每个人最独特的action。它们往往是英语文本中出现概率最低的动词。

    让我们看看按动词计数和最常见动词排列的top-15名actor。

    看起来圣经里的很多人都说过话,除了Solomon之外,他做了很多事情。

    从动词出现的概率来看,最独特的动词是什么呢?(先删除重复词,这样每个词都是独一无二的)

    看来我们似乎有一些有趣的新单词要学!我最喜欢的是discomfited和ravin。


可视化

    接下来让我们可视化我们的结果。选择行动最多的前50个名字,并在画出这些actions在整篇文章出现过的诗句。我们也将在圣经的每本书开始处画垂直线做标记。名字按首次出现的顺序排序。

    我们可以看一下在圣经中的那些部分,这些人物最活跃。

    我们将添加一些分隔符来区分圣经的不同章节。我本人不是圣经学者,所以我使用了如下分隔符:

    旧约:

    摩西五经,或法律书籍:Genesis, Exodus, Leviticus, Numbers, and Deuteronomy。

    旧约历史书:oshua, Judges, Ruth, 1 Samuel, 2 Samuel, 1 Kings, 2 Kings, 1 Chronicles, 2 Chronicles, Ezra, Nehemiah, and Esther。

    智慧文学:Job, Psalms, Proverbs, Ecclesiastes, and Song of Solomon。

    先知: Isaiah, Jeremiah, Lamentations, Ezekiel, Daniel, Hosea, Joel, Amos, Obadiah, Jonah, Micah, Nahum, Habakkuk, Zephaniah, Haggai, Zechariah, 和Malachi。

    新约:

    福音书:马修、马克、卢克和约翰。

    新约历史书:Acts

    书信: Romans, 1 Corinthians, 2 Corinthians, Galatians, Ephesians, Philippians, Colossians, 1 Thessalonians, 2 Thessalonians, 1 Timothy, 2 Timothy, Titus, Philemon, Hebrews, James, 1 Peter, 2 Peter, 1 John, 2 John, 3 John, and Jude.。

    预言/启示文学:启示

    此外,我们将用红色的指示线将旧约和新约分开。

    出现在圣经里面的Actions,按照它们第一次出现的位置排序。


可视化分析

    在圣经的开头,创世纪里,神被多次提到。

上帝不再被用作新约全书中的实体。

    我们在使徒行传中第一次看到保罗。(福音书之后的第一本书)

    圣经中的智慧和诗歌部分没有太多实体。

    耶稣的一生在福音书中被详细记载。

    彼拉多出现在每一部福音书的末尾。


这种方法的问题

    实体识别无法区分同名的两个不同的人。比如:King Saul(旧约),Paul(使徒)被称为Saul,直到Acts书的中间部分。

    有些名词不是实际的实体。

    一些名词可以用更多的上下文和全名。(彼拉多)


下一步

    一如既往,有一些方法可以扩展和改进这一分析。写这篇文章时,我想到了几个: 

    1 .使用依存关系查找实体之间的关系,并通过网络分析方法理解字符。

    2. 改进实体提取方法以捕获单个名称以外的实体。

    3. 对非个人实体及其语言关系进行分析——圣经中提到了哪些位置?


总结:

    我们只需要使用文本中的token级属性就可以做一些有趣的分析。在这篇博客文章中,我们介绍了三个关键的NLP工具:

    词性标注——这是什么类型的词?

    依存句法分析——这个词和这个句子中的其他词有什么关系?

    命名实体识别——这个词是专有名词吗?

    我们一起运用这三种工具来发现圣经中的主要角色是谁,以及他们采取了什么行动。对这些actor和及他么的动作进行了可视化,以了解每个actor的主要action在哪里。

往期精彩内容推荐

合成注意力推理神经网络-Christopher Manning-ICLR2018

精品文章分享-0818

人工智能的历史与未来

2018/2019/校招/春招/秋招/自然语言处理/深度学习/机器学习知识要点及面试笔记

(精品干货)ACL 2018最新论文归类(最全最细)分享

五一重磅-李飞飞团队主讲-CS231-2018(春)基于CNN的视觉识别课程分享

重磅干货-史上最全推荐系统资源分享

精品推荐-2018年Google官方Tensorflow峰会视频教程完整版分享

重磅干货-Richard S. Sutton-2018年强化学习教程免费下载

2018年10篇最值得阅读的深度学习文章

TensorFlow Dev Summit 2018视频分享

扫描下方二维码可以订阅哦!

DeepLearning_NLP

深度学习与NLP

       商务合作请联系微信号:lqfarmerlq

觉得还不错,记得点击下方小广告哦!!

登录查看更多
25

相关内容

词性(part-of-speech)是词汇基本的语法属性,通常也称为词类。词性标注就是在给定句子中判定每个词的语法范畴,确定其词性并加以标注的过程,是中文信息处理面临的重要基础性问题。在语料库语言学中,词性标注(POS标注或PoS标注或POST),也称为语法标注,是将文本(语料库)中的单词标注为与特定词性相对应的过程,[1] 基于其定义和上下文。
【ACL2020】多模态信息抽取,365页ppt
专知会员服务
144+阅读 · 2020年7月6日
【ACL2020-密歇根州立大学】语言和视觉推理的跨模态关联
【ACL2020-复旦大学NLP】异构图神经网络的文档摘要提取
专知会员服务
34+阅读 · 2020年5月1日
专知会员服务
155+阅读 · 2020年4月21日
NLP基础任务:文本分类近年发展汇总,68页超详细解析
专知会员服务
57+阅读 · 2020年1月3日
【论文推荐】文本分析应用的NLP特征推荐
专知会员服务
33+阅读 · 2019年12月8日
一文读懂依存句法分析
AINLP
16+阅读 · 2019年4月28日
一文了解成分句法分析
人工智能头条
15+阅读 · 2019年4月24日
别说还不懂依存句法分析
人工智能头条
23+阅读 · 2019年4月8日
一文读懂命名实体识别
人工智能头条
32+阅读 · 2019年3月29日
R语言自然语言处理:词性标注与命名实体识别
R语言中文社区
7+阅读 · 2019年3月5日
文本分析与可视化
Python程序员
9+阅读 · 2019年2月28日
命名实体识别(NER)综述
AI研习社
66+阅读 · 2019年1月30日
教你用Python进行自然语言处理(附代码)
数据派THU
6+阅读 · 2018年3月28日
Arxiv
21+阅读 · 2019年8月21日
Multi-Grained Named Entity Recognition
Arxiv
6+阅读 · 2019年6月20日
Arxiv
5+阅读 · 2018年5月10日
VIP会员
相关VIP内容
相关资讯
一文读懂依存句法分析
AINLP
16+阅读 · 2019年4月28日
一文了解成分句法分析
人工智能头条
15+阅读 · 2019年4月24日
别说还不懂依存句法分析
人工智能头条
23+阅读 · 2019年4月8日
一文读懂命名实体识别
人工智能头条
32+阅读 · 2019年3月29日
R语言自然语言处理:词性标注与命名实体识别
R语言中文社区
7+阅读 · 2019年3月5日
文本分析与可视化
Python程序员
9+阅读 · 2019年2月28日
命名实体识别(NER)综述
AI研习社
66+阅读 · 2019年1月30日
教你用Python进行自然语言处理(附代码)
数据派THU
6+阅读 · 2018年3月28日
Top
微信扫码咨询专知VIP会员