paddlenlp调用ERNIE、使用ERNIEKIT

2023-11-13

paddle调用ERNIE

安装paddle和paddlenlp

pip安装paddlepaddle和paddlenlp:
版本:
paddle.version: 2.2.2
paddlenlp.version: 2.4.5

pip install paddlepaddle
pip install paddlenlp

(下载)加载ERNIE预训练模型

import paddlenlp 

# 加载ERNIE预训练模型
MODEL_NAME = "ernie-3.0-medium-zh"
ernie_model = paddlenlp.transformers.ErnieModel.from_pretrained(MODEL_NAME)

tokenizer

类似于BERT,vocab中几个特殊符号如下:
 [PAD] 0:
 [CLS] 1:位于整个输入的首尾
 [SEP] 2:位于每个句子的句尾
 [MASK] 3
 [UNK] :表示unk_token,其不存在与vocab中,在每个task的配置文件中可以自定义,默认是[UNK]

对文本进行tokenizer处理

model_dir = 'C:\\Users\\cqf\\.paddlenlp\\models\\ernie-3.0-medium-zh' # 上一步下载模型时,默认下载到该地址
tokenizer = paddlenlp.transformers.ErnieTokenizer.from_pretrained(model_dir) # MODEL_NAME,第一次加载(本地没有模型)时可以直接指定模型名,会自动下载保存
encoded_text = tokenizer(text=["冬天来了,春天还会远吗?", '秋天来了,一群大雁往南飞。']) # text参数可以是字符串,也可以是多个字符串组成的列表
print(encoded_text) # 结果:{'input_ids': [[1, 196, 1296, 125, 61, 15, 4, 740, 125, 201, 32, 629, 1114, 12045, 2], [1, 1050, 125, 61, 15, 4, 7, 626, 19, 2665, 638, 219, 706, 12043, 2]], 'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]}

结果:
在这里插入图片描述

获取文本语义特征向量表示

# 将tokenizer的input_ids、token_type_ids转化为tensor
input_ids = paddle.to_tensor(encoded_text['input_ids']) # padding后作为输入
token_type_ids = paddle.to_tensor(encoded_text['token_type_ids'])

# 将tensor形式的input_ids、token_type_ids输入到ERNIE模型,得到输出:
# sequence_output:每个输入token的语义特征表示,shape=(batch_size, seq_len, hidden_size)
# pooled_output:整个句子的语义特征表示,shape=(batch_size, hidden_size)
sequence_output, pooled_output = ernie_model(input_ids, token_type_ids)

print("Token wise output: {}, Pooled output: {}".format(
    sequence_output.shape, pooled_output.shape)) # Token wise output: [2, 15, 768], Pooled output: [2, 768]
print(sequence_output, pooled_output)

特征向量结果:
在这里插入图片描述

中文官方说明文档:https://paddlenlp.readthedocs.io/zh/latest/get_started/quick_start.html
文本分类模型(ErnieForSequenceClassification)实操文档:https://aistudio.baidu.com/aistudio/projectdetail/1294333

ERNIEKIT实践

需要已经安装了paddlepaddle、paddlenlp。

安装、配置nltk

① 安装nltk模块(在conda环境中):

conda install nltk

② 下载nltk数据包:nltk_data
直接在网上手动下载(我的网盘中):
链接:https://pan.baidu.com/s/1VrWiG3orbQanK917540rxw
提取码:1xpu
解压后(保证文件夹名为nltk_data)保存到:C:\Users[你的用户名]\AppData\Roaming
③ 进入python,下载数据包:

import nltk
from nltk.book import *

结果显示如下,nltk安装成功。
在这里插入图片描述

下载ERNIEKIT源码

GitHub下载地址:https://github.com/PaddlePaddle/ERNIE
也可以使用git命令下载:

git clone https://github.com/PaddlePaddle/ERNIE.git

运行ERNIEKIT

按照GitHub上步骤一步步执行。
注意:(目前测试了 text_classification 和 text_matching 两个任务,text_classification 会报UnicodeDecodeError错误)
(1)下载的模型会保存在:.\ERNIE-ernie-kit-open-v1.0\applications\models_hub
(2)各个task中example文件下是对应的配置文件(_infer后缀的是预测配置文件,不带的为训练配置文件),根据自身设备情况,需要修改对应的 cpu 或者 gpu
  如:“PADDLE_PLACE_TYPE”: “cpu”
(3)训练时,读取数据过程会报UnicodeDecodeError错误,需要修改
① 需修改文件:erniekit\data\data_set_reader\basic_dataset_reader.py
 修改位置,第120行:with open(file_path, "r+") as f:
 修改后代码:with open(file_path, "r+", encoding='utf-8') as f:
② 需修改文件:erniekit\data\vocabulary.py
 修改位置,第30行:file_vocab = open(self.vocab_path)
 修改后代码:file_vocab = open(self.vocab_path, 'r+', encoding='utf-8')
(4)预测时,配置文件中读取的模型文件路径(“inference_model_path”)需要根据自身情况进行修改:
  如:“inference_model_path”: “./output/cls_ernie_3.0_base_fc_ch_dy/save_inference_model/inference_step_251/”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

paddlenlp调用ERNIE、使用ERNIEKIT 的相关文章

