• Stars
    star
    973
  • Rank 47,051 (Top 1.0 %)
  • Language
    Python
  • License
    Apache License 2.0
  • Created over 4 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

百度开源的依存句法分析系统

DDParser

PyPi Latest Release License

依存句法分析简介

依存句法分析是自然语言处理核心技术之一,旨在通过分析句子中词语之间的依存关系来确定句子的句法结构,如下图实例所示: struct
依存句法分析作为底层技术,可直接用于提升其他NLP任务的效果,这些任务包括但不限于语义角色标注、语义匹配、事件抽取等。该技术具有很高的研究价值及应用价值。为了方便研究人员和商业合作伙伴共享效果领先的依存句法分析技术,我们开源了基于大规模标注数据训练的高性能的依存句法分析工具,并提供一键式安装及预测服务,用户只需一条命令即可获取依存句法分析结果。

项目介绍

DDParser(Baidu Dependency Parser)是百度自然语言处理部基于深度学习平台飞桨(PaddlePaddle)和大规模标注数据研发的依存句法分析工具。其训练数据不仅覆盖了多种输入形式的数据,如键盘输入query、语音输入query,还覆盖了多种场景的数据,如新闻、论坛。该工具在随机评测数据上取得了优异的效果。同时,该工具使用简单,一键完成安装及预测。

效果说明

数据集 UAS LAS
CTB5 90.31% 89.06%
DuCTB1.0 94.80% 92.88%
  • CTB5: Chinese Treebank 5.0 是Linguistic Data Consortium (LDC)在2005年发布的中文句法树库,包含18,782条句子,语料主要来自新闻和杂志,如新华社日报。
  • DuCTB1.0: Baidu Chinese Treebank1.0是百度构建的中文句法树库,即本次所发布的依存句法分析工具-DDParser的训练数据来源,具体信息参见数据来源

注:由于CTB5数据集规模较小,最优模型(即评测模型)使用了句子的word级表示、POS(词性标签)表示、以及预训练词向量,而DuCTB1.0数据集规模较大,其最优模型仅使用了句子的word级和char级表示。

快速开始

版本依赖


一键安装

用户可以使用以下方式进行一键安装及预测:

功能使用

未分词方式

  • 代码示例
>>> from ddparser import DDParser
>>> ddp = DDParser()
>>> # 单条句子
>>> ddp.parse("百度是一家高科技公司")
[{'word': ['百度', '是', '一家', '高科技', '公司'], 'head': [2, 0, 5, 5, 2], 'deprel': ['SBV', 'HED', 'ATT', 'ATT', 'VOB']}]
>>> # 多条句子
>>> ddp.parse(["百度是一家高科技公司", "他送了一本书"])
[{'word': ['百度', '是', '一家', '高科技', '公司'], 'head': [2, 0, 5, 5, 2], 'deprel': ['SBV', 'HED', 'ATT', 'ATT', 'VOB']}, 
{'word': ['他', '送', '了', '一本', '书'], 'head': [2, 0, 2, 5, 2], 'deprel': ['SBV', 'HED', 'MT', 'ATT', 'VOB']}]
>>> # 输出概率和词性标签
>>> ddp = DDParser(prob=True, use_pos=True)
>>> ddp.parse(["百度是一家高科技公司"])
[{'word': ['百度', '是', '一家', '高科技', '公司'], 'postag': ['ORG', 'v', 'm', 'n', 'n'], 'head': [2, 0, 5, 5, 2], 'deprel': ['SBV', 'HED', 'ATT', 'ATT', 'VOB'], 'prob': [1.0, 1.0, 1.0, 1.0, 1.0]}]
>>> # buckets=True, 数据集长度不均时处理速度更快
>>> ddp = DDParser(buckets=True)
>>> # 使用GPU
>>> ddp = DDParser(use_cuda=True)

已分词方式

  • 代码示例
