Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一点点spaCy思想食物:易于使用的NLP框架

一点点spaCy思想食物:易于使用的NLP框架

作者头像
代码医生工作室
发布于 2019-06-22 06:34:59
发布于 2019-06-22 06:34:59
1.3K00
代码可运行
举报
文章被收录于专栏:相约机器人相约机器人
运行总次数:0
代码可运行

在下面的文章中,将了解如何以快速简便的方式开始使用spaCy。它对NLP领域的初学者爱好者特别有用,并提供逐步说明和明亮的例子。

spaCy是一个NLP框架,由Explosion AI于2015年2月发布。它被认为是世界上最快的。易于使用并具有使用神经网络的能力是其他优点。

步骤1:安装spaCy

打开终端(命令提示符)并写入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install spacy

步骤2:下载语言模型

编写以下命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python -m spacy download en_core_web_lg

模型(en_core_web_lg)是spaCy最大的英文模型,大小为788 MB。英语中有较小的模型,其他语言有一些其他模型(英语,德语,法语,西班牙语,葡萄牙语,意大利语,荷兰语,希腊语)。

步骤3:导入库并加载模型

在python编辑器中编写以下行之后,已准备好了一些NLP乐趣:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import spacynlp = spacy.load(‘en_core_web_lg’)

步骤4:创建示例文本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sample_text = “Mark Zuckerberg took two days to testify before members of Congress last week, and he apologised for privacy breaches on Facebook. He said that the social media website didnot take a broad enough view of its responsibility, which was a big mistake. He continued to take responsibility for Facebook, saying that he started it, runs it, and he is responsible for what happens at the company. Illinois Senator Dick Durbin asked Zuckerberg whether he would be comfortable sharing the name of the hotel where he stayed the previous night, or the names of the people who he messaged that week. The CEO was startled by the question, and he took about 7 seconds to respond with no.”doc = nlp(sample_text)

步骤5:拆分段落的句子

将这个文本分成句子,并在每个句子的末尾写下每个句子的字符长度:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sentences = list(doc3.sents)for i in range(len(sentences)): print(sentences[i].text)  print(“Number of characters:, len(sentences[i].text)) print(“ — — — — — — — — — — — — — — — — — -)

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Mark Zuckerberg took two days to testify before members of Congress last week, and he apologised for privacy breaches on Facebook.Number of characters: 130-----------------------------------He said that the social media website did not take a broad enough view of its responsibility, which was a big mistake.Number of characters: 118-----------------------------------He continued to take responsibility for Facebook, saying that he started it, runs it, and he is responsible for what happens at the company.Number of characters: 140-----------------------------------Illinois Senator Dick Durbin asked Zuckerberg whether he would be comfortable sharing the name of the hotel where he stayed the previous night, or the names of the people who he messaged that week.Number of characters: 197-----------------------------------The CEO was startled by the question, and he took about 7 seconds to respond with no.Number of characters: 85-----------------------------------

步骤6:实体识别

实体识别性能是NLP模型的重要评估标准。spaCy通过一行代码实现它并且非常成功:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from spacy import displacydisplacy.render(doc, style=’ent’, jupyter=True)

输出:

步骤7:标记化和词性标注

标记文本并查看每个标记的一些属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for token in doc: print({0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}.format( token.text, token.idx, token.lemma_, token.is_punct, token.is_space, token.shape_, token.pos_, token.tag_ ))

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Mark0markFalseFalseXxxxPROPNNNPZucker.5zucker.FalseFalseXxxxxPROPNNNPtook16takeFalseFalsexxxxVERBVBDtwo21twoFalseFalsexxxNUMCDdays25dayFalseFalsexxxxNOUNNNSto30toFalseFalsexxPARTTOtestify33testifyFalseFalsexxxxVERBVBbefore41beforeFalseFalsexxxxADPINmembers48memberFalseFalsexxxxNOUNNNSof56ofFalseFalsexxADPIN

同样它很容易应用并立即给出令人满意的结果。关于打印出的属性的简要说明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
text: token itselfidx: starting byte of the tokenlemma_: root of the wordis_punct: is it a punctuation symbol or notis_space: is it a space or notshape_: shape of the token to show which letter is the capitalpos_: the simple part of speech tagtag_: the detailed part of speech tag

什么是语音标签?

它是在将整个文本拆分成标记之后为每个标记分配标记的过程,如名词,动词,形容词。

步骤8:只有数字

当处理语言和文本时,数字来自何处?

由于机器需要将所有内容转换为数字以理解世界,因此每个单词都由NLP世界中的数组(单词向量)表示。这是spaCy词典中“man”的单词vector:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[-1.7310e-01,  2.0663e-01,  1.6543e-02, ....., -7.3803e-02]

spaCy的单词向量的长度是300.它可以在其他框架中有所不同。

