依存句法分析

依存句法分析

了解语言结构的不同角度就是依存句法结构,通过找到句子中每一个词语所依赖的部分来描述句子结构。如果一个词修饰另一个词,它就是那个词的依赖。例如barking dog中,barking就是dog的依赖。通常用箭头来表示他们的依赖关系,下面是一个画出依存结构的句子:


虽然这种做法低效,速度慢,而且没有基于短语结构文法的规则普适性好,但是这个行为形成了丰富的语言学资源,而且对于目前大火的机器学习来说,这就是我们梦寐以求的具有ground-truth的标注好的数据,这是一个相当具有前瞻性的工程。
在机器学习领域,依存树可以合理地解释句子结构。建议一个可见的、有标注的依存树,最后会给我们提供很多的优势,依存树存在的有点如下:
(1) 首先它可以被重复利用;而每个人写的规则却不同,所以规则不能被重复利用,依存树却可以。
(2) 依存树库使用了真实的、覆盖面广的数据;而人们写规则时只是依靠对语法的直觉判断,容易考虑不周。
(3) 依存树不仅仅能给出所有的可能性,还能给出各种可能性同事发生的概率。
(4) 最重要的一点是他可以评估我们构建的任何系统,因为他给了我们具有ground truth的标准数据。

依存句法树


箭头的初始位置为被修饰的,称为:监督项(头部)
箭头的指向位置是修饰词,称为:下属项(独立项)
上图箭头指向的词语是依赖者,箭头初始位置的词语是被依赖者。也可以根据自己写喜好来颠倒用途。

依存句法分析方法 的 效果评估方法

评测指标有两种。一种是标准是UAS,此标准不考虑标签只考虑弧;另一种标准是LAS,此标准同时考虑标签和弧。
具体例子如下:

英文依存语法关系集

其中‘ROOT’,‘case’,‘det’,'nmod’等符号就是语法关系。
目前国际公认的语法关系定义框架是Universal Dependencies (UD)。英语的通用语法关系有37种:

语法关系解释链接
nsubj名词主语nsubj
nsubjpass被动名词主语nsubjpass
obj宾语obj
iobj间接宾语iobj
csubj从句主语csubj
csubjpass被动从句主语csubjpass
ccomp从句补语ccomp
xcomp开放式补语xcomp
nummod数词修饰语nummod
appos介词修饰语appos
nmod标称修饰语nmod
acl名词从句修饰语acl
acl:relcl相对从句修饰语acl:relcl
amod形容词修饰语amod
det限定词det
det:predet前位限定词det:predet
neg否定修饰符neg
case格标记case
nmod标称修饰符nmod
nmod:npmod名词短语作为副词修饰语nmod:npmod
nmod:tmod时间修饰符nmod:tmod
nmod:poss所有格名词修饰符nmod:poss
advcl状语从句修饰语advcl
advmod状语修饰语advmod
compound复合标识符compound
compound:prt动词短语介副词compound:prt
flat由多个名词性元素组成的专有名词flat
fixed固定的语法化表达式fixed
foreign外来词foreign
goeswithgoeswith
list并列关系list
dislocated错位的元素dislocated
parataxis副词关系parataxis
orphan省略关系orphan
reparandum(演讲中)不流利的地方reparandum
vocative 呼唤(人们)vocative
discourse话语元素discourse
expl专指expl
aux辅助词aux
auxpass被动辅助词auxpass
cop系词cop
mark标记词mark
punct标点符号punct
conj连词conj
cccoordinationcc
cc:preconjpreconjunctcc:preconj
root根节点root
dep无法确定两个词之间的更精确的依赖关系dep

Spacy依存分析代码

spaCy模块有4个非常重要的类:

  • Doc:Doc对象由Tokenizer构造,然后由管道的组件进行适当的修改。doc对象是token的序列
  • Span:Span对象是Doc对象的一个切片。
  • Token:在自然语言处理中,把一个单词,一个标点符号,一个空格等叫做一个token。
  • Vocab:存储词汇表和语言共享的数据。词汇表使用Lexeme对象和StringStore对象来表示。

功能

  1. 找出活动的管道组件
nlp.pipe_names
  1. 禁用/添加管道组件
nlp.disable_pipes('tagger', 'parser') # 禁用
nlp.add_pipe("parser") # 添加
  1. 模型
# 方式一
import spacy
nlp = spacy.load("zh_core_web_sm")
# 方式二
import zh_core_web_sm
nlp = zh_core_web_sm.load()
  1. 依存分析
# -*- coding:utf8 -*-
import spacy
 
nlp = spacy.load('zh_core_web_sm')
 
doc = nlp('猴子喜欢香蕉')
for token in doc:
    print("{0}/{1} <--{2}-- {3}/{4}".format(
            token.text, token.tag_, token.dep_, token.head.text, token.head.tag_))
 
>>> 猴子/NN <--nsubj-- 喜欢/VV
>>> 喜欢/VV <--ROOT-- 喜欢/VV
>>> 香蕉/NN <--dobj-- 喜欢/VV
  1. 可视化
from spacy import displacy
txt = '''In particle physics, a magnetic monopole is a hypothetical elementary particle.'''
displacy.render(nlp(txt), style='dep', jupyter=True, options = {'distance': 90})

from spacy import displacy
displacy.render(doc, style='ent', jupyter=True)

参考

https://blog.csdn.net/u011828519/article/details/84565920

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于依存句法分析,Python 中有一些流行的库可以使用。其中最常用的是 NLTK(自然语言工具包)和 SpaCy。这两个库提供了依存句法分析的功能。 使用 NLTK 库,你需要先安装 NLTK 并下载相应的数据包。然后可以使用 `nltk.parse` 模块来进行句法分析,其中包括依存句法分析。 下面是一个使用 NLTK 进行依存句法分析的示例代码: ```python import nltk # 下载依存句法分析所需的数据包 nltk.download('punkt') nltk.download('averaged_perceptron_tagger') nltk.download('maxent_ne_chunker') nltk.download('words') nltk.download('treebank') # 创建依存句法解析器 parser = nltk.parse.CoreNLPDependencyParser(url='http://localhost:9000') # 分析句子并打印结果 sentence = "The cat is drinking milk." result = parser.parse(sentence.split()) for parse in result: parse.pretty_print() ``` 如果你想使用 SpaCy 库,你需要先安装 SpaCy 并下载相应的模型。然后可以使用 `spacy` 模块进行依存句法分析。 下面是一个使用 SpaCy 进行依存句法分析的示例代码: ```python import spacy # 加载英文模型 nlp = spacy.load('en_core_web_sm') # 处理文本并获取依存句法 sentence = "The cat is drinking milk." doc = nlp(sentence) for token in doc: print(token.text, token.dep_, token.head.text, token.head.pos_) ``` 以上就是使用 NLTK 和 SpaCy 进行依存句法分析的简单示例代码。你可以根据自己的需求选择合适的库和模型进行使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发呆的比目鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值