>>> from ddparser import DDParser
>>> ddp = DDParser()
>>> ddp.parse_seg([['百度', '是', '一家', '高科技', '公司'], ['他', '送', '了', '一本', '书']])
[{'word': ['百度', '是', '一家', '高科技', '公司'], 'head': [2, 0, 5, 5, 2], 'deprel': ['SBV', 'HED', 'ATT', 'ATT', 'VOB']}, 
{'word': ['他', '送', '了', '一本', '书'], 'head': [2, 0, 2, 5, 2], 'deprel': ['SBV', 'HED', 'MT', 'ATT', 'VOB']}]
>>> # 输出概率
>>> ddp = DDParser(prob=True)
>>> ddp.parse_seg([['百度', '是', '一家', '高科技', '公司']])
[{'word': ['百度', '是', '一家', '高科技', '公司'], 'head': [2, 0, 5, 5, 2], 'deprel': ['SBV', 'HED', 'ATT', 'ATT', 'VOB'], 'prob': [1.0, 1.0, 1.0, 1.0, 1.0]}]

注:标签含义见依存句法分析标注关系集合

进阶使用

项目下载

用户可以通过git clone https://github.com/baidu/DDParser下载源码,并且执行下列命令安装依赖库:

pip install --upgrade paddlepaddle-gpu
pip install --upgrade LAC

模型下载

我们发布了基于DuCTB1.0训练的模型,通过执行cd ddparser && sh download_pretrained_model.sh下载模型,模型将保存在./ddparser/model_files/baidu下。

训练

用户可以通过sh run_train.sh训练模型。详细命令如下所示:

CUDA_VISIBLE_DEVICES=0 python -u run.py \
        --mode=train \
        --use_cuda \
        --feat=none \
        --preprocess \
        --model_files=model_files/baidu \
        --train_data_path=data/baidu/train.txt \
        --valid_data_path=data/baidu/dev.txt \
        --test_data_path=data/baidu/test.txt \
        --buckets=15

注:用户可通过修改train_data_path, valid_data_pathtest_data_path指定训练集,评估集和测试集, 参数含义见参数说明,所用数据集格式见数据格式说明

评估

用户可以通过执行sh download_data.sh下载我们提供的评估集,其将保存在./data/baidu/下。该评估集共2,592条句子,平均长度为11.27字符。
用户可以通过执行sh run_evaluate.sh评估模型效果,详细命令如下所示:

CUDA_VISIBLE_DEVICES=0 python run.py \
                                --mode=evaluate \
                                --use_cuda \
                                --model_files=model_files/baidu \
                                --test_data_path=data/baidu/test.txt \
                                --buckets=15 \
                                --tree

注:用户可通过修改test_data_path指定评估集,所用数据集格式见数据格式说明

预测

基于源码,我们提供两种基于命令行的预测方法,分别用于已分词数据和未分词数据。

基于已分词数据的预测

预测的输入数据要求以CoNLL-X(官方说明)格式组织,缺失字段使用“-”代替。通过执行sh run_predict.sh进行预测,详细命令如下所示:

CUDA_VISIBLE_DEVICES=0 python run.py \
                                --mode=predict \
                                --use_cuda \
                                --model_files=model_files/baidu \
                                --infer_data_path=data/baidu/test.txt \
                                --infer_result_path=data/baidu/test.predict \
                                --buckets=15 \
                                --tree 

注:用户可通过修改infer_data_pathinfer_result_path指定要预测的数据集和预测结果的路径。

基于未分词数据的预测
预测的输入数据为字符串形式,一行一条数据。通过执行sh run_predict_query.sh对来自标准输入的数据进行预测,详细命令如下所示:

CUDA_VISIBLE_DEVICES=0 python run.py \
                                --mode=predict_q \
                                --use_cuda \
                                --model_files=model_files/baidu \
                                --buckets=15 \
                                --tree

注:默认调用LAC预测分词和词性

参数说明

mode: 任务模式(train, evaluate, predict, predict_q)
config_path:保存超参文件的路径
model_files:保存模型的路径
train_data_path:训练集文件的路径
valid_data_path:验证集文件的路径
test_data_path:测试集文件的路径
infer_data_path:待预测文件的路径
pretrained_embedding_dir:预训练词向量的路径
batch_size:批尺寸
log_path:日志的路径
log_level: 日志等级,默认INFO('DEBUG', 'INFO', 'WARNING', 'ERROR', 'FATAL')
infer_result_path:预测结果保存的路径
use_cuda:如果设置,则使用GPU
preprocess:训练模式下的使用参数,设置表示会基于训练数据进行词统计等操作,不设置默认使用已统计好的信息(节省统计时间);针对同一训练数据,多次训练可不设置该参数。
seed:随机数种子(默认:1)
threads:控制每个paddle实例的线程数
tree:确保输出结果是正确的依存句法树
prob:如果设置,则输出每个弧的概率,保存在结果的PROB列。
feat:选择输入的特征(none,char,pos;ernie-*模型feat只能选择none)
buckets:选择最大分桶数(默认:15)
punct:评估结果的时候是否包含标点
encoding_model:选择底层模型, 默认ernie-lstm(lstm, transformer, ernie-1.0, ernie-tiny, ernie-lstm)