在建立了单词向量之后,可以观察到上下文相似的单词在数学上也是相似的。这里有些例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scipy import spatialcosine_similarity = lambda x, y: 1 — spatial.distance.cosine(x, y)print(“apple vs banana:, cosine_similarity(nlp.vocab[‘apple’].vector, nlp.vocab[‘banana’].vector))print(“car vs banana:, cosine_similarity(nlp.vocab[‘car’].vector, nlp.vocab[‘banana’].vector))print(“car vs bus:, cosine_similarity(nlp.vocab[‘car’].vector, nlp.vocab[‘bus’].vector))print(“tomatos vs banana:, cosine_similarity(nlp.vocab[‘tomatos’].vector, nlp.vocab[‘banana’].vector))print(“tomatos vs cucumber:, cosine_similarity(nlp.vocab[‘tomatos’].vector, nlp.vocab[‘cucumber’].vector))

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apple vs banana:  0.5831844210624695car vs banana:  0.16172660887241364car vs bus:  0.48169606924057007tomatos vs banana:  0.38079631328582764tomatos vs cucumber:  0.5478045344352722

令人印象深刻的?当比较两种水果或蔬菜或两种车辆时,相似性更高。当两个不相关的物体如汽车与香蕉相比时,相似性相当低。当检查西红柿和香蕉的相似性时,观察到它高于汽车与香蕉的相似性,但低于西红柿对黄瓜和苹果对香蕉的反映现实。

步骤9:国王=女王+(男人 - 女人)?

如果一切都用数字表示,如果可以用数学方法计算相似性,可以做一些其他的计算吗?例如,如果从“男人”中减去“女人”并将差异添加到“女王”中,能找到“国王”吗?试试吧:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scipy import spatial cosine_similarity = lambda x, y: 1 — spatial.distance.cosine(x, y) man = nlp.vocab[‘man’].vectorwoman = nlp.vocab[‘woman’].vectorqueen = nlp.vocab[‘queen’].vectorking = nlp.vocab[‘king’].vectorcalculated_king = man — woman + queenprint(“similarity between our calculated king vector and real king vector:, cosine_similarity(calculated_king, king))

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
similarity between our calculated king vector and real king vector: 0.771614134311676

可以尝试使用不同的替代词,并观察类似的有希望的结果。

结论