随机推荐

  • 卷运维不如卷网络安全

    最近发现很多从事运维的选择了辞职 重新规划自己的职业发展方向 运维工程师这个岗位在IT行业里面确实是处于最底层的 不管什么环节出现问题 基本都是运维背锅 背锅也就罢了 薪资水平也比不上别的岗位 一般运维的薪资水平大多数都是6 9K 还要高频
  • 【Rust】用RefCell避开`&mut XX`导致的借用检查

    derive Debug struct WhatAboutThis lt a gt name String nickname Option lt a str gt impl lt a gt WhatAboutThis lt a gt fn
  • 什么是本地储存?

    本地储存的作用 把一些数据记录在浏览器中 是浏览器提供给我们的一些本地存储数据的机制 localStorage 永久缓存 除非手动删除 sessionStorage 会话缓存 关闭浏览器就没有了 共同点 只能存储字符串格式的数据 local
  • 爬虫最快框架collyx,今天开源了...

    作者 TheWeiJun 工欲善其事 必先利其器 大家好 我是TheWeiJun 之前接触colly时 写过一篇关于colly框架的文章 由于当时能力有限加上时间不够充足 一直没能够去研究这个框架 后来经过3个多月的不断尝试完善 基于col
  • int类型数据相乘,溢出问题,负号变正号

    int相乘 不做强转的话 结果为int 溢出会出现结果不正确的情况 下面方法是个坑儿 如果要使用 需加强转 获取和日期间隔一定时间的时期 适合计算短时间间隔的情况 长时间间隔会出现溢出问题 影响正负号 方法待删除 param d1 para
  • UE4和C++ 开发-新手常用C++API

    C 暴露给蓝图可编辑 UCLASS Blueprintable 创建FString FString Printf TEXT aa bb 蓝图调用变量 UCLASS ClassGroup Custom meta BlueprintSpawna
  • Android使用Direct Textures提高glReadPixels、glTexImage2D性能

    from https www jianshu com p 1fa36461fc6f Android使用Direct Textures提高glReadPixels glTexImage2D性能 熊皮皮 关注 2017 02 05 15 52
  • weblogic双机(多机)集群搭建

    进去正题 1 创建集群 点击 锁定并编辑 选择 环境 gt 群集 gt 新建 gt 集群 填写 名称 选择 单点传送 点击 确定 集群创建完成 建议名称为 CLuster 项目名 一个项目配置一个集群环境 2 创建计算机 Machine 选
  • windows下的C++ socket服务器(1)

    windows下的C socket服务器 1 windows下的一个C socket服务器 用到了C 11的相关内容 现在还不是很完善 以后会不断改进的 include
  • 【已解决】android7.0以上使用charles抓HTTPS包报错certificate_unknown

    手机上是否有装证书都可以使用下面的方法 在你的AndroidManifest xml文件中添加如下配置
  • java Swing 时间选择器控件

    效果图 简要说明 一个视图类 HongYeLingGuDate 一个抽象接口 SelectHYDateAbstract 需要导入的jar包 http download csdn net detail male09 9884835 中的 fl
  • keil5报错:* RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 08B5H BYTE (108%) *保姆级教程

    项目场景 keil uVsion5的编译的时代码的字节过大出现 问题描述 RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT 原因分析 原因就是你的keil为2048字节代码限制的版本 而你
  • docker从入门到实践

    本文的主要目的是帮助零基础的读者快速上手docker 并掌握一些相关的常见命令 同时 本文也是作者对学习docker的一个笔记记录 本文主要是从实例出发 讲解一些docker的基本操作 若有不妥或错误之处 烦请指出 不胜感激 PS 关于do
  • [机器学习与scikit-learn-27]:算法-回归-多元线性回归的几何原理、线性代数原理、本质(去掉激活函数的神经元)

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 123540305 目录 第1章 回归概
  • 虚拟显示器

    这个虚拟显示器只有驱动程序 没有直接双击就能安装的安装包 所以安装起来相对麻烦一点 不过这也是我找到的唯一的 免费 纯软件实现的方案了 原文链接 英文 https www amyuni com forum viewtopic php t 3
  • STM32最小系统|CSDN创作打卡

    文章目录 STM32最小系统的构成 晶振电路 复位电路 电源电路 下载电路 STM32最小系统的构成 晶振电路 晶振在起振的一瞬间会产生电感 为了消除这些电感干扰 会 在晶振的两端接入无极性电容 10 33pf 这里不推荐使用内部时钟源 R
  • idea不显示 target文件夹的解决方式

    第一种 比较简单的解决方式 但是可能适用面比较小 解决方式如下所示 第二种 稍微麻烦一点 如下图所示 点击 file gt 搜索框内输入 File Types 进入到图中所示的界面 把里面的 target删除掉就可以了 重启一下idea 如
  • 从0开始的leetCode: Add Two Number

    我的解法是 class Solution public ListNode addTwoNumbers ListNode l1 ListNode l2 int i 0 ListNode pre l1 while l1 null l1 val
  • DEBUG

    UnicodeDecodeError utf 8 codec can t decode byte 0x80 in position 3131 invalid start byte解决办法 阿里drl binpacking使用TensorFl
  • paddlenlp调用ERNIE、使用ERNIEKIT

    目录 paddle调用ERNIE 安装paddle和paddlenlp 下载 加载ERNIE预训练模型 tokenizer 获取文本语义特征向量表示 ERNIEKIT实践 安装 配置nltk 下载ERNIEKIT源码 运行ERNIEKIT