数据格式说明

本项目数据格式基于CoNLL-X(官方说明)的风格,缺少的字段使用"-"代替(用户只用关注ID,FROM,HEAD,DEPREL,PROB等列即可),如“百度是一家高科技公司”的可解析为如下格式:

ID      FROM   LEMMA CPOSTAG POSTAG  FEATS   HEAD    DEPREL   PROB   PDEPREL
1       百度    百度    -       -       -       2       SBV     1.0     -
2       是      是      -       -       -       0       HED     1.0     -
3       一家    一家    -       -       -       5       ATT     1.0     -
4       高科技  高科技  -       -       -       5       ATT     1.0     -
5       公司    公司    -       -       -       2       VOB     1.0     -

数据集介绍

依存句法分析标注关系集合

DuCTB1.0数据集含14种标注关系,具体含义见下表:

Label 关系类型 说明 示例
SBV 主谓关系 主语与谓词间的关系 他送了一本书(他<--送)
VOB 动宾关系 宾语与谓词间的关系 他送了一本书(送-->书)
POB 介宾关系 介词与宾语间的关系 我把书卖了(把-->书)
ADV 状中关系 状语与中心词间的关系 我昨天买书了(昨天<--买)
CMP 动补关系 补语与中心词间的关系 我都吃完了(吃-->完)
ATT 定中关系 定语与中心词间的关系 他送了一本书(一本<--书)
F 方位关系 方位词与中心词的关系 在公园里玩耍(公园-->里)
COO 并列关系 同类型词语间关系 叔叔阿姨(叔叔-->阿姨)
DBL 兼语结构 主谓短语做宾语的结构 他请我吃饭(请-->我,请-->吃饭)
DOB 双宾语结构 谓语后出现两个宾语 他送我一本书(送-->我,送-->书)
VV 连谓结构 同主语的多个谓词间关系 他外出吃饭(外出-->吃饭)
IC 子句结构 两个结构独立或关联的单句 你好,书店怎么走?(你好<--走)
MT 虚词成分 虚词与中心词间的关系 他送了一本书(送-->了)
HED 核心关系 指整个句子的核心

数据来源

DuCTB1.0:Baidu Chinese Treebank 1.0是百度构建的中文依存句法树库,包含近100万句子(本次发布模型的训练数据近53万句)。语料来自搜索query、网页句子,覆盖了手写、语音等多种输入形式,同时覆盖了新闻、论坛等多种场景。

文件结构

.
├── LICENSE
├── README.md
├── requirements.txt   #依赖模块及版本要求
├── ddparser           #DDParser的核心代码,包含模型,测试数据,运行脚本等

后期计划

  • 蒸馏模型,减小模型体积

参考资料

本项目所用方法出自论文《Deep Biaffine Attention for Neural Dependency Parsing》,对应的pytorch版本参见yzhangcs/parser

文献引用

如果您的学术工作成果中使用了DDParser,请您增加下述引用。我们非常欣慰DDParser能够对您的学术工作带来帮助。

@misc{zhang2020practical,
    title={A Practical Chinese Dependency Parser Based on A Large-scale Dataset},
    author={Shuai Zhang and Lijie Wang and Ke Sun and Xinyan Xiao},
    year={2020},
    eprint={2009.00901},
    archivePrefix={arXiv},
    primaryClass={cs.CL}
}

如何贡献

我们欢迎开发者向DDParser贡献代码。如果您开发了新功能或发现了bug,欢迎给我们提交PR。

More Repositories

1

amis

前端低代码框架,通过 JSON 配置就能生成各种页面。
TypeScript
17,235
star
2

uid-generator

UniqueID generator
Java
5,429
star
3

san

A fast, portable, flexible JavaScript component framework
JavaScript
4,708
star
4

lac

百度NLP:分词,词性标注,命名实体识别,词重要性
C++
3,864
star
5

braft

