天天看点

使用 Python+spaCy 进行简易自然语言处理使用 Python+spaCy 进行简易自然语言处理

<b>本文讲的是</b>使用 Python+spaCy 进行简易自然语言处理<b>,</b>

<b></b>

自然语言处理(NLP)是人工智能领域最重要的部分之一。它在许多智能应用中担任了关键的角色,例如聊天机器人、正文提取、多语翻译以及观点识别等应用。业界 NLP 相关的公司都意识到了,处理非结构文本数据时,不仅要看正确率,还需要注意是否能快速得到想要的结果。

在这篇文章中,我会将 spaCy —— 这个现在最强大、最先进的 NLP python 库分享给你们。

spaCy 简介及安装方法

spaCy 的管道与属性

Tokenization

词性标注

实体识别

依存句法分析

名词短语

集成词向量计算

使用 spaCy 进行机器学习

与 NLTK 和 CoreNLP 对比

spaCy 由 cython(Python 的 C 语言拓展,旨在让 python 程序达到如同 C 程序一样的性能)编写,因此它的运行效率非常高。spaCy 提供了一系列简洁的 API 方便用户使用,并基于已经训练好的机器学习与深度学习模型实现底层。

spaCy 及其数据和模型可以通过 pip 和安装工具轻松地完成安装。使用下面的命令在电脑中安装 spaCy:

如果你使用的是 Python3,请用 “pip3” 代替 “pip”。

在安装好 spacy 之后,请运行下面的命令以下载所有的数据集和模型:

一切就绪,现在你可以自由探索、使用 spacy 了。

下面,我们会加载默认的模块(english-core-web 模块)。

这个 document 现在是 spacy.english 模型的一个 class,并关联上了许多的属性。可以使用下面的命令列出所有 document(或 token)的属性:

它会输出 document 中各种各样的属性,例如:token、token 的 index、词性标注、实体、向量、情感、单词等。下面让我们会对其中的一些属性进行一番探究。

spaCy 的 document 可以在 tokenized 过程中被分割成单句,这些单句还可以进一步分割成单词。你可以通过遍历文档来读取这些单词:

词性标注即标注语法正确的句子中的词语的词性。这些标注可以用于信息过滤、统计模型,或者基于某些规则进行文本解析。

来看看我们的 document 中所有的词性标注:

来看一看 document 中的最常用词汇。我已经事先写好了预处理和文本数据清洗的函数。

spaCy 拥有一个快速实体识别模型,这个实体识别模型能够从 document 中找出实体短语。它能识别各种类型的实体,例如人名、位置、机构、日期、数字等。你可以通过“.ents”属性来读取这些实体。

下面让我们来获取我们 document 中所有类型的命名实体:

spaCy 最强大的功能之一就是它可以通过调用轻量级的 API 来实现又快又准确的依存分析。这个分析器也可以用于句子边界检测以及区分短语块。依存关系可以通过“.children”、“.root”、“.ancestor”等属性读取。

解析所有居中包含“hotel”单词的句子的依存关系,并检查对于 hotel 人们用了哪些形容词。我创建了一个自定义函数,用于分析依存关系并进行相关的词性标注。

依存树也可以用来生成名词短语:

让我们创建一些词向量,然后对其做一些有趣的操作吧:

将 spaCy 集成进机器学习模型是非常简单、直接的。让我们使用 sklearn 做一个自定义的文本分类器。我们将使用 cleaner、tokenizer、vectorizer、classifier 组件来创建一个 sklearn 管道。其中的 tokenizer 和 vectorizer 会使用我们用 spaCy 自定义的模块构建。

现在让我们使用 spaCy 的解析器和一些基本的数据清洗函数来创建一个自定义的 tokenizer 函数。值得一提的是,你可以用词向量来代替文本特征(使用深度学习模型效果会有较大的提升)

现在可以创建管道,加载数据,然后运行分类模型了。

Spacy 是一个非常强大且具备工业级能力的 NLP 包,它能满足大多数 NLP 任务的需求。可能你会思考:为什么会这样呢?

让我们把 Spacy 和另外两个 python 中有名的实现 NLP 的工具 —— CoreNLP 和 NLTK 进行对比吧!

功能

Spacy

NLTK

Core NLP

简易的安装方式

Y

Python API

N

多语种支持

分词

分句

依存性分析

词向量计算集成

情感分析

共指消解

Tokenizer

Tagging

Parsing

spaCy

0.2ms

1ms

19ms

CoreNLP

2ms

10ms

49ms

4ms

443ms

准确率

Recall

F-Score

0.72

0.65

0.69

0.79

0.73

0.76

0.51

0.58

本文讨论了 spaCy —— 这个基于 python,完全用于实现 NLP 的库。我们通过许多用例展示了 spaCy 的可用性、速度及准确性。最后我们还将其余其它几个著名的 NLP 库 —— CoreNLP 与 NLTK 进行了对比。

如果你能真正理解这篇文章要表达的内容,那你一定可以去实现各种有挑战的文本数据与 NLP 问题。

希望你能喜欢这篇文章,如果你有疑问、问题或者别的想法,请在评论中留言。

<b>原文发布时间为:2017年7月21日</b>

<b>本文来自云栖社区合作伙伴掘金,了解相关信息可以关注掘金网站。</b>