欢迎光临散文网 会员登陆 & 注册

使用spaCy的NLP – 如何开始自然语言处理

2023-07-02 07:17 作者:晓枫Motivation  | 我要投稿

在当今数据驱动的世界中,每天都会生成大量非结构化文本数据。为了帮助处理所有这些数据,自然语言处理 (NLP) 作为一项变革性技术应运而生。

NLP 是人工智能的一个子领域。它专注于使机器能够理解、解释和生成人类语言。

在本教程中,我们将探讨 NLP 的基本概念,并研究 spaCy 的特定实现。这将展示其彻底改变各个行业的巨大潜力。

在开始 spaCy 之前,让我们快速了解一下自然语言处理。

(更|多优质内|容:java567 点 c0m)


什么是自然语言处理?

NLP 涉及语言学、计算机科学和机器学习的交叉领域。其主要目标是弥合人类语言和机器理解之间的差距。

NLP 涵盖广泛的任务,包括文本分类、命名实体识别 (NER)、情感分析等。

文本分类

这涉及根据文本内容将文本分类为预定义的类或类别。

这在情感分析、垃圾邮件检测、主题分类等方面都有应用。

命名实体识别 (NER)

这涉及从文本中识别和提取命名实体,例如名称、组织、位置和日期。

NER 对于信息提取、问答系统和推荐引擎至关重要。

情感分析

这涉及确定一段文本中表达的情绪或情绪,无论是积极的、消极的还是中性的。

情感分析广泛用于品牌监控、客户反馈分析和社交媒体监控。

自然语言处理的挑战

尽管 NLP 取得了重大进步,但仍然存在一些挑战:

  1. 人类语言本质上是模棱两可的,这使得机器有时很难准确理解和解释含义。

  2. 不同的语言、方言、俚语和文化差异增加了 NLP 任务的复杂性,要求模型针对特定语言且具有适应性。

  3. 捕获上下文信息并理解文本的底层语义仍然是 NLP 算法的重大挑战。

  4. NLP 模型严重依赖训练数据,有偏见或低质量的数据可能会导致有偏见或不准确的预测,从而引发潜在的道德问题。

什么是spaCy?

在自然语言处理 (NLP) 领域,spaCy 已成为一个强大而高效的库,彻底改变了开发人员和研究人员处理文本数据的方式。

spaCy 是一个开源 Python 库,专为词性标记、命名实体识别、依存解析等 NLP 任务而设计。

它的开发目标是提供工业强度的性能,同时仍然易于使用并集成到现有工作流程中。

spaCy 基于最新研究并采用最先进的技术,使其成为初学者和经验丰富的 NLP 从业者的理想选择。

spaCy 的主要特点

语言注释

spaCy 提供了广泛的预训练模型,可以快速分析文本并提取各种语言特征。这些功能包括词性标签、命名实体、句法依赖、句子边界等等。

预训练模型在大型语料库上进行训练,具有很高的准确性,使开发人员能够专注于其特定的 NLP 任务,而不必担心从头开始训练模型。

标记化和句子分割

标记化是 NLP 中的关键步骤,它将文本分解为单个单词或子词。spaCy 的标记化算法非常高效且特定于语言,可实现准确且可定制的标记化。

spaCy 还可以自动将文本分割成句子,从而可以轻松地在粒度级别上处理文本数据。

实体识别

命名实体识别 (NER) 是识别和分类命名实体(例如人员、组织、位置、日期等)的任务。

spaCy 的 NER 功能非常出色,为多种语言提供开箱即用的支持。它允许开发人员使用自己的标记数据训练自定义 NER 模型,从而实现特定领域的实体识别。

依存分析

依存句法分析涉及通过确定单词之间的关系来分析句子的语法结构。

spaCy的依存解析基于高效的算法并实现了高精度。它提供了丰富的语法注释,包括每个词的词头、依存标签和子树结构。

这些信息对于信息提取、问答和情感分析等任务非常宝贵。

定制和可扩展性

spaCy 的主要优势之一是其灵活性和可扩展性。开发人员可以轻松定制和微调 spaCy 的模型,以适应特定领域或提高特定任务的性能。

该库还提供了一个简单的 API,用于添加自定义组件,例如新的分词器、实体识别器或句法解析器,使其成为研究和开发的多功能工具。

性能和可扩展性

