文心大模型,产业级知识增强大模型介绍

官网: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

面向搜索、推荐系统排序模块、召回模块的常规解决方案,具体如下:

  1. 基于单塔 Point-wise 范式的语义匹配模型 ernie_matching: 模型精度高、计算复杂度高, 适合直接进行语义匹配 2 分类的应用场景。
  2. 基于单塔 Pair-wise 范式的语义匹配模型 ernie_matching: 模型精度高、计算复杂度高, 对文本相似度大小的序关系建模能力更强,适合将相似度特征作为上层排序模块输入特征的应用场景。
  3. 基于双塔 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 环境安装

2.1.1 环境版本要求:

  • 环境主要安装Python和Paddle对应版本要求的环境,中间建议使用pip安装方式进行安装。
  • Python3版本要求:python3.7及以上版本,参考https://www.python.org/
  • PaddlePaddle版本要求:paddlepaddle2.0+版本,参考https://www.paddlepaddle.org.cn/documentation/docs/zh/install/pip/macos-pip.html
  • 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-models/nccl.tar.gz ,然后在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-models/nccl.tar.gz ,然后在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/aistudio/projectdetail/5501659?contributionType=1

基于文心大模型套件ERNIEKit实现文本匹配算法,模块化方便应用落地的更多相关文章

  1. 文心大模型api使用

    文心大模型api使用 首先,我们要获取硅谷社区的连个key 复制两个api备用 获取Access Token 获取access_token示例代码 之后就会输出 作文创作 作文创作:作文创作接口基于文 ...

  2. 百度生成式AI产品文心一言邀你体验AI创作新奇迹:百度CEO李彦宏详细透露三大产业将会带来机遇(文末附文心一言个人用户体验测试邀请码获取方法,亲测有效)

    目录 中国版ChatGPT上线发布 强大中文理解能力 智能文学创作.商业文案创作 图片.视频智能生成 中国生成式AI三大产业机会 新型云计算公司 行业模型精调公司 应用服务提供商 总结 获取文心一言邀 ...

  3. 文心一言,通营销之学,成一家之言,百度人工智能AI大数据模型文心一言Python3.10接入

    "文心"取自<文心雕龙>一书的开篇,作者刘勰在书中引述了一个古代典故:春秋时期,鲁国有一位名叫孔文子的大夫,他在学问上非常有造诣,但是他的儿子却不学无术,孔文子非常痛心 ...

  4. 基于word2vec的文档向量模型的应用

    基于word2vec的文档向量模型的应用 word2vec的原理以及训练过程具体细节就不介绍了,推荐两篇文档:<word2vec parameter learning explained> ...

  5. 好饭不怕晚,Google基于人工智能AI大语言对话模型Bard测试和API调用(Python3.10)

    谷歌(Google)作为开源过著名深度学习框架Tensorflow的超级大厂,是人工智能领域一股不可忽视的中坚力量,旗下新产品Bard已经公布测试了一段时间,毁誉参半,很多人把Google的Bard和 ...

  6. PowerDesigner 学习:十大模型及五大分类

    个人认为PowerDesigner 最大的特点和优势就是1)提供了一整套的解决方案,面向了不同的人员提供不同的模型工具,比如有针对企业架构师的模型,有针对需求分析师的模型,有针对系统分析师和软件架构师 ...

  7. PowerDesigner 15学习笔记:十大模型及五大分类

    个人认为PowerDesigner 最大的特点和优势就是1)提供了一整套的解决方案,面向了不同的人员提供不同的模型工具,比如有针对企业架构师的模型,有针对需求分析师的模型,有针对系统分析师和软件架构师 ...

  8. AI大模型学习了解

    # 百度文心 上线时间:2019年3月 官方介绍:https://wenxin.baidu.com/ 发布地点: 参考资料: 2600亿!全球最大中文单体模型鹏城-百度·文心发布 # 华为盘古 上线时 ...

  9. 【个人首测】百度文心一言 VS ChatGPT GPT-4

    昨天我写了一篇文章GPT-4牛是牛,但这几天先别急,文中我测试了用GPT-4回答ChatGPT 3.5 和 Notion AI的问题,大家期待的图片输入也没有出现. 昨天下午百度发布了文心一言,对标C ...

  10. 获取了文心一言的内测及与其ChatGPT、GPT-4 对比结果

    百度在3月16日召开了关于文心一言(知识增强大语言模型)的发布会,但是会上并没现场展示demo.如果要测试的文心一言 也要获取邀请码,才能进行测试的. 我这边通过预约得到了邀请码,大概是在3月17日晚 ...

随机推荐

  1. git一个空分支

    如果不想要当前创建的分支拥有创建节点之前的内容,就需要一个完全为空的分支,可以参考知乎这篇文章. 使用git checkout -b命令创建的分支是有父节点的,这意味着新的分支包含了历史提交,所以我们 ...

  2. print('Hello World!')的新玩法

    相信很多同学入门Python的第一行代码都是print('Hello World!') print是初学者最先接触的Python函数,但是很多人可能到现在也不完全清楚它的用法. print(*obje ...

  3. 震惊!二狗子的火锅店被隔壁老王 DDoS 攻击了

    近两年,游戏出海已经成为了出海热潮中的一员.在"后宅经济时代"的影响下,也得益于海外市场的互联网人口,游戏出海涨势非常迅猛.部分游戏在短时间内走红后,就会遭到了一些"有心 ...

  4. Prometheus--PromQL

    官方文档:https://prometheus.io/docs/introduction/overview/  中文文档:https://prometheus.fuckcloudnative.io/ ...

  5. pikachu靶场

    pikachu靶场 基于表单暴力破解 看一下界面,有两个输入框,使用暴力破解使用Cluster bomb 前提须知是 Sinper 对$$符号标记的数据进行逐个替换 Battering ram 对$$ ...

  6. Deltix Round, Summer 2021 Div1 + Div2 A~E

    比赛链接:Here 1556A. A Variety of Operations 注意到2, 3操作不改变总和,1操作使得总和加上了一个偶数,故直接判断总和是否为偶数即可.如果和为偶数,只要判断c和d ...

  7. 阿里云蝉联 FaaS 领导者,产品能力获最高分

    日前,权威咨询机构 Forrester 发布 The Forrester Wave: Functions-As-A-Service Platforms, Q2 2023.阿里云凭借函数计算的产品能力在 ...

  8. JavaScriptif while for switch流程控制 JS函数 内置对象

    1,if else语句 2,if else if else语句 3,switch语句 4,for循环 5,while循环 6,三元运算 7,JS中的函数 8,JS中的匿名函数 9,JS中的立即执行函数 ...

  9. 使用WTM框架创建博客系统后台并在云服务器发布

    阅读导航 关于lqclass.com 博客后台前后端部署 2.1 已部署访问链接 2.2 nginx 部署 2.2.1 后台后端发布 2.2.2 后台前端发布 2.2.3 云服务器部署 下次分享 1. ...

  10. 16-集电极开路门(OC门)

    集电极开路门(OC门) OC门 两个与非门,要实现非,一般来讲再与一下就可以. 能不能将输出端并在一起?普通的门电路永远不可能输出端并在一起,连在一起的. TTL与非门输出端连在一起 集电极断开之后连 ...