文心大模型,产业级常识加强大模型介绍
官网:https://wenxin.baidu.com/
文心大模型开发套件 ERNIEKit,面向 NLP 工程师,提供全流程大模型开发与部署工具集,端到端、全方位施展大模型效力。
提供业界成果当先的 ERNIE 3.0 系列开源模型和基于 ERNIE 的前沿任务模型,满足企业和开发者对 NLP 模型开发和学习的需要,预置文本分类、文本匹配、序列标注、信息抽取、文本生成五大经典 NLP 工作,提供基于 ERNIE3.0 的预训练模型的开发和应用。
PS:这里特地正文一下,目前 ERNIEKit 套件在兼容 Paddle2.4 版本上还有点问题,稳固版本是 2.2,上司环境介绍里也有表明,次要还是对 1.x 的 fluid 兼容问题。
1. 文本匹配
文本匹配是 NLP 中一个重要的根底问题,NLP 中的许多工作都能够形象为文本匹配工作,其通常以文本类似度计算、文本相关性计算的模式,在利用零碎中起外围撑持作用。
代码构造:
文本匹配工作位于./applications/tasks/text_matching
.
├── data ### 示例数据文件夹,包含各工作所需的训练集、测试集、验证集和预测集
│ ├── dev_data
│ │ └── dev.txt
│ ├── dev_data_tokenized
│ │ └── dev.txt
│ ├── dict
│ │ └── vocab.txt
│ ├── download_data.sh
│ ├── predict_data
│ │ └── infer.txt
│ ├── predict_data_tokenized
│ │ └── infer.txt
│ ├── test_data
│ │ └── test.txt
│ ├── test_data_tokenized
│ │ └── test.txt
│ ├── train_data_pairwise
│ │ └── train.txt
│ ├── train_data_pairwise_tokenized
│ │ └── train.txt
│ └── train_data_pointwise
│ └── train.txt
├── data_set_reader ### 与匹配工作相干的数据读取代码
│ └── ernie_classification_dataset_reader.py ### 应用 ERNIE 的 FC 匹配工作专用的数据读取代码
├── examples ### 各典型网络的 json 配置文件,infer 后缀的为对应的预测配置文件
│ ├── mtch_bow_pairwise_ch_infer.json
│ ├── mtch_bow_pairwise_ch.json
│ ├── mtch_ernie_fc_pointwise_ch_infer.json
│ ├── mtch_ernie_fc_pointwise_ch.json
│ ├── mtch_ernie_pairwise_simnet_ch_infer.json
│ ├── mtch_ernie_pairwise_simnet_ch.json
│ ├── mtch_ernie_pointwise_simnet_ch_infer.json
│ └── mtch_ernie_pointwise_simnet_ch.json
├── inference ### 模型预测代码
│ └── custom_inference.py ### 文本匹配工作通用的模型预测代码
├── model ### 文本匹配工作相干的网络文件
│ ├── base_matching.py
│ ├── bow_matching_pairwise.py
│ ├── ernie_matching_fc_pointwise.py
│ ├── ernie_matching_siamese_pairwise.py
│ └── ernie_matching_siamese_pointwise.py
├── run_infer.py ### 依附 json 进行模型预测的入口脚本
├── run_trainer.py ### 依附 json 进行模型训练的入口脚本
└── trainer ### 模型训练和评估代码
├── custom_dynamic_trainer.py ### 动静库模式下的模型训练评估代码
└── custom_trainer.py ### 动态图模式下的模型训练评估代码
1.1 数据筹备
在文心中,基于 ERNIE 的模型都不须要用户本人分词和生成词表文件,非 ERNIE 的模型须要用户本人提前切好词,词之间以空格分隔,并生成词表文件。切词和词表生成能够应用「分词工具与词表生成工具」进行解决。
- 文心中的所有数据集、蕴含词表文件、label_map 文件等都必须为为 utf- 8 格局,如果你的数据是其余格局,请应用「编码辨认及转换工具」进行格局转换。
- 在文本匹配工作中,依据其训练形式的不同,训练集分为 Pointwise 和 Pairwise 两种格局,测试集、验证集和预测集的格局雷同。
- 非 ERNIE 数据的 pointwise 训练集、pairwise 训练集、测试集、验证集和预测集别离寄存在./applications/tasks/text_matching/data 目录下的 train_data_pointwise_tokenized、train_data_pairwise_tokenized、test_data_tokenized、dev_data_tokenized 和 predict_data_tokenized 文件夹下。
- ERNIE 数据的 pointwise 训练集、pairwise 训练集、测试集、验证集和预测集别离寄存在./applications/tasks/text_matching/data 目录下的 train_data_pointwise、train_data_pairwise、test_data、dev_data 和 predict_data 文件夹下。
1.1.1 非 ERNIE 模型数据
训练集
-
Pointwise 训练集:数据分为三列,列与列之间用 \t 宰割。前两列为文本,最初一列为标签。
喜爱 打篮球 的 男生 喜爱 什么样 的 女生 爱 打篮球 的 男生 喜爱 什么样 的 女生 1 我 手机 丢 了,我 想 换 个 手机 我 想 买 个 新手机,求 举荐 1 大家 感觉 她 难看 吗 大家 感觉 跑 男 难看 吗?0
-
Pairwise 训练集:数据分为三列,列与列之间用 \t 宰割,以 query 和文章题目匹配工作为例,第一列为 query,第二列为正例题目 pos_titile,第三列为负例题目 neg_title。
喜爱 打篮球 的 男生 喜爱 什么样 的 女生 爱 打篮球 的 男生 喜爱 什么样 的 女生 恋情 里 没有 谁 对 谁错 吗?我 手机 丢 了,我 想 换 个 手机 我 想 买 个 新手机,求 举荐 剑灵 高级 衣料 怎么 得 大家 感觉 她 难看 吗 大家 感觉 跑 男 难看 吗?照片 怎么 变成 漫画
预测集
-
预测集样例如下所示,预测集无需进行标签预占位,数据为两列文本,两列文本之间应用 \t 进行分隔。
图片 上 得 牌子 是 什么 图片 上 是 什么 牌子 的 包 芹菜 包 什么 肉 好吃 芹菜 炒 啥 好吃 汽车 坐垫 什么 牌子 好?什么 牌子 的 汽车 坐垫 好
词表
非 ERNIE 模型的词表文件示例寄存在 ./applications/tasks/text_matching/data/dict/vocab.txt :词表分为两列,第一列为词,第二列为 id(从 0 开始),列与列之间用 **\t 进行分隔。文心的词表中 [PAD]、[CLS]、[SEP]、[MASK]、[UNK] 这 5 个词是必须要有的,若用户自备词表,需保障这 5 个词是存在的。局部词示意例如下所示:[PAD] 0 [CLS] 1 [SEP] 2 [MASK] 3 的 4 这个 5 您好 6 ... [UNK] 1566
1.1.2 ERNIE 模型数
训练集
ERNIE 数据集与非 ERNIE 数据集格局统一,不同之处在于不必分词
-
Pointwise 训练集:数据分为三列,列与列之间用 \t 宰割。前两列为文本,最初一列为标签。
喜爱打篮球的男生喜爱什么样的女生 爱打篮球的男生喜爱什么样的女生 1 我手机丢了,我想换个手机 我想买个新手机,求举荐 1 大家感觉她难看吗 大家感觉跑男难看吗?0 求秋色之空漫画选集 求秋色之空选集漫画 1 早晨睡觉带着耳机听音乐有什么坏处吗?孕妇能够戴耳机听音乐吗? 0
-
Pairwise 训练集:数据分为三列,列与列之间用 \t 宰割,以 query 和文章题目匹配工作为例,第一列为 query,第二列为正例题目 pos_titile,第三列为负例题目 neg_title。
喜爱打篮球的男生喜爱什么样的女生 爱打篮球的男生喜爱什么样的女生 这边的状态显示是期待确认的 我手机丢了,我想换个手机 我想买个新手机,求举荐 求一本小说是和攻撕逼的 大家感觉她难看吗 大家感觉跑男难看吗?四川商务职业学院好不好呀 求秋色之空漫画选集 求秋色之空选集漫画 杂志社摄影照片投稿 早晨睡觉带着耳机听音乐有什么坏处吗?孕妇能够戴耳机听音乐吗? 给姓全的男生起外号
测试集 / 验证集
- ERNIE 数据集与非 ERNIE 数据集格局统一,不同之处在于不必分词
-
测试集 / 验证集样例如下所示,数据分为三列,列与列之间用 \t 进行分隔,前两列为文本,最初一列为标签。
尺有所短,前面是什么 尺有所短,前面写什么 1 为什么恐怖片会吓死人 为什么恐怖片会吓死人?1 这是什么舞?(图片) 这是什么枪图片如下 0 这是什么意思,翻译一下 翻译一下这是什么意思 1
海 尔 全 自 动 洗 衣 机 怎 么 样 海 尔 全 自 动 洗 衣 机 怎 么 样 海 尔 全 自 动 洗 衣 机 怎 么 用 海 尔 全 自 动 洗 衣 机 怎 么 用 在 家 电 脑 做 什 么 兼 职 好 呢 在 家 电 脑 做 什 么 兼 职 好 呢 两 台 电 脑 做 什 么 兼 职 好 呢 两 台 电 脑 做 什 么 兼 职 好 呢 这 是 什 么 动 漫 的 图 片 啊 } 这 是 什 么 动 漫 的 图 片 啊 } 这 是 动 漫 还 是 图 片 这 是 动 漫 还 是 图 片
词表
ERNIE 词表文件格式与非 ERNIE 的格局统一,ERNIE 词表由文心 model 提供,./applications/models_hub 门路下各 ERNIE 模型文件夹下存在着对应的词表文件,用户可依据须要进行抉择,具体示例如下所示:
[PAD] 0
[CLS] 1
[SEP] 2
[MASK] 3,4
的 5、6
一 7
人 8
1.2 网络(模型)抉择
文心预置的可用于文本分类的模型源文件在 applications/tasks/text_matching/model 目录下,在介绍具体的模型前先对文本匹配网络波及到的概念进行形容。
单塔 | 双塔 | |
---|---|---|
Pointwise | ||
Pairwise |
-
Pointwise/Pairwise
- Pointwise:输出两个文本和一个标签,可看作为一个分类问题,即判断输出的两个文本是否匹配。
- Pairwise:输出为三个文本,别离为 Query 以及对应的正样本和负样本,该训练形式思考到了文本之间的绝对程序。
-
单塔 / 双塔
- 单塔:先将输出文本合并,而后输出到繁多的神经网络模型。
- 双塔:对输出文本别离进行编码成固定长度的向量,通过文本的示意向量进行交互计算失去文本之间的关系。
- 各个模型的特点如下所示:
网络名称(py 文件的类名) | 简介 | 反对类型 | 反对预训练模型 | |
---|---|---|---|---|
BowMatchingPairwise(bow_matching_pairwise.py) | 词袋模型,不思考句子语序,用一组无序单词来表白一段文本;Pairwise 双塔模型。 | Pairwise | ERNIE2.0-Base、ERNIE2.0-large、ERNIE3.0-Base、ERNIE3.0-x-Base、ERNIE3.0-Medium | |
ErnieMatchingFcPointwise(ernie_matching_fc_pointwise) | 减少 ERNIE 预训练模型,上游网络为根底的文本匹配模型,能够任意搭配其余各种经典网络;Pointwise 单塔模型。 | Pointwise | ERNIE2.0-Base、ERNIE2.0-large、ERNIE3.0-Base、ERNIE3.0-x-Base、ERNIE3.0-Medium | |
ErnieMatchingSiamesePairwise(ernie_matching_siamese_pairwise.py) | 减少 ERNIE 预训练模型,上游网络采纳余弦类似度作为匹配度计算,损失函数为合页损失函数;Pairwise 双塔模型。 | Pairwise | ERNIE2.0-Base、ERNIE2.0-large、ERNIE3.0-Base、ERNIE3.0-x-Base、ERNIE3.0-Medium | |
ErnieMatchingSiamesePointwise(ernie_matching_siamese_pointwise.py) | 减少 ERNIE 预训练模型,上游网络采纳长短期记忆网络,可较好地解决序列文本中长距离依赖的问题;Pointwise 双塔模型; | Pointwise | ERNIE2.0-Base、ERNIE2.0-large、ERNIE3.0-Base、ERNIE3.0-x-Base、ERNIE3.0-Medium、ERNIE-M |
面向搜寻、举荐零碎排序模块、召回模块的惯例解决方案,具体如下:
- 基于单塔 Point-wise 范式的语义匹配模型 ernie_matching: 模型精度高、计算复杂度高, 适宜间接进行语义匹配 2 分类的利用场景。
- 基于单塔 Pair-wise 范式的语义匹配模型 ernie_matching: 模型精度高、计算复杂度高, 对文本类似度大小的序关系建模能力更强,适宜将类似度特色作为下层排序模块输出特色的利用场景。
- 基于双塔 Point-wise 范式的语义匹配模型 SimNet 和 Sentence Transformers, 这 2 种计划计算效率更高,适宜对延时要求高、依据语义类似度进行粗排的利用场景。
1.3 ERNIE 预训练模型下载
文心提供的 ERNIE 预训练模型的下载脚本在 applications/models_hub 目录下,各预训练模型可由对应的 download_xx.sh 文件下载失去,用户可依据需要自行下载。其中,ernie_config.json 为 ERNIE 预训练模型的配置文件,vocab.txt 为 ERNIE 预训练模型的词表文件,params 目录为 ERNIE 预训练模型的参数文件目录。
模型名称 | 下载脚本 | 备注 |
---|---|---|
ERNIE2.0-Base | sh download_ernie_2.0_base_ch.sh | 下载并解压后失去对应模型的参数、字典和配置 |
ERNIE2.0-large | sh download_ernie_2.0_large_ch.sh | |
ERNIE3.0-Base | sh download_ernie_3.0_base_ch.sh | |
ERNIE3.0-x-Base | sh download_ernie_3.0_x_base_ch.sh | |
ERNIE3.0-Medium | sh download_ernie_3.0_medium.sh |
1.4 模型评估指标抉择
匹配工作罕用的指标有:Acc(准确率)、Precision(准确率)、Recall(召回率)、pn(正逆序比)、Auc、F1 等
1.5 运行环境抉择
- 非 ERNIE 网络,优先思考 CPU 机器
- ERNIE 网络优先思考 GPU 机器,显存大小最好在 10G 以上。
2. 开始训练 & 预测
2.1 环境装置
- 装置环境依赖:环境装置
- 装置 Ernie 套件
2.1.1 环境版本要求:
- 环境次要装置 Python 和 Paddle 对应版本要求的环境,两头倡议应用 pip 装置形式进行装置。
- Python3 版本要求:python3.7 及以上版本,参考 https://www.python.org/
- PaddlePaddle 版本要求:paddlepaddle2.0+ 版本,参考 https://www.paddlepaddle.org….
-
Paddle 环境的装置,须要确认 Python 和 pip 是 64bit,并且处理器架构是 x86_64(或称作 x64、Intel 64、AMD64)架构,目前 PaddlePaddle 不反对 arm64 架构(mac M1 除外,paddle 已反对 Mac M1 芯片)。上面的第一行输入的是”64bit”,第二行输入的是”x86_64”、”x64”或”AMD64”即可:
python -c "import platform;print(platform.architecture()[0]);print(platform.machine())"
2.1.2 CPU 机器和 GPU 机器的装置
CPU 机器的装置
-
请参考 1,实现 Paddle 和 Python3 的装置即可
#### GPU 机器的装置
应用 GPU 机器时,比 CPU 机器的装置多了 GPU 相关驱动的配置装置
1、GPU 环境及示例
- 须要您确认本人的 GPU 机器的装置状况,包含:nvidia 驱动、cuda 版本、cudnn 版本、nccl 版本。
- 以下是文心 ERNIE 开发套件在 GPU 机器上运行的环境配置示例:
环境示例
-
Tesla V100 上 nvidia 驱动、cuda 版本、cudnn 版本、nccl 版本、python 版本以及 PaddlePaddle 版本
-
NVIDIA Driver Version: 418.67
- CUDA Version: 10.1
- CUDNN Version:7.6.0
- NCCL Version: 2.3.5
- Python 3.7.1 及以上
- PaddlePaddle 2.2
-
-
Tesla K40 上 nvidia 驱动、cuda 版本、cudnn 版本、nccl 版本、python 版本以及 PaddlePaddle 版本
-
NVIDIA Driver Version: 418.39
- CUDA Version: 10.1
- CUDNN Version:7.0.3
- NCCL Version: 2.3.5
- Python 3.7.1 及以上
- PaddlePaddle 2.2
2、配置环境变量:
-
- 上述环境配置实现当前,能够参考以下形式进行运行时环境变量的配置。
-
如果您的开发机上曾经配置好文心 ERNIE 开发套件须要的环境,能够参考以下命令设置您的运行环境,配置如下:
set -x #在 LD_LIBRARY_PATH 中增加 cuda 库的门路 export LD_LIBRARY_PATH=/home/work/cuda-10.1/lib64:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/home/work/cuda-10.1/extras/CUPTI/lib64:$LD_LIBRARY_PATH #在 LD_LIBRARY_PATH 中增加 cudnn 库的门路 export LD_LIBRARY_PATH=/home/work/cudnn/cudnn7.6.5/lib64:$LD_LIBRARY_PATH #如果须要多卡并行训练,须要先下载 NCCL,下载地址:http://bj.bcebos.com/wenxin-models/nccl.tar.gz,而后在 LD_LIBRARY_PATH 中增加 NCCL 库的门路 export LD_LIBRARY_PATH=/home/work/nccl_2.3.5/lib:$LD_LIBRARY_PATH #如果 FLAGS_sync_nccl_allreduce 为 1,则会在 allreduce_op_handle 中调用 cudaStreamSynchronize(nccl_stream),这种模式在某些状况下能够取得更好的性能 export FLAGS_sync_nccl_allreduce=1 #是否是分布式训练,0 标识是分布式,1 标识是单机 export PADDLE_IS_LOCAL=1 export PADDLE_USE_GPU=1 #示意调配的显存块占 GPU 总可用显存大小的比例,范畴[0,1] export FLAGS_fraction_of_gpu_memory_to_use=0.5 #抉择要应用的 GPU #export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 export CUDA_VISIBLE_DEVICES=0 #示意是否应用垃圾回收策略来优化网络的内存应用,<0 示意禁用,>= 0 示意启用 export FLAGS_eager_delete_tensor_gb=1.0 #是否应用疾速垃圾回收策略 export FLAGS_fast_eager_deletion_mode=1 #垃圾回收策略开释变量的内存大小百分比,范畴为[0.0, 1.0] export FLAGS_memory_fraction_of_eager_deletion=1 #设置 python #alias python= your python path #alias pip= your pip path
留神:如果须要多卡并行训练,须要先下载 NCCL,下载地址:http://bj.bcebos.com/wenxin-m…,而后在 LD_LIBRARY_PATH 中增加 NCCL 库的门路
# 装置 Ernie 套件,大小在 125MB 左右
!git clone https://github.com/PaddlePaddle/ERNIE.git
2.2 训练的配置文件
进入指定工作目录./applications/tasks/text_matching
-
配置文件:在./example 目录下,依据不同的模型有 4 种配置文件
- mtch_bow_pairwise_ch.json:BowMatchingPairwise 模型的配置文件
- mtch_ernie_fc_pointwise_ch.json:ErnieMatchingFcPointwise 模型的配置文件
- mtch_ernie_pairwise_simnet_ch.json:ErnieMatchingSiamesePairwise 模型的配置文件
- mtch_ernie_pointwise_simnet_ch.json:ErnieMatchingSiamesePointwise 模型的配置文件
├── examples ### 各典型网络的 json 配置文件,infer 后缀的为对应的预测配置文件
│ ├── mtch_bow_pairwise_ch.json
│ ├── mtch_ernie_fc_pointwise_ch.json
│ ├── mtch_ernie_pairwise_simnet_ch.json
│ └── mtch_ernie_pointwise_simnet_ch.json
# ernie_3.0 模型下载
# 进入 models_hub 目录
%cd ./ERNIE/applications/models_hub
# 运行下载脚本
!sh download_ernie_3.0_base_ch.sh
#进入对应目录
%cd ..
%cd ./tasks/text_matching
# %cd /home/aistudio/ERNIE/applications/tasks/text_matching
2.3 训练模型
应用 run_trainer.py 脚本加载不同的配置文件从而训练不同的模型
# 训练 BowMatchingPairwise 模型
python run_trainer.py --param_path ./examples/mtch_bow_pairwise_ch.json
#训练 ErnieMatchingFcPointwise 模型
python run_trainer.py --param_path ./examples/mtch_ernie_fc_pointwise_ch.json
#训练 ErnieMatchingSiamesePairwise 模型
python run_trainer.py --param_path ./examples/mtch_ernie_pairwise_simnet_ch.json
#训练 ErnieMatchingSiamesePointwise 模型
python run_trainer.py --param_path ./examples/mtch_ernie_pointwise_simnet_ch.json
# 可自行批改代码
!python run_trainer.py --param_path ./examples/mtch_ernie_fc_pointwise_ch.json
局部后果展现
INFO: 02-14 17:24:30: custom_dynamic_trainer.py:86 * 140322371376896 current learning rate: 8.4e-06
INFO: 02-14 17:24:31: ernie_matching_fc_pointwise.py:169 * 140322371376896 phase = training loss = 0.0006464745383709669 acc = 1.0 precision = 1.0 step = 530 time_cost = 0.7681
INFO: 02-14 17:24:31: custom_dynamic_trainer.py:86 * 140322371376896 current learning rate: 7.6e-06
INFO: 02-14 17:24:32: ernie_matching_fc_pointwise.py:169 * 140322371376896 phase = training loss = 0.0007393724517896771 acc = 1.0 precision = 1.0 step = 540 time_cost = 0.7595
INFO: 02-14 17:24:32: custom_dynamic_trainer.py:86 * 140322371376896 current learning rate: 6.8e-06
INFO: 02-14 17:24:32: ernie_matching_fc_pointwise.py:169 * 140322371376896 phase = training loss = 0.0005058677052147686 acc = 1.0 precision = 1.0 step = 550 time_cost = 0.7621
INFO: 02-14 17:24:32: custom_dynamic_trainer.py:86 * 140322371376896 current learning rate: 6e-06
INFO: 02-14 17:24:33: ernie_matching_fc_pointwise.py:169 * 140322371376896 phase = training loss = 0.0005211303941905499 acc = 1.0 precision = 1.0 step = 560 time_cost = 0.7555
INFO: 02-14 17:24:33: custom_dynamic_trainer.py:86 * 140322371376896 current learning rate: 5.2e-06
INFO: 02-14 17:24:34: ernie_matching_fc_pointwise.py:169 * 140322371376896 phase = training loss = 0.0006375016528181732 acc = 1.0 precision = 1.0 step = 570 time_cost = 0.7505
INFO: 02-14 17:24:34: custom_dynamic_trainer.py:86 * 140322371376896 current learning rate: 4.4e-06
INFO: 02-14 17:24:35: ernie_matching_fc_pointwise.py:169 * 140322371376896 phase = training loss = 0.0006092005642130971 acc = 1.0 precision = 1.0 step = 580 time_cost = 0.7548
INFO: 02-14 17:24:35: custom_dynamic_trainer.py:86 * 140322371376896 current learning rate: 3.6e-06
INFO: 02-14 17:24:35: ernie_matching_fc_pointwise.py:169 * 140322371376896 phase = training loss = 0.0005502075655385852 acc = 1.0 precision = 1.0 step = 590 time_cost = 0.7621
INFO: 02-14 17:24:35: custom_dynamic_trainer.py:86 * 140322371376896 current learning rate: 2.8e-06
INFO: 02-14 17:24:36: ernie_matching_fc_pointwise.py:169 * 140322371376896 phase = training loss = 0.0006342551205307245 acc = 1.0 precision = 1.0 step = 600 time_cost = 0.7492
INFO: 02-14 17:24:36: custom_dynamic_trainer.py:86 * 140322371376896 current learning rate: 2e-06
INFO: 02-14 17:24:37: ernie_matching_fc_pointwise.py:174 * 140322371376896 phase = test acc = 0.88 precision = 0.8747 time_cost = 0.968 step = 50
INFO: 02-14 17:24:37: custom_dynamic_trainer.py:138 * 140322371376896 eval step = 50
INFO: 02-14 17:24:38: ernie_matching_fc_pointwise.py:169 * 140322371376896 phase = training loss = 0.0007312577217817307 acc = 1.0 precision = 1.0 step = 610 time_cost = 1.7231
INFO: 02-14 17:24:38: custom_dynamic_trainer.py:86 * 140322371376896 current learning rate: 1.2e-06
INFO: 02-14 17:24:39: ernie_matching_fc_pointwise.py:169 * 140322371376896 phase = training loss = 0.0009203955996781588 acc = 1.0 precision = 1.0 step = 620 time_cost = 0.756
INFO: 02-14 17:24:39: custom_dynamic_trainer.py:86 * 140322371376896 current learning rate: 4e-07
INFO: 02-14 17:24:39: ernie_matching_fc_pointwise.py:169 * 140322371376896 phase = training loss = 0.0004998981021344662 acc = 1.0 precision = 1.0 step = 630 time_cost = 0.704
INFO: 02-14 17:24:39: custom_dynamic_trainer.py:86 * 140322371376896 current learning rate: 0.0
INFO: 02-14 17:24:39: custom_dynamic_trainer.py:104 * 140322371376896 Final test result:
须要关注信息:模型保留门路
INFO: 02-14 17:24:43: dynamic_trainer.py:170 * 140322371376896 save path: ./output/mtch_ernie_3.0_base_fc_pointwise_ch/save_inference_model/inference_step_631
INFO: 02-14 17:24:44: run_trainer.py:102 * 140322371376896 end of run train and eval .....
2.4 模型预测
# 预测 BowMatchingPairwise 模型
python run_infer.py --param_path ./examples/mtch_bow_pairwise_ch_infer.json
#预测 ErnieMatchingFcPointwise 模型
python run_infer.py --param_path ./examples/mtch_ernie_fc_pointwise_ch_infer.json
#预测 ErnieMatchingSiamesePairwise 模型
python run_infer.py --param_path ./examples/mtch_ernie_pairwise_simnet_ch_infer.json
#预测 ErnieMatchingSiamesePointwise 模型
python run_infer.py --param_path ./examples/mtch_ernie_pointwise_simnet_ch_infer.json
# 须要自行批改门路 inference_model_path"
!python run_infer.py --param_path ./examples/mtch_ernie_fc_pointwise_ch_infer.json
# 最初会生成预测文件:/home/aistudio/ERNIE/applications/tasks/text_matching/output/predict_result.txt
局部预测后果展现:
7209396, 0.9994237422943115]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('现 在 吃 什 么 最 好 啊 现 在 吃 什 么 最 好 啊 \t 现 在 最 好 的 爆 吧 器 是 什 么 现 在 最 好 的 爆 吧 器 是 什 么', '[0.9997451901435852, 0.00025474882568232715]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('艾 尔 之 光 澄 说 的 是 什 么 话 艾 尔 之 光 澄 说 的 是 什 么 话 \t 艾 尔 之 光 澄 什 么 时 候 出?艾 尔 之 光 澄 什 么 时 候 出?', '[0.999519944190979, 0.0004800466413144022]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('一 番 作 为 是 什 么 意 思 一 番 作 为 是 什 么 意 思 \t 撸 一 番 是 什 么 意 思 撸 一 番 是 什 么 意 思', '[0.9996808767318726, 0.0003191193100064993]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('微 分 子 的 性 质 是 什 么 微 分 子 的 性 质 是 什 么 \t 分 子 的 性 质 是 什 么?分 子 的 性 质 是 什 么?', '[0.5368487238883972, 0.4631512463092804]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('手 机 看 电 影 哪 个 网 站 更 新 速 度 最 快 手 机 看 电 影 哪 个 网 站 更 新 速 度 最 快 \t 哪 个 网 站 的 电 影 更 新 最 快 哪 个 网 站 的 电 影 更 新 最 快', '[0.983171820640564, 0.016828108578920364]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('梦 见 拔 花 生 是 什 么 意 思 梦 见 拔 花 生 是 什 么 意 思 \t 梦 见 种 花 生 什 么 意 思 梦 见 种 花 生 什 么 意 思', '[0.9997345805168152, 0.0002654124400578439]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('逆 战 飓 风 之 龙 逆 战 飓 风 之 龙 \t 逆 战 送 飓 风 之 龙 的 号 逆 战 送 飓 风 之 龙 的 号', '[0.42942267656326294, 0.5705773234367371]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('移 动 宽 带 怎 么 样?移 动 宽 带 怎 么 样?\t 移 动 宽 带 怎 么 样 移 动 宽 带 怎 么 样', '[0.0005698217428289354, 0.9994301199913025]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('求《宝 贝 真 乖》全 文,谢!求《宝 贝 真 乖》全 文,谢!\t 求 宝 贝 真 乖 全 文 求 宝 贝 真 乖 全 文', '[0.0024148777592927217, 0.9975850582122803]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('圆 周 率 是 谁 发 明 的 ? 圆 周 率 是 谁 发 明 的 ?\t 是 谁 发 明 了 圆 周 率 是 谁 发 明 了 圆 周 率', '[0.0006937617436051369, 0.9993062019348145]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('爱 情 和 婚 姻 的 区 别 是 什 么?爱 情 和 婚 姻 的 区 别 是 什 么?\t 爱 情 与 婚 姻 有 什 么 区 别 么?爱 情 与 婚 姻 有 什 么 区 别 么?', '[0.0005726246163249016, 0.9994274377822876]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('作 文《我 爱 什 么》作 文《我 爱 什 么》\t 因 为 有 什 么,我 更 的 作 文 因 为 有 什 么,我 更 的 作 文', '[0.9994762539863586, 0.0005237914156168699]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('你 为 什 么 喜 欢 周 杰 伦 译 文 你 为 什 么 喜 欢 周 杰 伦 译 文 \t 周 杰 伦 中 有 我 喜 欢 你 这 句 歌 词 是 什 么 歌 周 杰 伦 中 有 我 喜 欢 你 这 句 歌 词 是 什 么 歌', '[0.9997124075889587, 0.00028757069958373904]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('上 火 会 牙 痛 吗 上 火 会 牙 痛 吗 \t 牙 痛 是 上 火 吗 牙 痛 是 上 火 吗', '[0.002424687147140503, 0.9975753426551819]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('今 天 深 圳 天 气 怎 么 样?今 天 深 圳 天 气 怎 么 样?\t 今 天 深 圳 天 气 如 何 今 天 深 圳 天 气 如 何', '[0.0005872210604138672, 0.9994127750396729]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('谢 文 东 第 三 季 在 什 么 播 放 器 里 看 谢 文 东 第 三 季 在 什 么 播 放 器 里 看 \t 谢 文 东 第 三 季 要 在 什 么 播 放 器 里 看 谢 文 东 第 三 季 要 在 什 么 播 放 器 里 看', '[0.0007112747407518327, 0.9992886781692505]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('小 学 生 适 合 看 什 么 书 请 推 荐 小 学 生 适 合 看 什 么 书 请 推 荐 \t 有 什 么 适 合 小 学 生 六 年 级 学 生 看 的 书 有 什 么 适 合 小 学 生 六 年 级 学 生 看 的 书', '[0.035894427448511124, 0.9641055464744568]')
INFO: 02-14 17:30:07: run_infer.py:50 * 140238487475968 ('南 宁 属 于 哪 个 省 南 宁 属 于 哪 个 省 \t 南 宁 是 属 于 哪 个 省 南 宁 是 属 于 哪 个 省', '[0.0006054917466826737, 0.9993945360183716]')
最初会生成预测文件:/home/aistudio/ERNIE/applications/tasks/text_matching/output/predict_result.txt
2.5 多卡指令
fleetrun --gpus=x,y run_trainer.py./examples/cls_ernie_fc_ch.json
- 训练运行的日志会主动保留在 ./log/test.log 文件中。
- 训练中以及完结后产生的模型文件会默认保留在./output/ 目录下,其中 save_inference_model/ 文件夹会保留用于预测的模型文件,save_checkpoint/ 文件夹会保留用于热启动的模型文件。
留神:如果须要多卡并行训练,须要先下载 NCCL,下载地址:http://bj.bcebos.com/wenxin-m…,而后在 LD_LIBRARY_PATH 中增加 NCCL 库的门路
3. 总结
趁着情人节介绍推广一下文心 ERNIEKit 套件,赶快珍藏起来,节后卷起来。文心大模型开发套件 ERNIEKit,面向 NLP 工程师,提供全流程大模型开发与部署工具集,端到端、全方位施展大模型效力。
成果当先、简略易用、高效灵便的 NLP 算法定制开发工具,预置 30 余个大规模预训练模型、40 余个 NLP 根底工作、20 余个数据预处理工具、10 余个模型微调工具。反对在 BML 私有化平台中应用。(旗舰版)
案例集成度很高快点用起来吧!
PS:这里特地正文一下,目前 ERNIEKit 套件在兼容 Paddle2.4 版本上还有点问题,稳固版本是 2.2,上司环境介绍里也有表明,次要还是对 1.x 的 fluid 兼容问题。
我的项目链接
https://aistudio.baidu.com/ai…