[自然语言处理] 自然语言处理库spaCy使用指北

1 背景介绍与spaCy安装

1.1 自然语言处理简介

自然语言处理(Natural Language Processing,简称NLP)是一门研究人类语言与计算机之间交互的领域,旨在使计算机能够理解、解析、生成和处理人类语言。NLP结合了计算机科学、人工智能和语言学的知识,通过各种算法和技术来处理和分析文本数据。近年来,随着深度学习技术的发展,神经网络模型在自然语言处理(NLP)领域取得了重大的突破。其中,循环神经网络(RNN)、长短时记忆网络(LSTM)和Transformer等模型都发挥了关键作用。这些模型为NLP任务带来了更好的性能和效果,推动了NLP的发展和应用。

NLP主要知识结构如下图所示,图片来自网络。

NLP的应用非常广泛,涵盖了多个领域,如机器翻译、信息提取、文本分类、情感分析、自动摘要、问答系统、语音识别和语音合成等。以下是NLP常用的技术和方法:

  • 分词:将连续的文本分割成有意义的词语或标记,是许多NLP任务的基础。
  • 词性标注:为文本中的每个词语赋予其相应的词性,如名词、动词、形容词等。
  • 句法分析:分析句子的语法结构,识别出句子中的短语、修饰语和依存关系等。
  • 语义分析:理解文本的意义和语义关系,包括命名实体识别、语义角色标注和语义解析等。
  • 机器翻译:将一种语言的文本自动翻译成另一种语言。
  • 文本分类:将文本按照预定义的类别进行分类,如垃圾邮件分类、情感分类等。
  • 信息提取:从结构化和非结构化文本中提取出特定的信息,如实体关系抽取、事件抽取等。
  • 问答系统:通过对用户提出的问题进行理解和回答,提供准确的答案或相关信息。
  • 情感分析:识别和分析文本中的情感倾向,如正面、负面或中性情感。
  • 文本生成:使用NLP技术生成自然语言文本,如自动摘要生成、对话系统和机器作文等。

在众多自然语言处理库中,spaCy库提供了超过73种语言的支持,并为25种语言提供了训练代码。该库提供了一系列简单易用的模型和函数接口,包括分词、词性标注等功能。用户还可以使用PyTorch、TensorFlow等框架在spaCy创建自定义模型,以满足特定需求。spaCy支持的语言模型见spaCy-models

事实上,有一些自然语言处理开源库,例如HuggingFace的TransformersPaddleNLPNLTK,相较于spaCy来说更为专业且性能更好。然而,对于简单的应用而言,spaCy更为适合,因为它具有简单易用、功能全面,同时也提供了大量面向多语言预训练模型的优点。此外,随着以GPT-3为代表的语言大模型在自然语言处理领域取得了巨大的突破和成功,原本一些自然语言处理库在精度上实际不如语言大模型。然而,使用语言大模型需要庞大的推理资源,而在对精度要求不高的场景中,使用spaCy这类小巧的自然语言处理库依然是很合适的选择。

1.2 spaCy安装

spaCy采用采用模块和语言模块一起安装的模式。spaCy的设计目标之一是模块化和可定制性。它允许用户仅安装必需的模块和语言数据,以减少安装的整体大小和减轻资源负担。如果使用spaCy的模型,需要通过pip安装模型所需的模型包来使用预训练模型。这是因为spaCy的模型包含了训练后的权重参数和其他必要的文件,这些文件在安装时被存储在特定位置,而不是以单个文件的形式存在。如果需要进行模型训练和gpu运行则需要选定对应的安装包。将模块和语言模块一起安装,可以简化spaCy的配置过程。用户无需单独下载和配置语言数据,也不需要手动指定要使用的语言模型。这样可以减少用户的工作量和安装过程中的潜在错误。但是可定制性就很弱了,所以spaCy适合精度要求不高的简单使用,工程应用选择其他大型自然语言处理库更加合适。

为了实现这一目标,spaCy提供了配置化的安装指令选择页面供用户使用。安装指令选择页面地址为spaCy-usage。下图展示了本文的安装配置项,本文采用了最简单的cpu推理模式。

spaCy安装完毕后,运行以下代码即可判断spaCy及相对应的语言模型是否安装成功。

 
# jupyter notebook环境去除warning
import warnings
warnings.filterwarnings("ignore")
import spacy
spacy.__version__
 
'3.6.0'
 
import spacy
# 加载已安装的中文模型
nlp = spacy.load('zh_core_web_sm')
# 执行一些简单的NLP任务
doc = nlp("早上好!")
for token in doc:
# token.text表示标记的原始文本,token.pos_表示标记的词性(part-of-speech),token.dep_表示标记与其他标记之间的句法依存关系
print(token.text, token.pos_, token.dep_)
 
早上 NOUN nmod:tmod
好 VERB ROOT
! PUNCT punct

2 spaCy快速入门

该部分内容和图片主要来自于spacy-101的总结。spaCy提供的主要函数模块分为以下模块,接下来分别对这些模块进行介绍。

名称 描述
Tokenization 将文本分割成单词、标点符号等。
Part-of-speech (POS) Tagging 给标记分配词性,如动词或名词。
Dependency Parsing 分配句法依存标签,描述个别标记之间的关系,如主语或宾语。
Lemmatization 分配单词的基本形式。例如,“was”的基本形式是“be”,“rats”的基本形式是“rat”。
Sentence Boundary Detection (SBD) 查找和分割单个句子。
Named Entity Recognition (NER) 对命名的“现实世界”对象进行标记,如人物、公司或地点。
Entity Linking (EL) 将文本实体与知识库中的唯一标识符进行消岐。
Similarity 比较单词、文本片段和文档之间的相似程度。
Text Classification 为整个文档或文档的部分分配类别或标签。
Rule-based Matching 根据其文本和语言注释查找标记序列,类似于正则表达式。
Training 更新和改进统计模型的预测能力。
Serialization 将对象保存到文件或字节字符串中。

2.1 分词

在处理过程中,spaCy首先对文本进行标记,即将其分段为单词、标点符号等Token。这是通过应用每种语言特有的规则来实现的。Token表示自然语言文本的最小单位。每个Token都代表着文本中的一个原子元素,通常是单词或标点符号。

 
import spacy
nlp = spacy.load("zh_core_web_sm")
# 使对文本进行一键处理
doc = nlp("南京长江大桥是金陵四十景之一!")
# 遍历doc中的每个Token
for token in doc:
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值