- 人工智能
- 大模型
- 预训练
- 微调
- LoRA
- RLHF
- 强化学习
- 分布式训练
【免费下载链接】PaddleNLP
Easy-to-use and powerful LLM and SLM library with awesome model zoo.
导读:PaddleNLP 作为易用且强大的 LLM/SLM 库,在slm/examples目录下沉淀了覆盖词法分析、文本分类、文本匹配、机器翻译、信息抽取、情感分析、语义索引、小样本学习等主流 NLP 任务的丰富示例。本文以该示例库为核心,梳理其目录结构与任务覆盖范围,深入剖析每个代表性示例的实现路径、数据格式、训练/评估/部署命令及参数含义,并结合仓库源码给出可复现、可扩展的实战方案,帮助开发者快速找到与自身业务匹配的参考样例并落地应用。
示例库概览:覆盖从研究到产业应用的完整任务版图
PaddleNLP 的示例库位于仓库 slm/examples 目录,旨在提供覆盖从研究到产业应用的丰富示例,加速开发者文本任务开发效率。整个示例库围绕三大板块组织:NLP 基础技术、NLP 系统应用与NLP 拓展应用,同时仓库中还补充了 benchmark 评测与 torch 迁移等工程化主题。
从目录结构看,示例库当前包含以下 20 个顶级目录:
| 目录 | 所属板块 | 核心任务 |
|---|---|---|
| lexical_analysis | 基础技术 | 词法分析(分词、词性标注、专名识别) |
| text_matching | 基础技术 | 文本匹配 |
| text_summarization | 基础技术 | 文本摘要 |
| semantic_indexing | 基础技术 | 语义索引 |
| information_extraction | 基础技术 | 信息抽取 |
| sentiment_analysis | 系统应用 | 情感分析 |
| machine_translation | 系统应用 | 机器翻译 |
| simultaneous_translation | 系统应用 | 同声翻译 |
| machine_reading_comprehension | 系统应用 | 阅读理解 |
| few_shot | 拓展应用 | 小样本学习 |
| text_to_knowledge | 拓展应用 | 知识关联与挖掘(解语) |
| model_compression | 拓展应用 | 模型压缩 |
| text_graph | 拓展应用 | 文本图学习 |
| contrastive_learning | 拓展应用 | 对比学习(Embedding) |
| code_generation | 其他 | 代码生成 |
| model_interpretation | 其他 | 模型可解释性 |
| multimodal | 其他 | 多模态 |
| torch_migration | 其他 | PyTorch 迁移复现 |
| benchmark | 其他 | 评测基准(Lambada、WikiText、GLUE 等) |
下面按照"基础技术 → 系统应用 → 拓展应用"的主线,逐一深入剖析各代表性示例的技术要点与实战命令。
NLP 基础技术示例
词法分析(Lexical Analysis)
词法分析任务是 PaddleNLP 基础技术中的经典序列标注任务,完整示例位于 lexical_analysis。任务输入为一个字符串(句子),输出为句子中的词边界、词性以及实体类别。示例采用经典的GRU + CRF序列标注建模方式:
- 输入采用 one-hot 方式表示,每个字以一个 id 表示;
- one-hot 序列通过字表转换为实向量表示的字向量序列;
- 字向量序列作为双向 GRU的输入学习特征表示,示例堆叠了两层双向 GRU 以增强学习能力;
- CRF 层以 GRU 学习到的特征为输入、以标记序列为监督信号,完成序列标注解码。
数据准备与格式
执行以下命令下载并解压示例数据集:
python download.py --data_dir ./训练数据除第一行固定的text_a\tlabel开头外,后续每行由两列组成、以制表符分隔:第一列是 utf-8 编码的中文文本(以\002分割每个字),第二列是对应每个字的标注(同样以\002分隔)。标注采用IOB2 标注体系:X-B表示类型为 X 的词开始,X-I表示持续,O表示不关注的字(在词性、专名联合标注中实际不存在 O)。数据示例如下:
除\002了\002他\002续\002任... p-B\002p-I\002r-B\002v-B...其中词性与专名类别标签集合如下:词性标签 24 个(小写字母),专名类别标签 4 个(大写字母)。值得说明的是:人名、地名、机构名、时间四类存在两套标签(PER/LOC/ORG/TIME与nr/ns/nt/t),被标注为第二套标签的词是模型判断为低置信度的实体词,开发者可据此在四类实体的准确率与召回率之间做出权衡。
| 标签 | 含义 | 标签 | 含义 | 标签 | 含义 | 标签 | 含义 |
|---|---|---|---|---|---|---|---|
| n | 普通名词 | f | 方位名词 | s | 处所名词 | t | 时间 |
| nr | 人名 | ns | 地名 | nt | 机构名 | nw | 作品名 |
| nz | 其他专名 | v | 普通动词 | vd | 动副词 | vn | 名动词 |
| a | 形容词 | ad | 副形词 | an | 名形词 | d | 副词 |
| m | 数量词 | q | 量词 | r | 代词 | p | 介词 |
| c | 连词 | u | 助词 | xc | 其他虚词 | w | 标点符号 |
| PER | 人名 | LOC | 地名 | ORG | 机构名 | TIME | 时间 |
模型训练、评估、导出与预测
单卡训练:
python train.py \ --data_dir ./lexical_analysis_dataset_tiny \ --model_save_dir ./save_dir \ --epochs 10 \ --batch_size 32 \ --device gpu \ # --init_checkpoint ./save_dir/finaldata_dir:数据集所在文件夹路径;model_save_dir:训练期间模型保存路径;epochs:模型训练迭代轮数;batch_size:每次迭代每张卡上的样本数目;device:训练设备,gpu表示使用 GPU、xpu表示百度昆仑卡、cpu表示 CPU;init_checkpoint:模型加载路径,通过设置可启动增量训练。
多卡训练(使用 Paddle 分布式启动器):
python -m paddle.distributed.launch --gpus "0,1" train.py \ --data_dir ./lexical_analysis_dataset_tiny \ --model_save_dir ./save_dir \ --epochs 10 \ --batch_size 32 \ --device gpu模型评估:加载训练保存的 checkpoint 在测试集上验证,./save_dir/model_100.pdparams是训练过程中保存的参数文件,需替换为实际路径:
python eval.py --data_dir ./lexical_analysis_dataset_tiny \ --init_checkpoint ./save_dir/model_100.pdparams \ --batch_size 32 \ --device gpu模型导出:动态图训练结束后可将参数导出为静态图参数(实现见export_model.py),静态图参数保存在output_path指定路径:
python export_model.py --data_dir=./lexical_analysis_dataset_tiny --params_path=./save_dir/model_100.pdparams --output_path=./infer_model/static_graph_params其中params_path是动态图训练保存的参数路径,output_path是静态图参数导出路径。导出后即可用于部署,deploy/predict.py提供了 Python 部署预测示例:
# 开启 PIR(PaddlePaddle 3.0.0 默认) python deploy/predict.py --model_file=infer_model/static_graph_params.json --params_file=infer_model/static_graph_params.pdiparams --data_dir lexical_analysis_dataset_tiny # 未开启 PIR python deploy/predict.py --model_file=infer_model/static_graph_params.pdmodel --params_file=infer_model/static_graph_params.pdiparams --data_dir lexical_analysis_dataset_tiny模型预测:对无标签数据启动预测:
python predict.py --data_dir ./lexical_analysis_dataset_tiny \ --init_checkpoint ./save_dir/model_100.pdparams \ --batch_size 32 \ --device gpu输出形如(大学, n)(学籍, n)(证明, n)(怎么, r)(开, v)的分词与词性标注结果。
Taskflow 一键预测与自定义模型
示例还演示了使用 PaddleNLP 的Taskflow工具对文本进行一键分词:
from paddlenlp import Taskflow lac = Taskflow("lexical_analysis") lac("LAC是个优秀的分词工具") # [{'text': 'LAC是个优秀的分词工具', 'segs': ['LAC', '是', '个', '优秀', '的', '分词', '工具'], 'tags': ['nz', 'v', 'q', 'a', 'u', 'n', 'n']}] lac(["LAC是个优秀的分词工具", "三亚是一个美丽的城市"])任务默认路径为$HOME/.paddlenlp/taskflow/lexical_analysis/lac/,包含执行任务所需的全部文件。如需定制化分词及标注结果,可通过task_path加载自定义词法分析模型,自定义目录需包含以下文件(用户自己的模型权重与标签字典):
custom_task_path/ ├── model.pdparams ├── word.dic ├── tag.dic └── q2b.dic加载方式:
from paddlenlp import Taskflow my_lac = Taskflow("lexical_analysis", model_path="./custom_task_path/")Taskflow 的完整用法可进一步参考 docs/zh/model_zoo/taskflow.md。需要说明的是,原始文档中引用的 LAC 预训练模型、PaddleHub 分词模型等外部资源链接不在本仓库内,如需使用可直接参考百度 LAC 开源项目。
文本匹配(Text Matching)
文本匹配是 NLP 领域基础且重要的方向,研究的是两段文本之间的关系。文本相似度计算、自然语言推理、问答系统、信息检索等任务都可抽象为文本匹配问题:信息检索归结为搜索词与文档资源的匹配,问答系统归结为问题与候选答案的匹配,复述识别归结为两个同义句的匹配。文本匹配任务每个样本通常由两个文本组成(query, title),类别为 0(不匹配)或 1(匹配)。
示例库 text_matching 提供了面向搜索、推荐系统排序模块与召回模块的常规解决方案,覆盖三种主流范式:
- 单塔 Point-wise 语义匹配模型ernie_matching:模型精度高、计算复杂度高,适合直接进行语义匹配二分类的应用场景;
- 单塔 Pair-wise 语义匹配模型ernie_matching:模型精度高、计算复杂度高,对文本相似度的序关系建模能力更强,适合将相似度特征作为上层排序模块输入特征的应用场景;
- 双塔 Point-wise 语义匹配模型SimNet 与 Sentence Transformers:计算效率更高,适合对延迟要求高、根据语义相似度进行粗排的应用场景。
其中ernie_matching展示了基于预训练模型 ERNIE-Gram 训练单塔 Point-wise & Pair-wise 语义匹配模型;SimNet展示了使用 CNN、LSTM、GRU 等网络完成文本匹配任务;Sentence Transformers展示了以 ERNIE 为代表的模型 Fine-tune 完成文本匹配任务。
语义索引(Semantic Indexing)
语义索引是搜索引擎、推荐系统、广告系统在召回阶段的核心技术之一,其模型效果直接决定语义相关的物料能否被成功召回进入上层排序。示例库 semantic_indexing 提供了前沿语义索引策略的训练、效果评估方案,支持基于开源的语义索引模型进行文本 Pair 相似度计算或 Embedding 语义表示抽取。
示例基于 ERNIE1.0 热启,分别采用In-batch negatives与HardestNeg策略开源了batch_neg_v1.0和hardest_neg_v1.0模型(模型参数:TrasformerLayer:12, Hidden:768, Heads:12, OutputEmbSize: 256),相比 Baseline 效果显著提升:
| 模型 | Recall@10 | Recall@50 | 策略简要说明 |
|---|---|---|---|
| Baseline | 46.99 | 60.84 | 标准 pair-wise 训练范式,随机采样产生负样本 |
| In-batch negatives | 51.20(+4.21) | 67.24(+6.4) | 在 Batch 内同时使用 batch_size 个负样本训练 |
| HardestNeg | 50.22(+3.23) | 65.17(+4.33) | 在 Batch 内先挖掘最难负样本再 pair-wise 训练 |
数据准备
训练数据每一行由 tab 分隔的语义相似文本 Pair 对组成:
欢打篮球的男生喜欢什么样的女生 爱打篮球的男生喜欢什么样的女生 我手机丢了,我想换个手机 我想买个新手机,求推荐评估集same_semantic.tsv中第 1 列文本作为输入模型的源文本 Source Text,第 2 列作为语义相似的目标文本 Target Text;召回库corpus_file则抽取出训练集所有文本与验证集所有 Target Text 构成。数据依赖hnswlib库用于 ANN 建索引。
代码结构与训练
|—— train_batch_neg.py # In-batch negatives 策略的训练主脚本 |—— train_hardest_neg.py # HardestNeg 策略的训练主脚本 |—— batch_negative |—— model.py # In-batch negatives 策略核心网络结构 |—— hardest_negative |—— model.py # HardestNeg 策略核心网络结构 |—— ann_util.py # Ann 建索引库相关函数 |—— base_model.py # 语义索引模型基类 |—— data.py # 数据读取、数据转换等预处理逻辑 |—— evaluate.py # 根据召回结果和评估集计算评估指标 |—— predict.py # 给定输入文件,计算文本 pair 的相似度 |—— recall.py # 基于训练好的语义索引模型,从召回库中召回相似文本基于In-batch negatives策略训练(指定 GPU 0,1,2,3):
python -u -m paddle.distributed.launch --gpus "0,1,2,3" \ train_batch_neg.py \ --device gpu \ --save_dir ./checkpoints/ \ --batch_size 64 \ --learning_rate 5E-5 \ --epochs 3 \ --output_emb_size 256 \ --save_steps 500 \ --max_seq_length 64 \ --margin 0.2 \ --train_set_file semantic_pair_train.tsv参数含义:device使用 cpu/gpu 训练;save_dir模型存储路径;output_emb_sizeTransformer 顶层输出的文本向量维度;save_steps模型存储 checkpoint 的间隔 steps 数;margin正样本相似度与负样本之间的目标 Gap;train_set_file训练集文件。基于HardestNeg策略的训练脚本train_hardest_neg.py参数与上述完全一致。
效果评估与预测
语义索引评估目标为:给定输入文本,模型从海量候选召回库中快速、准确召回一批语义相关文本。评估分为三步:首先基于模型抽取召回库文本向量并用 ANN 引擎建索引(当前基于 hnswlib);然后抽取评估集 Source Text 向量在索引库中查询召回 Top50 相似 Target Text;最后基于评估集和召回结果计算 R@10 与 R@50:
python -u -m paddle.distributed.launch --gpus "0" --log_dir "recall_log/" \ recall.py \ --device gpu \ --recall_result_dir "recall_result_dir" \ --recall_result_file "recall_result.txt" \ --params_path "${checkpoints_params_file}" \ --hnsw_m 100 \ --hnsw_ef 100 \ --batch_size 64 \ --output_emb_size 256 \ --max_seq_length 60 \ --recall_num 50 \ --similar_text_pair "semantic_similar_pair.tsv" \ --corpus_file "corpus_file"参数含义:recall_result_dir/recall_result_file召回结果存储目录与文件名;params_path待评估模型参数文件;hnsw_m/hnsw_efhnsw 算法参数(保持默认即可);recall_num对 1 个文本召回的相似文本数量;similar_text_pair评估集;corpus_file召回库数据。随后运行evaluate.py产出 R@10 和 R@50 指标:
python -u evaluate.py \ --similar_pair_file "semantic_similar_pair.tsv" \ --recall_result_file "./recall_result_dir/recall_result.txt" \ --recall_num 50预测则基于模型计算文本 Pair 的语义相似度,输入为 tab 分隔的 tsv 文件:
python -u -m paddle.distributed.launch --gpus "0" \ predict.py \ --device gpu \ --params_path "./checkpoints/batch_neg_v1.0.0/model_state.pdparams" \ --output_emb_size 256 \ --batch_size 128 \ --max_seq_length 64 \ --text_pair_file ${your_input_file}两种负采样策略的核心思路
In-batch negatives策略的训练数据为语义相似的 Pair 对,其核心是在 1 个 Batch 内同时基于 N 个负例进行梯度更新,将 Batch 内除自身之外其它所有 Source Text 对应的 Target Text 作为负例。例如 Batch size=4 时,我手机丢了,我想换个手机有 1 个正例和 3 个负例。
HardestNeg策略的核心则是在 Batch 内所有负样本中先挖掘出最难区分的负样本,再基于最难负样本进行梯度更新,促使模型学到更细腻的判别能力。
示例同时集成了基于 Paddle 自定义算子能力的 FastGeneration 高性能预测 API(基于 FasterTransformer 思路),并给出了多组 batch size / max_seq_len 下的性能评测数据表(测试环境为 NVIDIA Tesla V100 16G 单卡、Paddle 2.2.1、CUDA 10.1、cuDNN 7.6),可使用faster_predict.py配合--use_fp16加速推理。需要说明的是,示例文档中给出的加速比等数据均为该项目当时测试环境的实测结果,实际部署时请以当前 Paddle 版本与硬件环境重新验证。
信息抽取(Information Extraction)
信息抽取示例位于 information_extraction,包含 DuEE(事件抽取)、DuIE(关系抽取)、DuUIE(通用信息抽取)、msra_ner(命名实体识别)与 waybill_ie(快递单信息抽取)五个子示例。以 waybill_ie 为例,它演示了如何从快递单中抽取姓名、电话、省、市、区、详细地址等内容并形成结构化信息。
数据集中以特殊字符\t分隔文本与标签,以\002分隔每个字,标注采用BIO 模式:B(begin)表示标签类别的开头(如 P-B 指姓名开头),I(inside)表示标签延续,O 表示无关字符。标签定义如下:
| 标签 | 定义 | 标签 | 定义 |
|---|---|---|---|
| P-B | 姓名起始位置 | P-I | 姓名中间位置或结束位置 |
| T-B | 电话起始位置 | T-I | 电话中间位置或结束位置 |
| A1-B | 省份起始位置 | A1-I | 省份中间位置或结束位置 |
| A2-B | 城市起始位置 | A2-I | 城市中间位置或结束位置 |
| A3-B | 县区起始位置 | A3-I | 县区中间位置或结束位置 |
| A4-B | 详细地址起始位置 | A4-I | 详细地址中间位置或结束位置 |
| O | 无关字符 |
示例提供BiGRU+CRF与ERNIE+FC两种模型结构:前者显存占用小、推理速度快;后者收敛更快、精度更高但推理较慢。分别通过run_bigru_crf.py与run_ernie.py启动训练,并通过export_ernie_model.py、export_ernie_crf_model.py、export_bigru_crf_model.py导出静态图模型,随后可配合deploy/python进行部署预测。
NLP 系统应用示例
机器翻译(Machine Translation)
机器翻译是利用计算机将一种自然语言(源语言)转换为另一种自然语言(目标语言)的过程。示例库 machine_translation 以 WMT'14 EN-DE 数据集为示例,配套 Transformer 翻译模型的完整训练、评估与部署流程。使用示例前需额外安装attrdict、pyyaml、subword_nmt(以及可选的fastBPE)。
数据准备:内置数据集与自定义数据集
使用内置数据集:编写如下代码即可自动载入 WMT14 EN-DE 数据,数据集会自动下载并解压到~/.paddlenlp/datasets/WMT14ende/:
datasets = load_dataset('wmt14ende', splits=('train', 'dev'))使用自定义数据集:可先通过 shell 脚本完成数据下载与 bpe 训练,再调用preprocessor/preprocessor.py完成词表构建、数据集文件整理与 bpe 分词(可选):
# 数据下载、处理,包括 bpe 的训练 bash preprocessor/prepare-wmt14en2de.sh --icml17 # 数据预处理 DATA_DIR=examples/translation/wmt14_en_de python preprocessor/preprocessor.py \ --source_lang en \ --target_lang de \ --train_pref $DATA_DIR/train \ --dev_pref $DATA_DIR/dev \ --test_pref $DATA_DIR/test \ --dest_dir data/wmt17_en_de \ --thresholdtgt 0 \ --thresholdsrc 0 \ --joined_dictionarypreprocessor.py主要参数说明:
--src_lang/--trg_lang(-s/-t):源语言与目标语言类型,如en英语、de德语、fr法语;--train_pref/--dev_pref/--test_pref:训练/验证/测试数据的路径与文件名前缀(结合源语言名得到具体文件),验证集与测试集中未在训练集出现过的 token 会被<unk>替换;--dest_dir:处理完成数据与词表的保存路径;--threshold_src/--threshold_trg:源/目标语言中频次低于阈值的 token 替换为<unk>,默认 0 表示不忽略;--src_vocab/--trg_vocab:源/目标语言词表,默认 None 表示根据训练集重新生成,若共用词表则使用--src_vocab;--nwords_src/--nwords_trg:词表最大大小(不含 special token),默认不限制;--align_file:是否将平行语料整合成一个文件;--joined_dictionary:源/目标语言是否共用同一份词表;--only_source/--dict_only:是否仅处理源语言 / 仅处理词表;--bos_token/--eos_token/--pad_token/--unk_token:句子开始、结束、padding 与未登录词替换标记;--apply_bpe/--bpe_code:是否作 bpe 分词及对应的 bpe code 文件。
数据下载与处理环节还依赖 mosesdecoder 的tokenizer.perl、clean-corpus-n.perl以及 subword-nmt 的learn_bpe.py、apply_bpe.py完成分词、清洗与 bpe 学习。除 WMT14 英德外,仓库还提供了prepare-wmt14en2fr.sh用于英法数据。进一步训练、评估和推理请参考 transformer/README.md,其部署方案还包含 cpp、python 与 serving 三种形态。
情感分析(Sentiment Analysis)
情感分析旨在自动识别和提取文本中的倾向、立场、评价、观点等主观信息,包含句子级情感分类、评价对象级情感分类、观点抽取、情绪分类等任务。示例库 sentiment_analysis 中的 skep 展示了百度研究团队提出的情感知识增强预训练模型SKEP(Sentiment Knowledge Enhanced Pre-training for Sentiment Analysis,ACL 2020 论文)。
SKEP 利用无监督方法自动挖掘情感知识,再利用情感知识构建预训练目标,为各类情感分析任务提供统一且强大的情感语义表示。示例在语句级情感分类、评价对象级情感分类、观点抽取三类典型任务共 14 个中英文数据集上给出了验证结果,例如 SST-2(英文,ACC 指标)、ChnSentiCorp(中文)等数据集上的表现。同目录下还包含 textcnn 等轻量模型示例。需要说明的是,示例文档中给出的具体精度数值为该论文及当时实验环境的评测结果,引用时建议以原论文与当前环境复测为准。
其他系统应用
示例库还覆盖了同声翻译(simultaneous_translation,包含 STACL 模型及 demo)与阅读理解(machine_reading_comprehension,包含 SQuAD、DuReader-robust、DuReader-yesno 等数据集),为流式翻译与抽取式/是/否问答提供完整参考实现。
NLP 拓展应用示例
小样本学习(Few-Shot Learning)
Few-Shot Learning 研究如何从少量有监督训练样本中学习出具有良好泛化性的模型,对训练数据很少或监督数据获取成本极高的场景价值显著。示例库 few_shot 提供简单易用、全面、前沿的 FSL 策略库,包含 P-tuning、EFL、PET 三种算法,并在中文小样本学习测评基准 FewCLUE 上评测。
以下是基于 ERNIE-1.0-Large-CW 预训练模型、在 FewCLUE 9 个任务的 test_public.json 测试集上的效果评测:
| 算法 | 预训练模型 | eprstmt | csldcp | iflytek | tnews | ocnli | bustm | chid | csl | cluewsc |
|---|---|---|---|---|---|---|---|---|---|---|
| PET | ERNIE-1.0-Large-CW | 88.03 | 63.79 | 56.43 | 56.57 | 56.27 | 72.69 | 91.39 | 76.00 | 78.79 |
| P-Tuning | ERNIE-1.0-Large-CW | 89.84 | 64.57 | 45.80 | 57.41 | 44.13 | 68.51 | 90.00 | 74.67 | 73.26 |
| EFL | ERNIE-1.0-Large-CW | 90.82 | 54.48 | 46.71 | 54.43 | 43.17 | 72.63 | 85.71 | 61.52 | 80.02 |
评测注释:CHID 数据集指标与 FewCLUE 榜单计算方式不同;由于 iflytek 和 csldcp 标签数较多,每条样本采样 5 个非正确标签作为负样本训练评测;为统一配置,除 EFL-iflytek 外均训练 1000 steps,EFL-iflytek 训练 5000 steps。各算法子目录(p-tuning、efl、pet)分别对应论文 P-Tuning(GPT Understands, Too)、EFL(Entailment as Few-Shot Learner)与 PET(Exploiting Cloze Questions for Few Shot Text Classification)的复现实现。
文本知识挖掘:解语(Text to Knowledge)
text_to_knowledge 是首个覆盖中文全词类的知识库(百科知识树)及知识标注与挖掘框架,拥有可描述所有中文词汇的词类体系、中文知识标注工具集,以及更适用于中文挖掘任务的预训练语言模型。解语由三部分构成:
- 百科知识树(TermTree)(termtree):包括能够描述所有中文词汇的 TermType 词类体系以及 Term 关系和属性值;
- 中文知识标注工具集:包括词类知识标注工具 WordTag(wordtag)、名词短语标注工具 NPTag(nptag)与适用于中文文本挖掘的预训练语言模型 ERNIE-CTM(ernie-ctm);
- 中文知识挖掘方案:知识模板挖掘工具(wordtag-ie),提供灵活可配置、可快速定制的中文知识挖掘方案。
开源试用版包括:TermTree V1.0 试用版(简化版 TermType 词类体系 + 约 100 万 term 集)、WordTag V1.0、NPTag V1.0 与 ERNIE-CTM V1.0。
应用场景 A:文本挖掘/解析模板生成与匹配
WordTag 整合了传统中文解析的分词、词性标注、命名实体识别能力,可将任意中文句子解析为完整的词类序列。基于 WordTag 标注的样本词类序列,可自动生成或配置更丰富、精准的挖掘/解析模板。例如输入美人鱼是周星驰执导的电影,得到如下标注结果(含wordtag_label词类标签与termid知识树关联 ID):
{ "text": "美人鱼是周星驰执导的电影", "items": [ {"item": "美人鱼", "offset": 0, "wordtag_label": "作品类_实体", "length": 3, "termid": "作品与出版物_eb_美人鱼"}, {"item": "是", "offset": 3, "wordtag_label": "肯定词", "length": 1, "termid": "肯定否定词_cb_是"}, {"item": "周星驰", "offset": 4, "wordtag_label": "人物类_实体", "length": 3, "termid": "人物_eb_周星驰"}, {"item": "执导", "offset": 7, "wordtag_label": "场景事件", "length": 2, "termid": "场景事件_cb_执导"}, {"item": "的", "offset": 9, "wordtag_label": "助词", "length": 1, "termid": "助词_cb_的"}, {"item": "电影", "offset": 10, "wordtag_label": "作品类_概念", "length": 2, "termid": "影视作品_cb_电影"} ] }取出词类序列并去除虚词、标点后即可构造挖掘匹配模板:
[作品类_实体][肯定词|是][人物类_实体][场景事件|执导][作品类_概念|电影]结合 TermTree 概念扩展可匹配出所有同句式文本(如"《狂人日记》是鲁迅创作的……"、"《澳门风云》是王晶创作执导的……"等)。WordTag 区分"人物类_实体/概念"、"作品类_实体/概念",TermTree 也区分命名实体词(eb: entity base)与非实体词(cb: concept base),可分别进行实体扩展(如 周星驰→王晶)与概念扩展(如 电影→小说),生成更丰富多样的模板。
应用场景 B/C/D:知识增强、图谱关联与样本优化
- 词类知识增强的深度学习模型:将 WordTag 产出的词类作为 embedding 特征叠加到文本 token 上,或在 BERT 等模型中利用 position id 与可见性矩阵控制 token 和词类特征的可见性;
- 知识图谱关联(term-linking):"WordTag+TermTree" 提供通用图谱关联框架,将 term-linking 拆分为基于词类的 linking(仅用文本与词类特征,支持切换不同应用图谱)与同类同名实体词的 linking(需依赖特定图谱的 SPO 知识);开源版提供第一步的解决示例;
- 文本分类与文本挖掘样本优化:使用 WordTag 产出样本模板、TermTree 泛化约束筛选高置信度样本或过滤不合格样本;利用词类关系检测类别与样本一致性;利用 TermTree 筛选样本提升低频 term 上的样本平衡性与泛化能力。
此外示例文档还给出了解语的论文引用信息(Zhao et al., TermTree and Knowledge Annotation Framework for Chinese Language Understanding),适合在学术工作中引用。
对比学习(Contrastive Learning)
contrastive_learning 展示了对比学习在文本向量模型(Embedding Model)中的应用。对比学习是一种自监督学习方法,通过最大化相似样本对(正样本对)相似性、最小化非相似样本对(负样本对)相似性来学习数据表示,无需明确标签、能利用大量未标注数据。
数据准备:Query 清洗与负样本挖掘
训练数据样例为 JSON 格式,包含query(查询文本)、pos_passage(正样本列表)与neg_passage(负样本列表):
{"query": "四季青的炮制方法是什么?", "pos_passage": ["取原药材,除去残枝、枯叶及杂质,略润,切成丝,干燥,筛去灰屑。..."], "neg_passage": ['平时多注意锻炼。饮食方面多吃大叶的绿色蔬菜...']}Query 清洗:训练效果高度依赖数据质量,大量相似 query 会干扰训练。清洗步骤为:利用 Embedding Model 将每个 query 转为向量 → 用余弦相似度计算 query 间相似度并设置阈值去重 → 使用多卡推理与 faiss 向量索引加速。示例代码:
from clean_query import Clean_Query model_path = 'BAAI/bge-m3' tokenizer_path = 'BAAI/bge-m3' input_data_path = './toy_data/toy_source.json' output_data_path = './toy_data/test_clean.json' test_clean = Clean_Query(model_path, tokenizer_path, input_data_path=input_data_path, output_data_path=output_data_path, similarity_threshold=0.70) test_clean.clean()多卡推理加速清洗:
python -u -m paddle.distributed.launch --devices "0,1,2,3,4,5,6,7" clean_query.py负样本挖掘:高质量负样本能加速训练并增强泛化性能。步骤为:构建 query 与 positive passage 的向量表示 → 在向量空间计算余弦相似度召回"虽不直接相关但有一定相似性"的困难负样本 → 多卡推理 + faiss 加速。示例代码:
from mining_negative_samples import MiningNegativeSamples input_data_path = './toy_data/toy_source.json' output_data_path = './toy_data/test_min_neg.json' model_path = 'BAAI/bge-m3' tokenizer_path = 'BAAI/bge-m3' test_mining = MiningNegativeSamples(model_path, tokenizer_path, input_data_path=input_data_path, output_data_path=output_data_path) test_mining.mining()训练、推理与评估
Embedding Model 训练代码位于仓库 llm/run_embedding.py,训练示例:
python -u -m paddle.distributed.launch --devices "0,1,2,3,4,5,6,7" run_embedding.py ./config/xlm_roberta/emb_argument.json训练完成后进行推理评估,评估指标包括 hit rate、MRR、NDCG 等:
model_path = 'BAAI/bge-m3' tokenizer_path = 'BAAI/bge-m3' query_pos_passage_path = './toy_data/toy_dev.json' neg_passage_path = './toy_data/toy_dev_neg.json' eval = Embedding_Evaluation(model_path, tokenizer_path, query_pos_passage_path, neg_passage_path) print(eval.evaluate())其中query_pos_passage_path为待评估的 query-正样本对数据,neg_passage_path为参与评估的负样本数据;推理评估后将打印并返回 Hit_rate、MRR、NDCG 等评价指标。多卡推理评估使用embedding_evaluate.py脚本配合paddle.distributed.launch启动。示例还注明借鉴了 FlagEmbedding 中 Hard Negative Mining 相关教程的代码设计思路。
评测基准与工程化示例
Benchmark 评测
benchmark 目录提供了若干模型评测基准,其中 wiki_lambada 演示了在 Lambada 与 WikiText 数据集上评估语言模型:
# 验证 Lambada 数据集 python eval.py \ --model_name_or_path /path/to/your/model \ --batch_size 4 \ --eval_path /path/to/your/dataset/lambada_test.jsonl \ --tensor_parallel_degree 1 \ --cloze_eval # 验证 WikiText 数据集 python eval.py \ --model_name_or_path /path/to/your/model \ --batch_size 4 \ --eval_path /path/to/your/dataset/wikitext-103/wiki.valid.tokens \ --tensor_parallel_degree 1此外还有 ceval、clue、glue、peft 等评测示例,覆盖中文综合能力、NLP 经典基准与参数高效微调等场景。
模型压缩、文本图学习与多模态等拓展
- 模型压缩(model_compression):提供 distill_lstm、minilmv2、ofa、pp-minilm 等蒸馏与裁剪方案,其中 pp-minilm 还包含 general_distill 与 serving 部署;
- 文本图学习(text_graph/erniesage):基于 ERNIESage 模型将文本与图结构结合进行表示学习;
- 多模态(multimodal):涵盖 LayoutLM、LayoutXLM、MiniGPT4 等图文模型示例;
- 模型可解释性(model_interpretation):提供可解释性分析相关示例;
- 代码生成(code_generation/codegen):CodeGen 模型示例;
- PyTorch 迁移(torch_migration):提供从 PyTorch 迁移到 Paddle 的分步复现流程(Step1~Step5),示例文档给出了安装 PaddlePaddle 与 PyTorch 的具体命令,其中依赖版本要求以各示例的
requirements.txt为准。
如何选择适合你的示例
开发者可根据业务形态快速定位示例:
- 需要分词、词性、专名识别→ 参考 lexical_analysis,支持 GRU+CRF 训练与 Taskflow 一键预测;
- 需要语义匹配/相似度排序/召回→ 单塔选 ernie_matching,双塔粗排选 simnet 或 sentence_transformers,召回阶段选 semantic_indexing;
- 需要抽取结构化字段→ 参考 information_extraction(事件、关系、NER、快递单);
- 需要翻译/摘要/阅读理解/情感分析→ 分别参考 machine_translation、text_summarization、machine_reading_comprehension、sentiment_analysis;
- 监督数据稀缺→ 参考 few_shot 的 P-tuning/EFL/PET 策略;
- 中文知识挖掘与图谱关联→ 参考 text_to_knowledge 的 WordTag + TermTree 方案;
- 文本向量表示与检索排序→ 参考 contrastive_learning 的 Query 清洗、负样本挖掘与 Embedding 训练评估全流程。
总结
slm/examples示例库完整覆盖了从基础词法分析、文本匹配、语义索引、信息抽取,到机器翻译、情感分析等系统应用,再到小样本学习、知识挖掘、对比学习等拓展方向,并配套模型压缩、评测基准与 PyTorch 迁移工程化支撑。每个示例均遵循"数据准备 → 训练 → 评估 → 导出/部署 → 预测"的完整闭环,可直接复现、可按需替换自有数据,是快速上手 PaddleNLP 各类文本任务、验证算法思路与落地产业应用的首选参考。
- 人工智能
- 大模型
- 预训练
- 微调
- LoRA
- RLHF
- 强化学习
- 分布式训练
【免费下载链接】PaddleNLP
Easy-to-use and powerful LLM and SLM library with awesome model zoo.
相关推荐
地理信息系统技术生态全景指南:从基础工具到前沿应用
地理信息系统技术生态全景指南:从基础工具到前沿应用 地理信息系统(GIS)是一门融合空间数据处理、地图可视化与地理分析的交叉学科,而 awesome gis 项
文档GISSlacker文件上传与消息管理:企业级Slack集成开发最佳实践
Slacker文件上传与消息管理:企业级Slack集成开发最佳实践 Slacker是一个功能全面的Python Slack API客户端,为开发者提供了便捷的企
终极免费股票分析平台:OpenStock完整搭建指南与专业级功能深度解析
终极免费股票分析平台:OpenStock完整搭建指南与专业级功能深度解析 在金融市场数据日益昂贵的今天,OpenStock作为一款完全开源的专业级股票分析平台,
金融科技前端后端AI 应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考