spaCy 以其卓越的性能和可扩展性而闻名。该库是用 Cython 实现的,Cython 是一种编程语言,可将类似 Python 的代码编译为高效的 C/C++ 模块。这使得 spaCy 能够极快地处理文本数据,使其适合大规模 NLP 应用程序和实时系统。

spaCy 中的命名实体识别示例

让我们尝试使用 spaCy 来实现 NER。

我将使用 Google Colab。Google Colab 是一项托管的 Jupyter Notebook 服务,无需设置即可使用,并提供对计算资源(包括 GPU 和 TPU)的免费访问。

如果您愿意,您可以使用 Kaggle 或在您自己的计算机上运行它。由于 spaCy 是一个预先训练的模型,因此开始时不需要太多的计算能力。

但如果您正在处理机器学习问题,我建议您在计算机上安装 Anaconda。

导航至colab.research.google点 com并单击“新建笔记本”按钮。

Google 协作控制台

在标题上,输入文件的名称。确保您的文件名以.pynb扩展名结尾。

更改文件名并创建代码块

单击“+代码”按钮创建代码块。

默认情况下,Google Colab 预装了一些机器工具和 Python 库。因此,我们不必担心安装和准备好我们的开发环境。

但它不随spacy库一起提供。

在代码块中运行以下命令来安装spacy库。

 !pip install -U spacy

安装spacy库的命令

安装spacy库

选择您想要的选项并继续。它们之间的主要区别在于训练的数据量。

  • 小 – en_core_web_sm

  • 中 – en_core_web_md

  • 宽 – en_core_web_lg

  • 变压器 – en_core_web_trf

我们的下一步是下载其中一个模型。添加代码块并从上面的列表中选择任何代码块并运行以下命令。我将下载大模型。

 !python -m spacy download en_core_web_lg

下载预训练spacy模型的命令

下载预训练模型

添加代码块并运行以下命令来加载模型。

 import spacy
 nlp = spacy.load("en_core_web_lg")

加载spacy模型

好吧。我们都准备好了。

让我们尝试从句子中分割实体。添加代码块并运行以下代码块:

 doc = nlp("Apple is looking at buying U.K. startup for $1 billion")
 
 for ent in doc.ents:
     print(ent.text, ent.start_char, ent.end_char, ent.label_)

查找并打印给定文本中的实体

在上面的代码中,我们要求 spaCy 模型从“Apple is考虑以 10 亿美元收购英国初创公司”这句话中查找实体。

然后,我们迭代每个实体,并显示实体、句子中的开始和结束字符索引以及实体标签。

您应该看到以下输出:

命名实体识别示例 1 来自spaCy

上面的输出描述了“Apple”是一个实体,它出现在给定句子中的索引 0 到索引 5 之间,并且它是一个组织 (ORG)。

如果您对索引感到困惑,请记住它从 0 开始。我们给定输入文本中的前 5 个字符是“Apple”。所以,它是从0到5。

同样,它将“英国”视为一个实体,并将其描述为地缘政治实体(GPE)。它将“10 亿美元”标记为货币 (MONEY) 实体。

这次我们尝试一个不同的句子。

“印度总理纳伦德拉·莫迪在华盛顿特区会见了美国总统乔·拜登”。

让我们看看它找到了什么实体。添加代码块并运行以下代码:

 doc = nlp("Prime Minister of India Narendra Modi met US President Joe Biden at Washington DC")
 
 for ent in doc.ents:
     print(ent.text, ent.start_char, ent.end_char, ent.label_)

从不同的句子中查找实体

命名实体识别示例2来自spaCy

太棒了,不是吗?

它将“印度”、“美国”和“华盛顿特区”确定为地缘政治实体 (GPE)。它还将“纳伦德拉·莫迪”和“乔·拜登”识别为个人实体 (PERSON)。

尝试输入不同的句子并进行尝试。我相信您会对它识别实体的能力感到惊讶。

结论

在本教程中,我们通过使用 spaCy 库的简单实现了解了 NLP。

自然语言处理在改变我们与机器交互和分析大量文本数据的方式方面拥有巨大的潜力。spaCy 因其强大的功能、易用性和卓越的性能而成为许多 NLP 从业者的首选库。

(更|多优质内|容:java567 点 c0m)


使用spaCy的NLP – 如何开始自然语言处理的评论 (共 条)

分享到微博请遵守国家法律