NLP入门学习3——句法分析(基于LTP4)

  • 0.简介
  • 1.LTP介绍
  • 2.安装
  • 2.1 模块安装
  • 2.2 模型下载
  • 3.使用
  • 3.1 分句
  • 3.2 分词
  • 3.3 词性标注
  • 3.4 命名实体识别
  • 3.5 依存句法分析
  • 4.说明
  • 4.1 词性标注
  • 4.2 依存句法分析


0.简介

本篇将介绍NLP中的句法结构分析,主要基于LTP工具实现,在过程中也会介绍LTP其他功能的使用。

1.LTP介绍

LTP(Language Technology Platform) 提供了一系列中文自然语言处理工具,用户可以使用这些工具对于中文文本进行分词、词性标注、句法分析等等工作。
git:https://github.com/HIT-SCIR/ltp

2.安装

2.1 模块安装

旧版的ltp安装上有点问题,linux下执行pip,默认安装0.2.1版本。

pip install pyltp

windows下会存在问题,可参考https://github.com/HIT-SCIR/pyltp/issues/125 建议安装ltp4,一键安装:

pip install ltp

2.2 模型下载

官方git中有模型的下载链接,包括V1和V2两个版本,又包括base,small和tiny三个模型。

同时,官方git上给出了两个版本的各项指标。

nlp句子重要性标注 nlp分句_人工智能


nlp句子重要性标注 nlp分句_nlp句子重要性标注_02

3.使用

3.1 分句

from ltp import LTP
ltp = LTP('../ltp_model/base')   # 加载模型,路径是模型文件解压后的文件夹
# 后面的代码全都省略了模型加载这一步

sents = ltp.sent_split(["吃葡萄不吐葡萄皮。不吃葡萄倒吐葡萄皮。"])
sents

# [out]:   ['吃葡萄不吐葡萄皮。', '不吃葡萄倒吐葡萄皮。']

3.2 分词

segment, hidden = ltp.seg(["南京市长江大桥"])
segment

# [out]:  [['南京市', '长江', '大桥']]

与其他分词工具类似,LTP也提供自定义词典的功能,可以指定加载自定义词典的路径。

ltp.init_dict(path="user_dict.txt", max_window=4)

也可以直接输入自定义的词汇,加入自定义之后的分词结果:

ltp.add_words(words=["市长", "江大桥"], max_window=4)

segment, hidden = ltp.seg(["南京市长江大桥"])
segment

# [out]:  [['南京', '市长', '江大桥']]

3.3 词性标注

pos = ltp.pos(hidden)
pos

# [out]:  [['ns', 'ns', 'n']]    # 这个结果对应的是 [['南京市', '长江', '大桥']]

词性标注的结果与分词结果相对应,结果中的ns等,会在第4部分进行备注。

3.4 命名实体识别

ltp也可以完成命名实体识别的任务,不过对于复杂任务最好还是用更加复杂的模型去做,毕竟ltp的参数量在这摆着呢。

ner = ltp.ner(hidden)
ner

# [out]: [[('Nh', 0, 0), ('Ns', 1, 1), ('Nh', 2, 2)]]

for i in range(len(ner[0])):            # 因为只有一个句子,所以直接取了ner[0]
    print("{}:".format(ner[0][i][0]), segment[0][ner[0][i][1]: ner[0][i][2]+1])
# [out]:  Nh: ['南京']
#         Ns: ['市长']
#         Nh: ['江大桥']

唉,果然结果不是很准,南京给认成了人名。在词性标注方面,ltp划分的太细了,在实际应用的过程中其实只需要去判断动词名词之类就好,如果要对人名地点进行标注,最好还是用专门的NER模型去完成。

3.5 依存句法分析

ltp.add_words(words=["市长", "江大桥"], max_window=4)
segment, hidden = ltp.seg(["南京市长江大桥是南京市的市长"])
print(segment)
dep = ltp.dep(hidden)
dep

# [out]: [['南京', '市长', '江大桥', '是', '南京市', '的', '市长']]
# [out]: [[(1, 2, 'ATT'),
#            (2, 3, 'ATT'),
#            (3, 4, 'SBV'),
#            (4, 0, 'HED'),
#            (5, 7, 'ATT'),
#            (6, 5, 'RAD'),
#            (7, 4, 'VOB')]]

举个栗子,ATT代表定中关系,也就是定语和中心词,南京是市长的定语,市长是江大桥的定语。这些关系有很多实际的应用,例如基于这些关系,在命名实体识别中,找到实体后,将实体的修饰词补全等等。

4.说明

4.1 词性标注

缩写

解释

举例

a

adjective:形容词

美丽

b

other noun-modifier:其他的修饰名词

大型, 西式

c

conjunction:连词

和, 虽然

d

adverb:副词


e

exclamation:感叹词


g

morpheme

茨, 甥

h

prefix:前缀

阿, 伪

i

idiom:成语

百花齐放

j

abbreviation:缩写

公检法

k

suffix:后缀

界, 率

m

number:数字

一, 第一

n

general noun:一般名词

苹果

nd

direction noun:方向名词

右侧

nh

person name:人名

杜甫, 汤姆

ni

organization name:公司名

保险公司

nl

location noun:地点名词

城郊

ns

geographical name:地理名词

北京

nt

temporal noun:时间名词

近日, 明代

nz

other proper noun:其他名词

诺贝尔奖

o

onomatopoeia:拟声词

哗啦

p

preposition:介词

在, 把

q

quantity:量词


r

pronoun:代词

我们

u

auxiliary:助词

的, 地

v

verb:动词

跑, 学习

wp

punctuation:标点

,。!

ws

foreign words:国外词

CPU

x

non-lexeme:不构成词

萄, 翱

4.2 依存句法分析

关系类型

Tag

Description

Example

主谓关系

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

指整个句子的核心