十二-用语言云分析依存句法和语义依存
句法分析是自然语言处理中非常重要的环节,没有句法分析是无法让计算机理解语言的含义的,依存句法分析由法国语言学家在1959年提出,影响深远,并且深受计算机行业青睐,依存句法分析也是做聊天机器人需要解决的最关键问题之一,语义依存更是对句子更深层次的分析,当然,有可用的工具我们就不重复造轮子,本节介绍如何利用国内领先的中文语言技术平台实现句法分析
什么是依存句法分析呢?¶
叫的晦涩的术语,往往其实灰常简单,句法就是句子的法律规则,也就是句子里成分都是按照什么法律规则组织在一起的。而依存句法就是这些成分之间有一种依赖关系。什么是依赖:没有你的话,我存在就是个错误。“北京是中国的首都”,如果没有“首都”,那么“中国的”存在就是个错误,因为“北京是中国的”表达的完全是另外一个意思了。
什么是语义依存分析呢?¶
“语义”就是说句子的含义,“张三昨天告诉李四一个秘密”,那么语义包括:谁告诉李四秘密的?张三。张三告诉谁一个秘密?李四。张三什么时候告诉的?昨天。张三告诉李四什么?秘密。
语义依存和依存句法的区别¶
依存句法强调介词、助词等的划分作用,语义依存注重实词之间的逻辑关系
另外,依存句法随着字面词语变化而不同,语义依存不同字面词语可以表达同一个意思,句法结构不同的句子语义关系可能相同。
依存句法分析和语义依存分析对我们的聊天机器人有什么意义呢? 依存句法分析和语义分析相结合使用,对对方说的话进行依存和语义分析后,一方面可以让计算机理解句子的含义,从而匹配到最合适的回答,另外如果有已经存在的依存、语义分析结果,还可以通过置信度匹配来实现聊天回答。
依存句法分析到底是怎么分析的呢?¶
依存句法分析的基本任务是确定句式的句法结构(短语结构)或句子中词汇之间的依存关系。依存句法分析最重要的两棵树:
依存树:子节点依存于父节点
依存投射树:实线表示依存联结关系,位置低的成分依存于位置高的成分,虚线为投射线
依存关系的五条公理¶
- 一个句子中只有一个成分是独立的
- 其他成分直接依存于某一成分
- 任何一个成分都不能依存于两个或两个以上的成分
- 如果A成分直接依存于B成分,而C成分在句子中位于A和B之间,那么C或者直接依存于B,或者直接依存于A和B之间的某一成分
- 中心成分左右两面的其他成分相互不发生关系
什么地方存在依存关系呢?比如合成词(如:国内)、短语(如:英雄联盟)很多地方都是
LTP依存关系标记¶
关系 | 简写 | 英文 | 例子 |
---|---|---|---|
主谓关系 | SBV | subject-verb | 我送她一束花 (我 <-- 送) |
动宾关系 | VOB | 直接宾语,verb-object | 我送她一束花 (送 --> 花) |
间宾关系 | IOB | 间接宾语,indirect-object | 我送她一束花 (送 --> 她) |
前置宾语 | FOB | 前置宾语,fronting-object | 他什么书都读 (书 <-- 读) |
兼语 | DBL | double | 他请我吃饭 (请 --> 我) |
定中关系 | ATT | attribute | 红苹果 (红 <-- 苹果) |
状中结构 | ADV | adverbial | 非常美丽 (非常 <-- 美丽) |
动补结构 | CMP | complement | 做完了作业 (做 --> 完) |
并列关系 | COO | coordinate | 大山和大海 (大山 --> 大海) |
介宾关系 | POB | preposition-object | 在贸易区内 (在 --> 内) |
左附加关系 | LAD | left adjunct | 大山和大海 (和 <-- 大海) |
右附加关系 | RAD | right adjunct | 孩子们 (孩子 --> 们) |
独立结构 | IS | independent structure | 两个单句在结构上彼此独立 |
核心关系 | HED | head | 指整个句子的核心 |
那么依存关系是怎么计算出来的呢?¶
是通过机器学习和人工标注来完成的,机器学习依赖人工标注,那么都哪些需要我们做人工标注呢?分词词性、依存树库、语义角色都需要做人工标注,有了这写人工标注之后,就可以做机器学习来分析新的句子的依存句法了
LTP云平台怎么用?¶
首先注册用户,得到每月免费20G的流量,在语言云注册一个账号,注册好后登陆并进入你的dashboard,可以看到自己唯一的api_key
,我的保密,就不贴出来了,在dashboard里还可以查询自己流量使用情况
具体使用方法如下(参考语言云API使用文档 ):
1 | curl -i "http://api.ltp-cloud.com/analysis/?api_key=YourApiKey&text=我是中国人。&pattern=dp&format=plain"
|
把这里的YourApiKey
换成你自己的api_key,得到结果如下:
1 2 3 4 5 | 我_0 是_1 SBV 是_1 -1 HED 中国_2 人_3 ATT 人_3 是_1 VOB 。_4 是_1 WP |
通过这个接口修改pattern参数可以做很多工作,比如:
分词(pattern=ws):
1 2 | GET http://api.ltp-cloud.com/analysis/?api_key=YourApiKey&text=我是中国人。&pattern=ws&format=plain 我 是 中国 人 。 |
词性标注(pattern=pos):
1 2 | GET http://api.ltp-cloud.com/analysis/?api_key=YourApiKey&text=我是中国人。&pattern=pos&format=plain 我_r 是_v 中国_ns 人_n 。_wp |
命名实体识别(pattern=ner):
1 2 | GET http://api.ltp-cloud.com/analysis/?api_key=YourApiKey&text=我是中国人。&pattern=ner&format=plain 我 是 [中国]Ns 人 。 |
语义依存分析(pattern=sdp):
1 2 3 4 5 6 | GET http://api.ltp-cloud.com/analysis/?api_key=YourApiKey&text=我是中国人。&pattern=sdp&format=plain 我_0 是_1 Exp 是_1 -1 Root 中国_2 人_3 Nmod 人_3 是_1 Clas 。_4 是_1 mPunc |
语义角色标注(pattern=srl):
1 2 | GET http://api.ltp-cloud.com/analysis/?api_key=YourApiKey&text=我是中国人。&pattern=srl&format=plain [我]A0 [是]v [中国 人]A1 。 |
免费终究会有限制,无论是流量还是速度还是一次性分析文本大小,LTP平台有有一定限制,这也是可以理解的,毕竟为大家开放了科研必备的资源和技术,成本也是需要控制的。