An industrial-grade C++ implementation of RAFT consensus algorithm based on brpc, widely used inside Baidu to build highly-available distributed systems.
C++
3,499
star
6

dperf

dperf is a DPDK based 100Gbps network performance and load testing software.
C
3,273
star
7

bfs

The Baidu File System.
C++
2,853
star
8

openrasp

🔥Open source RASP solution
C++
2,774
star
9

Familia

A Toolkit for Industrial Topic Modeling
C++
2,638
star
10

AnyQ

FAQ-based Question Answering System
C++
2,584
star
11

sofa-pbrpc

A light-weight RPC implement of google protobuf RPC framework.
C++
2,130
star
12

Senta

Baidu's open-source Sentiment Analysis System.
Python
1,889
star
13

tera

An Internet-Scale Database.
C++
1,887
star
14

bfe-book

In-depth Understanding of BFE《深入理解BFE》(Book for BFE, a CNCF open source project. both in English and in Chinese)
1,212
star
15

BaikalDB

BaikalDB, A Distributed HTAP Database.
C++
1,169
star
16

bigflow

Baidu Bigflow is an interface that allows for writing distributed computing programs and provides lots of simple, flexible, powerful APIs. Using Bigflow, you can easily handle data of any scale. Bigflow processes 4P+ data inside Baidu and runs about 10k jobs every day.
C++
1,142
star
17

DuReader

Baseline Systems of DuReader Dataset
Python
1,133
star
18

starlight

Java implementation for Baidu RPC, multi-protocol & high performance RPC.
Java
961
star
19

CUP

CUP, common useful python-lib. (Currently, Most popular python lib in baidu). Python 开发底层库, 涵盖util、service(threadpool/generator/executor/cache等等)、logging、monitoring、增强型配置 等等库支持
Python
938
star
20

ICE-BA

C++
700
star
21

NoahV

An efficient front-end application framework based on vue.js
JavaScript
639
star
22

EasyFaaS

EasyFaaS是一个依赖轻、适配性强、资源占用少、无状态且高性能的函数计算服务引擎
Go
620
star
23

Curve

An Integrated Experimental Platform for time series data anomaly detection.
JavaScript
530
star
24

Jprotobuf-rpc-socket

Protobuf RPC是一种基于TCP协议的二进制RPC通信协议的Java实现
Java
516
star
25

bifromq

A MQTT broker implementation adopting serverless architecture
Java
514
star
26

fast_rgf

Multi-core implementation of Regularized Greedy Forest
C++
466
star
27

babylon

High-Performance C++ Fundamental Library
C++
457
star
28

Dialogue

Python
444
star
29

Elasticsearch

Baidu Elasticsearch
Java
432
star
30

brcc

BRCC(better remote config center)是一个分布式配置中心,用于统一管理应用服务的配置信息,避免各类资源散落在各个项目中,简化资源配置的维护成本。作为一种轻量级的解决方案,部署简单,同时支持多环境、多版本、多角色的资源管理,可以在不改变应用源码的情况下无缝切换和实时生效配置信息。
Java
390
star
31

Cafe

A powerful test framework for Android
Java
370
star
32

mix-img

A fast mix image javascript tool libary
JavaScript
332
star
33

puck

Puck is a high-performance ANN search engine
Jupyter Notebook
331
star
34

unit-dmkit

C++
327
star
35

galaxy

Galaxy is a cluster management system.
C++
326
star
36

information-extraction

Python
325
star
37

knowledge-driven-dialogue

baseline system of knowledge driven dialogue competition
Python
270
star
38

CarbonGraph

A Swift dependency injection / lookup framework for iOS
Swift
254
star
39

unit-uskit

unit-uskit
C++
251
star
40

BIPlatform

JavaScript
219
star
41

dlock

An effective and reliable Distributed Lock
Java
216
star
42

ins

iNexus, coordinate large scale services
C++
214
star
43

boteye

C++
212
star
44

titan-dex

Java
201
star
45

m-git

MGit 是一款基于 Git 的多仓库管理工具,可以安全的、高效的管理多个 Git 仓库; 适合于在多个仓库中进行关联开发的项目,实现批量的版本管理功能,提高 Git 操作的效率,避免逐个执行 Git 命令带来的误操作风险。
Ruby
166
star
46

Rubik

An Android platform component management tool chain, based on Kotlin language.
Kotlin
154
star
47

