前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
shell脚本快速入门之-----循环(for、while、until)
若指定用户不在线(未登陆系统),则每10分钟(实验中为了测试效果,可改为3s)试一次,直至用户登录系统后再发送信息 用户名与消息通过为止参数传递给脚本
不吃小白菜
2020/09/03
1.2K0
shell脚本快速入门之-----循环(for、while、until)
shell循环语句
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163938.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/15
6480
shell循环语句
Linux Shell脚本编程提高
Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核,不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序.Shel编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果,下面我们会介绍Shell-Script的编写.
王瑞MVP
2022/12/28
3.3K0
Linux Shell脚本编程提高
快速掌握shell脚本的各种循环语句
Until是当条件表达式不成立时,就会进入循环,当条件表达式成立时就终止循环 #语法格式
老油条IT记
2020/09/04
7.5K0
流程控制-while循环
while在shell中也是负责循环的语句,和for一样。因为功能一样,很多人在学习和工作中的脚本遇到循环到底该使用for还是while呢?很多人不知道,就造就了有人一遇到循环就是for或者一位的while。我个人认为可以按照我说的这个思想来使用,既知道循环次数就可以用for,比如说一天需要循环24次;如果不知道代码要循环多少次,那就用while,比如我们作业中要求写的猜数字,每个人猜对一个数字的次数都是不能固定的,也是未知的。所以这样的循环我就建议大家用while了。
星哥玩云
2022/09/08
3040
shell脚本快速入门之-----shell脚本练习100例!!!
1、可以采用冒泡排序的方式。 2、双层循环,外层控制把数组中每一个元素都取出来,内层循环采用当前元素和向后的数组元素比大小,最小的值和当前元素交换的方式 3、输入成绩这一块,因为数组已经有序了,只要拿输入元素和数组中元素相比,如果数组中元素大于当前输入元素,记住当前位置,当前位置数组后面的元素都向后移一位。
不吃小白菜
2020/09/03
22.6K2
Shell while循环和until循环语句
while 循环语句的基本语法 while <条件表达式> do 指令... done 示例:显示每分钟负载情况 #!/bin/bash while true do uptime >> uptime.txt sleep 5 done 图片 系统显示时间 22:29:31 up 6 days 距上次启动开始系统运行时间 1 user 一个连接数 load average 分别表示1分钟 5分钟 15 分钟系统的平均负载 示例:打印54321 #!/bin/bash i=5
云计算小黑
2022/12/28
8980
Shell while循环和until循环语句
shell脚本编程之路3
描述:我们学过的每一种高级编程语言,都在存在流程/分支选择/循环等结构,同样shell编程中也有这是与windows上的bat编程不一样的点;shell选择分支嵌套建议不超过三层,为了执行的效率和其他人容易读懂;
全栈工程师修炼指南
2022/09/28
4770
shell脚本编程之路3
08·Shell编程-循环
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
3550
【趣学程序】Linux流程语句
linux命令流程语句 if语句 在linux中可以通过help命令查看if的格式 [root@CentOS6 shell]# help ifif: if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi 解释: if 后面跟命令 ; then 如果命令成立,在这里可以在执行命令; [还可以写多个 elif 语句] [最后也可以写 else 语句] 最终以 fi 结束i
趣学程序-shaofeer
2019/07/27
6350
shell 循环语句[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163943.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/15
5120
101个shell脚本
emm。。这个脚本是因为tomcat没有自带的能够给service开机启动的脚本,我就琢磨着自己写了一个简单的启动脚本,如下:
端碗吹水
2020/09/23
1.4K0
101个shell脚本
Linux 【Shell脚本经典案例】
===============Talk is cheap, show me the code,bye-bye================
IT茂茂
2020/09/17
3.3K0
Linux 【Shell脚本经典案例】
学习笔记0615----shell脚本
每隔1分钟检查一下系统负载,当系统的负载大于10的时候,发一封邮件(监控脚本) 最小单元是任务计划 cron
嘻哈记
2020/11/24
8090
shell教程之循环语句for,while,until用法
一、for循环 for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done 之间),直到所有元素取尽为止。
Java架构师必看
2021/06/10
1.2K0
shell教程之循环语句for,while,until用法
Shell笔记3:循环结构,服务脚本设计,函数及中断控制
1.循环结构 a.for循环 语法结构及特点 for 变量名 in 值列表 do 命令序列 done
陪你听风
2021/03/31
4720
一线工作高频率使用的shell脚本汇总
哈喽大家好!我是波哥! ---- 1、检测两台服务器指定目录下的文件一致性 #!/bin/bash ###################################### 检测两台服务器指定目录下的文件一致性 ##################################### #通过对比两台服务器上文件的md5值,达到检测一致性的目的 dir=/data/web b_ip=192.168.88.10 #将指定目录下的文件全部遍历出来并作为md5sum命令的参数,进而得到所有文件的md5值,并写
IT运维技术圈
2022/06/27
3210
Linux shell脚本使用while循环执行ssh的注意事项
如果要使用ssh批量登录到其它系统上操作时,我们会采用循环的方式去处理,那么这里存在一个巨大坑,你必须要小心了。 一、场景还原: 我现在是想用一个脚本获取一定列表服务器的运行时间,首先我建立一个名字为ip.txt的IP列表(一个IP一行),再建好密钥实现不用密码直接登录。然后写脚本如下: #!/bin/bash while read ips; do echo $ips; done < ip.txt 脚本实现了逐行读取列表中的IP,但是: #!/bin/bash while read i
小小科
2018/05/03
4.1K0
Shell for循环和select循环语句
for循环格式 for 变量名 in 变量取值列表 do 指令 done 示例 打印5 4 3 2 1 5个数字 #!/bin/bash for i in 5 4 3 2 1 do echo $i done 方法二 #!/bin/bash for (( i=5;i>0;i--)) do echo $i done PS:改名命令rename命令 jpg格式的图片改成png rename ".jpg" ".png" "*.jpg" 打印九九乘法表 #!/bin/bash for num1
云计算小黑
2022/12/28
6940
shell编程中 for while until循环的使用方法及案例
Shell脚本编程中,有几种常见的循环结构,包括for循环、while循环和until循环,总的来说,循环在Shell编程中扮演着至关重要的角色,它们使得自动化任务变得更加容易,提高了效率,并且可以处理各种各样的编程需求。
神秘泣男子
2024/06/03
5050
shell编程中 for while until循环的使用方法及案例
相关推荐
shell脚本快速入门之-----循环(for、while、until)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验