本文主要介绍使用Prompt的MLM文本分类 bert4keras的代码实现,用以丰富bert4keras框架的例子 关于prompt的原理的文章网上有很多优秀的文章可以自行百度。

github地址

hgliyuhao/Prompt4Classification (github.com)

transformers,torch 实现的版本可以参考

基于Prompt的MLM文本分类_u013546508的博客-CSDN博客

数据介绍

剧烈运动后咯血,是怎么了? 剧烈运动后为什么会咯血? 1
剧烈运动后咯血,是怎么了? 剧烈运动后咯血,应该怎么处理? 0

每条数据是包含两句话 和一个标签 ,如果标签为1证明两句话意思相同 为0则证明意思不同

所以是一个分类任务

模型设计

使用mlm模型,将分类任务转换成一个填空任务,再根据填空的结果决定分类结果。

根据任务和数据特点设计Prompt:两句话意思【mask】同。

所以对应模型的输入是 两句话意思【mask】同 :text1 ;text2

对应的label 如果标签为1 label 为‘相’,标签为0 label 为 ‘不’

因为在预测的时候是使用生成模型,为了确定mask结果的任务,所以Prompt要位于句子开头

代码细节

由于需要使用mlm 要在引入模型的时候加入with_mlm=True

model = build_transformer_model(config_path,checkpoint_path,with_mlm=True,keep_tokens=keep_tokens,  # 只保留keep_tokens中的字,精简原字表
)

下面重点说一下输入输出格式

class data_generator(DataGenerator):def __iter__(self, random=False):"""单条样本格式为输入:[CLS]两句话意思[MASK]同,text1,text2[SEP]输出:'相'或者'不'"""idxs = list(range(len(self.data)))if random:np.random.shuffle(idxs)batch_token_ids, batch_segment_ids, batch_a_token_ids = [], [], []for i in idxs:data = self.data[i]text = "两句话意思相同"text1 = data[0]text2 = data[1]label = data[2]final_text = text + ':' + text1 + ',' + text2            token_ids, segment_ids = tokenizer.encode(final_text, maxlen=maxlen)# mask掉'相'字token_ids[6] = tokenizer._token_mask_idif label == 0:a_token_ids, _ = tokenizer.encode('不')else:a_token_ids, _ = tokenizer.encode('相')   batch_token_ids.append(token_ids)batch_segment_ids.append(segment_ids)batch_a_token_ids.append(a_token_ids[1:])if len(batch_token_ids) == self.batch_size or i == idxs[-1]:batch_token_ids = sequence_padding(batch_token_ids)batch_segment_ids = sequence_padding(batch_segment_ids)batch_a_token_ids = sequence_padding(batch_a_token_ids, 1)yield [batch_token_ids, batch_segment_ids], batch_a_token_idsbatch_token_ids, batch_segment_ids, batch_a_token_ids = [], [], []

token_ids[6] = tokenizer._token_mask_id  是将 "两句话意思相同" 转换成"两句话意思【mask】同"

batch_a_token_ids.append(a_token_ids[1:]) 这里(a_token_ids[1:] 是为了将cls 去掉

batch_a_token_ids = sequence_padding(batch_a_token_ids, 1) 这里是设置生成文本的长度,因为我们这个任务只需要预测结果为‘相’或者为‘不’所以 长度设置为1

效果

句对模型 prompt
acc

0.93656

0.90414

prompt的效果是不如传统的句对模型的

但是prompt的思想是很有趣的,在few-shot 或者少样本的任务中是值得尝试的

基于Prompt的MLM文本分类 bert4keras实现相关推荐

  1. 基于Prompt的MLM文本分类

    简介 常规NLP做文本分类时常用Transfer Learning的方式,在预训练bert上加一个分类层,哪个输出节点概率最大则划分到哪一类别.而基于Prompt的MLM文本分类是将文本分类任务转化为 ...

  2. 基于Prompt的MLM文本分类-v2

    自动寻找Prompt 实验版本好多参数可调 import os import torch import logging import datasets import transformers impo ...

  3. 【调研】基于Prompt的小样本文本分类调研:PET,LM-BFF,KPT,PTR

    本篇博客一共要分享四篇prompt论文,它们分别提出了四个模型. 目录

  4. 基于深度学习的文本分类 3

    基于深度学习的文本分类 Transformer Transformer是一种完全基于Attention机制来加速深度学习训练过程的算法模型,其最大的优势在于其在并行化处理上做出的贡献.换句话说,Tra ...

  5. 文本基线怎样去掉_ICML 2020 | 基于类别描述的文本分类模型

    论文标题: Description Based Text Classification with Reinforcement Learning 论文作者: Duo Chai, Wei Wu, Qing ...

  6. 【项目实战课】NLP入门第1课,人人免费可学,基于TextCNN的新闻文本分类实战...

    欢迎大家来到我们的项目实战课,本期内容是<基于TextCNN的新闻文本分类实战>. 所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的实战讲解,可以 ...

  7. ICML 2020 | 基于类别描述的文本分类模型

    论文标题: Description Based Text Classification with Reinforcement Learning 论文作者: Duo Chai, Wei Wu, Qing ...

  8. 基于深度学习的文本分类1

    基于深度学习的文本分类 与传统机器学习不同,深度学习既提供特征提取功能,也可以完成分类的功能.从本章开始我们将学习如何使用深度学习来完成文本表示. 现有文本表示方法的缺陷 在上一章节,我们介绍几种文本 ...

  9. Datawhale NLP入门:Task5 基于深度学习的文本分类2

    Task5 基于深度学习的文本分类2 在上一章节,我们通过FastText快速实现了基于深度学习的文本分类模型,但是这个模型并不是最优的.在本章我们将继续深入. 基于深度学习的文本分类 本章将继续学习 ...

最新文章

  1. 33.搜索插件——autocomplete
  2. 《Android游戏开发详解》一导读
  3. linux内核结构介绍
  4. 深度学习—大厂笔试题
  5. 中根遍历二叉查找树所得序列一定是有序序列_数据结构考研学习笔记(九)树、森林...
  6. vc ado连接mysql_VC用Ado接口连接和使用数据库及注意事项
  7. Windows下的命令行。
  8. Saltstack之自定义grains
  9. 数独超难题目_号称世界上最难的一道数独题,你敢来挑战吗?据说答案只有一种...
  10. 2018Web前端面试题及答案大全
  11. CMD 命令 复制多级子目录特定文件
  12. U956(MTK6589系列)移植乐蛙教程
  13. js继承的几种实现方式
  14. 分布式Zookeeper-基础
  15. 银河麒麟V10(Kylin Linux V10)之DBeaver安装
  16. 如何去除Word中的波浪线?这三种方法很实用!
  17. Pytorch、Anaconda安装、Navidia版本更新
  18. 卡马克:用C++进行函数式编程
  19. 联想G480如何关闭数字小键盘
  20. ​LeetCode刷题实战450:删除二叉搜索树中的节点

热门文章

  1. 获取英文期刊的封面及目录
  2. 实现抖音慢动作效果---OpenCV-Python开发指南(57)
  3. Mac电脑下好用的桌面软件--Irvue
  4. 分享一本好书(误)豆瓣评分3.14(大误)
  5. 苹果6手机怎么录屏_原来苹果手机还自带录屏功能,那以后就不用下载第三方录屏工具了...
  6. AndroidStudio检测不到华为手机
  7. 文件路径--绝对路径和相对路径
  8. O2O电商小程序源码(仿造盒马鲜生APP)
  9. SQL函数使用大全及示例使用方法汇总
  10. conda remove 能卸载pip install安装