common

Common library
C++
132
star
48

go-lib

Go
126
star
49

titan-hotfix

Java
125
star
50

wx2

小程序互转工具
JavaScript
124
star
51

iot-sdk-c

device sdk for baidu IoT Core service, in c. Including MQTT client
C
118
star
52

Youtube-8M

PaddlePaddle models for Youtube-8M Video Understanding Challenge
Python
114
star
53

ar-sdk

DuMix AR SDK for Developer
GLSL
107
star
54

broc

Python
101
star
55

ITEST

Web service interface test framework
97
star
56

ote-stack

OTE-Stack is an edge computing platform for 5G and AI
Go
96
star
57

GPT

Java
87
star
58

redis

Baidu Ksarch Redis - a production solution of redis cluster
87
star
59

san-devtools

Browser developer tools extension for debugging San.
TypeScript
82
star
60

terminator

Service Virtualization
Java
76
star
61

QCompute

QCompute is a Python-based quantum software development kit (SDK). It provides a full-stack programming experience for advanced users via hybrid quantum programming language features and a high-performance simulator.
Python
76
star
62

spring-cloud-baidu

70
star
63

shuttle

A fast computing framework based on Galaxy
C++
64
star
64

iot-edge-sdk-for-iot-parser

C
64
star
65

baidu-iot-samples

C
61
star
66

san-store

Application States Management for San
JavaScript
59
star
67

ARK

Development framework of intelligent operation
Python
57
star
68

san-update

Object immutable update utility for san solution
JavaScript
56
star
69

logcover

轻量级异常日志测试覆盖率度量工具
Python
56
star
70

palo

A fast MPP database for all modern analytics on big data. Powered by Apache Doris(Incubating)
50
star
71

speech-samples

百度语音示例
Java
48
star
72

ntripcaster

C
43
star
73

san-router

Official Router for San
JavaScript
38
star
74

Quanlse

Jupyter Notebook
38
star
75

san-ssr

San SSR framework and utils
TypeScript
37
star
76

dm-kit-php

PHP
36
star
77

boteye_sensor

C
35
star
78

ipipe-agent

Java
33
star
79

OASP

OASP (Online App Status Protocol)
Java
32
star
80

san-composition

JavaScript
30
star
81

duedge-recipes

DuEdge百度边缘网络计算样例代码
JavaScript
27
star
82

paddle-on-k8s-operator

Kubernetes operator for managing the lifecycle of PaddlePaddle job.
Go
24
star
83

baiducloud-sdk-go

Go SDK for Baidu Cloud
Go
24
star
84

san-website

JavaScript
21
star
85

baiduads-sdk

Baidu Ads API SDK
Python
19
star
86

du1906_esp

DUHOME AIOT platform based on du1906 and esp32
C
18
star
87

highflip

HIGHFLIP: An easy way to bridge different federal learning platforms
18
star
88

smartapp-openapi-java

百度智能小程序服务端 OpenAPI SDK for java,是基于小程序服务端 OpenAPI 封装的一套让开发者方便使用的 SDK, 它可以帮开发者减少理解和使用 OpenAPI 的成本, 减少开发者直接调用服务端接口不当而引起的错误, 避免在开发中走弯路。
Java
16
star
89

san-factory

JavaScript
15
star
90

ttm

C
14
star
91

cluster-api-provider-baiducloud

Kubernetes cluster-api for Baidu Cloud
Go
13
star
92

minions

Baidu 100G Chasiss Switch hardware spec
11
star
93

signet

签章系统
JavaScript
10
star
94

sgxray

SGXRay: a bounded verifier for Intel SGX enclaves
C
10
star
95

grafana-tsdb-datasource

JavaScript
9
star
96

iotcore-sdk-java

Java SDK for baidu IoT Core service
Java
9
star
97

bce-fpga-dev-kit

VHDL
8
star
98

iot

for all code about Internet of Things
8
star
99

smartapp-openapi-go

百度智能小程序服务端 OpenAPI SDK for go,是基于小程序服务端 OpenAPI 封装的一套让开发者方便使用的 SDK, 它可以帮开发者减少理解和使用 OpenAPI 的成本, 减少开发者直接调用服务端接口不当而引起的错误, 避免在开发中走弯路。
Go
8
star
100

duedge-cli

DuEdge Command Line
Python
6
star