本文的目的是对spaCy框架进行简单而简要的介绍,并展示一些简单的NLP应用程序示例。希望这是有益的。可以在设计精良且信息丰富的网站中找到详细信息和大量示例。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 相约机器人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何用Python处理自然语言?(Spacy与Word Embedding)
本文教你用简单易学的工业级Python自然语言处理软件包Spacy,对自然语言文本做词性分析、命名实体识别、依赖关系刻画,以及词嵌入向量的计算和可视化。
王树义
2018/08/22
2.6K0
如何用Python处理自然语言?(Spacy与Word Embedding)
如何通过余弦相似度判断两个单词的嵌入是否相似
笔者最近在学习 Transformer 模型的设计,书中对如何通过余弦相似度,判断两个单词的嵌入是否相似,只是简单提了一下,没有深入介绍。所以笔者花了一些时间在网上查了资料,了解了一下这个概念的更多细节。
编程小妖女
2025/04/05
1360
如何通过余弦相似度判断两个单词的嵌入是否相似
05.序列模型 W2.自然语言处理与词嵌入(作业:词向量+Emoji表情生成)
这些结果反映了某些性别歧视。例如,“computer 计算机”更接近“man 男人”,“literature 文学”更接近“woman 女人”。
Michael阿明
2021/02/19
7640
【Kaggle微课程】Natural Language Processing - 3. Word Vectors
learn from https://www.kaggle.com/learn/natural-language-processing
Michael阿明
2021/02/19
4830
【Kaggle微课程】Natural Language Processing - 3. Word Vectors
【RAG入门教程02】Langchian的Embedding介绍与使用
词向量是 NLP 中的一种表示形式,其中词汇表中的单词或短语被映射到实数向量。它们用于捕获高维空间中单词之间的语义和句法相似性。
致Great
2024/06/10
4450
【RAG入门教程02】Langchian的Embedding介绍与使用
整合文本和知识图谱嵌入提升RAG的性能
我们以前的文章中介绍过将知识图谱与RAG结合的示例,在本篇文章中我们将文本和知识图谱结合,来提升我们RAG的性能
deephub
2024/05/10
4960
整合文本和知识图谱嵌入提升RAG的性能
序列模型第二周作业1:Operations on word vectors
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Solo95/article/details/86556865
Steve Wang
2019/05/27
1.1K0
基于MindSpore NLP的LLM应用开发 - - 五点
1.什么是RAG:RAG(Retrieval-Augmented Generation)技术的原理与实践
用户10497140
2025/01/19
1040
BERT中的词向量指南,非常的全面,非常的干货[通俗易懂]
在本文中,我将深入研究谷歌的BERT生成的word embeddings,并向你展示如何通过BERT生成自己的word embeddings。
全栈程序员站长
2022/06/28
2.7K0
BERT中的词向量指南,非常的全面,非常的干货[通俗易懂]
Chunking:基于大模型RAG系统中的文档分块
【引】“枯萎,无法回避,如人之生老病死;荒芜,无法接受,如碌碌无为一生。” 这是周六回乡下除草的感受。有所得,有所感,对工程技术也是如此。
半吊子全栈工匠
2024/11/07
7170
Chunking:基于大模型RAG系统中的文档分块
spaCy 2.1 中文模型下载
spaCy是最流行的开源NLP开发包之一,它有极快的处理速度,并且预置了词性标注、句法依存分析、命名实体识别等多个自然语言处理的必备模型,因此受到社区的热烈欢迎。中文版预训练模型包括词性标注、依存分析和命名实体识别,由汇智网提供
用户1408045
2019/07/28
4.2K0
Operations_on_word_vectors_v2a
Welcome to your first assignment of this week!
列夫托尔斯昊
2020/08/25
1.9K0
Operations_on_word_vectors_v2a
教程 | 比Python快100倍,利用spaCy和Cython实现高速NLP项目
相关 Jupyter Notebook 地址:https://github.com/huggingface/100-times-faster-nlp
小小科
2018/07/31
1.6K0
教程 | 比Python快100倍,利用spaCy和Cython实现高速NLP项目
动手学深度学习(八) NLP 文本预处理
文本是一类序列数据,一篇文章可以看作是字符或单词的序列,本节将介绍文本数据的常见预处理步骤,预处理通常包括四个步骤:
致Great
2020/02/25
8360
【他山之石】python从零开始构建知识图谱
“他山之石,可以攻玉”,站在巨人的肩膀才能看得更高,走得更远。在科研的道路上,更需借助东风才能更快前行。为此,我们特别搜集整理了一些实用的代码链接,数据集,软件,编程技巧等,开辟“他山之石”专栏,助你乘风破浪,一路奋勇向前,敬请关注。
马上科普尚尚
2020/12/15
4K0
【他山之石】python从零开始构建知识图谱
NLP研究者的福音—spaCy2.0中引入自定义的管道和扩展
以前版本的spaCy很难拓展。尤其是核心的Doc,Token和Span对象。他们没有直接实例化,所以创建一个有用的子类将涉及很多该死的抽象(想想FactoryFactoryConfigurationFactory类)。继承无法令人满意,因为它没有提供自定义组合的方法。我们希望让人们开发spaCy的扩展,并确保这些扩展可以同时使用。如果每个扩展都需要spaCy返回一个不同Doc子集,那就没办法实现它了。为了解决这个问题,我们引入了一个新的动态字段(dynamic field),允许在运行时添加新的特性,属性和
AiTechYun
2018/03/05
2.2K0
用Python从头开始构建一个简单的聊天机器人(使用NLTK)
我相信你一定听说过Duolingo:一款流行的语言学习应用。它以其创新的外语教学风格而广受欢迎,其概念很简单:一天五到十分钟的互动训练就足以学习一门语言。
liuxuewen
2018/10/12
3.9K0
用Python从头开始构建一个简单的聊天机器人(使用NLTK)
5分钟NLP - SpaCy速查表
SpaCy 是一个免费的开源库,用于 Python 中的高级自然语言处理包括但不限于词性标注、dependency parsing、NER和相似度计算。它可帮助构建处理和理解大量文本的应用程序可用于多种方向,例如信息提取、自然语言理解或为深度学习提供文本预处理。
deephub
2022/03/12
1.5K0
5分钟NLP - SpaCy速查表
使用 spacy 进行自然语言处理(一)
自然语言处理(NLP) 是人工智能方向一个非常重要的研究领域。 自然语言处理在很多智能应用中扮演着非常重要的角色,例如:
ke1th
2019/05/26
1.7K0
如何对非结构化文本数据进行特征工程操作?这里有妙招!
文本数据通常是由表示单词、句子,或者段落的文本流组成。由于文本数据非结构化(并不是整齐的格式化的数据表格)的特征和充满噪声的本质,很难直接将机器学习方法应用在原始文本数据中。在本文中,我们将通过实践的方法,探索从文本数据提取出有意义的特征的一些普遍且有效的策略,提取出的特征极易用来构建机器学习或深度学习模型。 研究动机 想要构建性能优良的机器学习模型,特征工程必不可少。有时候,可能只需要一个优秀的特征,你就能赢得 Kaggle 挑战赛的胜利!对于非结构化的文本数据来说,特征工程更加重要,因为我们需要将文
AI研习社
2018/03/16
2.4K0
如何对非结构化文本数据进行特征工程操作?这里有妙招!
推荐阅读
相关推荐
如何用Python处理自然语言?(Spacy与Word Embedding)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验