fix bug when input contains specials Change-Id: Ia9a085a625199de99364e12374a6780a35461a76
fix bug when input contains specials
Change-Id: Ia9a085a625199de99364e12374a6780a35461a76
依存句法分析是自然语言处理核心技术之一,旨在通过分析句子中词语之间的依存关系来确定句子的句法结构,如下图实例所示: 依存句法分析作为底层技术,可直接用于提升其他NLP任务的效果,这些任务包括但不限于语义角色标注、语义匹配、事件抽取等。该技术具有很高的研究价值及应用价值。为了方便研究人员和商业合作伙伴共享效果领先的依存句法分析技术,我们开源了基于大规模标注数据训练的高性能的依存句法分析工具,并提供一键式安装及预测服务,用户只需一条命令即可获取依存句法分析结果。
DDParser(Baidu Dependency Parser)是百度自然语言处理部基于深度学习平台飞桨(PaddlePaddle)和大规模标注数据研发的依存句法分析工具。其训练数据不仅覆盖了多种输入形式的数据,如键盘输入query、语音输入query,还覆盖了多种场景的数据,如新闻、论坛。该工具在随机评测数据上取得了优异的效果。同时,该工具使用简单,一键完成安装及预测。
Baidu Chinese Treebank1.0
注:由于CTB5数据集规模较小,最优模型(即评测模型)使用了句子的word级表示、POS(词性标签)表示、以及预训练词向量,而DuCTB1.0数据集规模较大,其最优模型仅使用了句子的word级和char级表示。
python
paddlepaddle
LAC
用户可以使用以下方式进行一键安装及预测:
python setup.py install
>>> 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下载源码,并且执行下列命令安装依赖库:
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下。
DuCTB1.0
cd ddparser && sh download_pretrained_model.sh
用户可以通过sh run_train.sh训练模型。详细命令如下所示:
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指定训练集,评估集和测试集, 参数含义见参数说明,所用数据集格式见数据格式说明。
train_data_path
valid_data_path
test_data_path
用户可以通过执行sh download_data.sh下载我们提供的评估集,其将保存在./data/baidu/下。该评估集共2,592条句子,平均长度为11.27字符。 用户可以通过执行sh run_evaluate.sh评估模型效果,详细命令如下所示:
sh download_data.sh
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进行预测,详细命令如下所示:
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_path和infer_result_path指定要预测的数据集和预测结果的路径。
infer_data_path
infer_result_path
基于未分词数据的预测 预测的输入数据为字符串形式,一行一条数据。通过执行sh run_predict_query.sh对来自标准输入的数据进行预测,详细命令如下所示:
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种标注关系,具体含义见下表:
DuCTB1.0:Baidu Chinese Treebank 1.0是百度构建的中文依存句法树库,包含近100万句子(本次发布模型的训练数据近53万句)。语料来自搜索query、网页句子,覆盖了手写、语音等多种输入形式,同时覆盖了新闻、论坛等多种场景。
Baidu Chinese Treebank 1.0
. ├── 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。
DDParser
依存句法分析简介
依存句法分析是自然语言处理核心技术之一,旨在通过分析句子中词语之间的依存关系来确定句子的句法结构,如下图实例所示:
依存句法分析作为底层技术,可直接用于提升其他NLP任务的效果,这些任务包括但不限于语义角色标注、语义匹配、事件抽取等。该技术具有很高的研究价值及应用价值。为了方便研究人员和商业合作伙伴共享效果领先的依存句法分析技术,我们开源了基于大规模标注数据训练的高性能的依存句法分析工具,并提供一键式安装及预测服务,用户只需一条命令即可获取依存句法分析结果。
项目介绍
DDParser(Baidu Dependency Parser)是百度自然语言处理部基于深度学习平台飞桨(PaddlePaddle)和大规模标注数据研发的依存句法分析工具。其训练数据不仅覆盖了多种输入形式的数据,如键盘输入query、语音输入query,还覆盖了多种场景的数据,如新闻、论坛。该工具在随机评测数据上取得了优异的效果。同时,该工具使用简单,一键完成安装及预测。
效果说明
Baidu Chinese Treebank1.0是百度构建的中文句法树库,即本次所发布的依存句法分析工具-DDParser的训练数据来源,具体信息参见数据来源注:由于CTB5数据集规模较小,最优模型(即评测模型)使用了句子的word级表示、POS(词性标签)表示、以及预训练词向量,而DuCTB1.0数据集规模较大,其最优模型仅使用了句子的word级和char级表示。
快速开始
版本依赖
python: >=3.7.0paddlepaddle: >=2.3LAC: >=2.1一键安装
用户可以使用以下方式进行一键安装及预测:
python setup.py install安装包。功能使用
未分词方式
已分词方式
进阶使用
项目下载
用户可以通过
git clone https://github.com/baidu/DDParser下载源码,并且执行下列命令安装依赖库:模型下载
我们发布了基于
DuCTB1.0训练的模型,通过执行cd ddparser && sh download_pretrained_model.sh下载模型,模型将保存在./ddparser/model_files/baidu下。训练
用户可以通过
sh run_train.sh训练模型。详细命令如下所示:注:用户可通过修改
train_data_path,valid_data_path和test_data_path指定训练集,评估集和测试集, 参数含义见参数说明,所用数据集格式见数据格式说明。评估
用户可以通过执行
sh download_data.sh下载我们提供的评估集,其将保存在./data/baidu/下。该评估集共2,592条句子,平均长度为11.27字符。用户可以通过执行
sh run_evaluate.sh评估模型效果,详细命令如下所示:注:用户可通过修改
test_data_path指定评估集,所用数据集格式见数据格式说明。预测
基于源码,我们提供两种基于命令行的预测方法,分别用于已分词数据和未分词数据。
基于已分词数据的预测
预测的输入数据要求以
CoNLL-X(官方说明)格式组织,缺失字段使用“-”代替。通过执行sh run_predict.sh进行预测,详细命令如下所示:注:用户可通过修改
infer_data_path和infer_result_path指定要预测的数据集和预测结果的路径。基于未分词数据的预测
预测的输入数据为字符串形式,一行一条数据。通过执行
sh run_predict_query.sh对来自标准输入的数据进行预测,详细命令如下所示:注:默认调用
LAC预测分词和词性参数说明
数据格式说明
本项目数据格式基于CoNLL-X(官方说明)的风格,缺少的字段使用”-“代替(用户只用关注ID,FROM,HEAD,DEPREL,PROB等列即可),如“百度是一家高科技公司”的可解析为如下格式:
数据集介绍
依存句法分析标注关系集合
DuCTB1.0数据集含14种标注关系,具体含义见下表:
数据来源
DuCTB1.0:
Baidu Chinese Treebank 1.0是百度构建的中文依存句法树库,包含近100万句子(本次发布模型的训练数据近53万句)。语料来自搜索query、网页句子,覆盖了手写、语音等多种输入形式,同时覆盖了新闻、论坛等多种场景。文件结构
后期计划
参考资料
本项目所用方法出自论文《Deep Biaffine Attention for Neural Dependency Parsing》,对应的pytorch版本参见yzhangcs/parser。
文献引用
如果您的学术工作成果中使用了DDParser,请您增加下述引用。我们非常欣慰DDParser能够对您的学术工作带来帮助。
如何贡献
我们欢迎开发者向DDParser贡献代码。如果您开发了新功能或发现了bug,欢迎给我们提交PR。