Package: ddparser
DDParser应用工具基于句法分析的隐式向量表示工具基于句法分析的显式结构表示工具DDParser依存句法分析简介项目介绍快速开始进阶使用数据集介绍文件结构后期计划参考资料文献引用如何贡献依存句法分析简介依存句法分析是自然语言处理核心技术之一，旨在通过分析句子中词语之间的依存关系来确定句子的句法结构，如下图实例所示：依存句法分析作为底层技术，可直接用于提升其他NLP任务的效果，这些任务包括但不限于语义角色标注、语义匹配、事件抽取等。该技术具有很高的研究价值及应用价值。为了方便研究人员和商业合作伙伴共享效果领先的依存句法分析技术，我们开源了基于大规模标注数据训练的高性能的依存句法分析工具，并提供一键式安装及预测服务，用户只需一条命令即可获取依存句法分析结果。项目介绍DDParser(BaiduDependencyParser)是百度自然语言处理部基于深度学习平台飞桨(PaddlePaddle)和大规模标注数据研发的依存句法分析工具。其训练数据不仅覆盖了多种输入形式的数据，如键盘输入query、语音输入query，还覆盖了多种场景的数据，如新闻、论坛。该工具在随机评测数据上取得了优异的效果。同时，该工具使用简单，一键完成安装及预测。效果说明数据集UASLASCTB590.31%89.06%DuCTB1.094.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级表示。快速开始版本依赖python: >=3.7.0paddlepaddle: >=2.3LAC: >=2.1一键安装用户可以使用以下方式进行一键安装及预测：pip安装 pip install ddparser半自动安装 先从https://pypi.org/project/ddparser/下载包，解压后使用python setup.py install安装包。功能使用未分词方式代码示例>>>fromddparserimportDDParser>>>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)已分词方式代码示例>>>fromddparserimportDDParser>>>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下载源码，并且执行下列命令安装依赖库：pipinstall--upgradepaddlepaddle-gpu
pipinstall--upgradeLAC模型下载我们发布了基于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_path和test_data_path指定训练集，评估集和测试集, 参数含义见参数说明，所用数据集格式见数据格式说明。评估用户可以通过执行sh download_data.sh下载我们提供的评估集，其将保存在./data/baidu/下。该评估集共2,592条句子，平均长度为11.27字符。用户可以通过执行sh run_evaluate.sh评估模型效果，详细命令如下所示：CUDA_VISIBLE_DEVICES=0pythonrun.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=0pythonrun.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_path和infer_result_path指定要预测的数据集和预测结果的路径。基于未分词数据的预测预测的输入数据为字符串形式，一行一条数据。通过执行sh run_predict_query.sh对来自标准输入的数据进行预测，详细命令如下所示：CUDA_VISIBLE_DEVICES=0pythonrun.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。