当前位置: 首页 > news >正文

设计师网站设计漳州专业网站建设公司

设计师网站设计,漳州专业网站建设公司,智能小程序入口,义乌app制作公司Prompt任务#xff08;Prompt Tasks#xff09; 通过设计提示#xff08;prompt#xff09;模板#xff0c;实现使用更少量的数据在预训练模型#xff08;Pretrained Model#xff09;上得到更好的效果#xff0c;多用于#xff1a;Few-Shot#xff0c;Zero-Shot 等…Prompt任务Prompt Tasks 通过设计提示prompt模板实现使用更少量的数据在预训练模型Pretrained Model上得到更好的效果多用于Few-ShotZero-Shot 等任务。 1.背景介绍 prompt 是当前 NLP 中研究小样本学习方向上非常重要的一个方向。举例来讲今天如果有这样两句评论 什么苹果啊都没有苹果味怪怪的味道而且一点都不甜超级难吃这破笔记本速度太慢了卡的不要不要的。 现在我们需要根据他们描述的商品类型进行一个分类任务 即第一句需要被分类到「水果」类别中第二句则需要分类到「电脑」类别中。 一种直觉的方式是将该问题建模成一个传统文本分类的任务通过人工标注为每一个类别设置一个 id例如 {电脑: 0,水果: 1,.... } 这样一来标注数据集就长这样 什么苹果啊都没有苹果味怪怪的味道而且一点都不甜超级难吃 1 这破笔记本速度太慢了卡的不要不要的。 0 ... 这种方法是可行的但是需要「较多的标注数据」才能取得不错的效果。 由于大多数预训练模型如 BRET在 pretrain 的时候都使用了 [MASK] token 做 MLM 任务而我们在真实下游任务中往往是不会使用到 [MASK] 这个 token这就意味着今天我们在训练下游任务时需要较多的数据集去抹平上下游任务不一致的 gap。 那如果我们没有足够多的训练数据怎么办呢 prompt learning 的出现就是为了解决这一问题它将 [MASK] 的 token 引入到了下游任务中将下游任务构造成和 MLM 类似的任务。 举例来讲我们可以将上述评论改写为 这是一条[MASK][MASK]评论这破笔记本速度太慢了卡的不要不要的。 然后让模型去预测两个 [MASK] token 的真实值是什么那模型根据上下文能推测出被掩码住的词应该为「电脑」。 由于下游任务中也使用了和预训练任务中同样的 MLM 任务这样我们就可以使用更少的训练数据来进行微调了。 但这还不是 P-tuning。 通过上面的例子我们可以观察到构建句子最关键的部分是在于 prompt 的生成即 「这是一条[MASK][MASK]评论」(prompt) 这破笔记本速度太慢了卡的不要不要的。(content) 被括号括起来的前缀prompt的生成是非常重要的不同 prompt 会极大影响模型对 [MASK] 预测的正确率。 那么这个 prompt 怎么生成呢 我们当然可以通过人工去设计很多不同类型的前缀 prompt我们把他们称为 prompt pattern例如 这是一条[MASK][MASK]评论 下面是一条描述[MASK][MASK]的评论 [MASK][MASK] ... 但是人工列这种 prompt pattern 非常的麻烦不同的数据集所需要的 prompt pattern 也不同可复用性很低。 那么我们能不能通过机器自己去学习 prompt pattern 呢 这就是 P-Tuning。 1.1 P-Tuning 人工构建的模板对人类来讲是合理的但是在机器眼中prompt pattern 长成什么样真的关键吗 机器对自然语言的理解和人类对自然语言的理解很有可能不尽相同我们曾经有做一个 model attention 和人类对语言重要性的理解的对比实验发现机器对语言的理解和人类是存在一定的偏差的。 那么我们是不是也不用特意为模型去设定一堆我们觉得「合理」的 prompt pattern而是让模型自己去找它们认为「合理」的 prompt pattern 就可以了呢 因此P-Tuning 的训练一共分为prompt token(s) 生成、mask label 生成、mlm loss 计算 三个步骤。 1.1.1 prompt token(s) 生成 既然现在我们不用人工去构建 prompt 模板我们也不清楚机器究竟喜欢什么样的模板…… 那不如我们就随便凑一个模板丢给模型吧。 听起来很草率但确实就是这么做的。 我们选用中文 BERT 作为 backbon 模型选用 vocab.txt 中的 [unused] token 作为构成 prompt 模板的元素。 [unused] 是 BERT 词表里预留出来的未使用的 token其本身没有什么含义随意组合也不会产生很大的语义影响这也是我们使用它来构建 prompt 模板的原因。 那么构建出来的 prompt pattern 就长这样 [unused1][unused2][unused3][unused4][unused5][unused6] 1.1.2 mask label 生成 完成 prompt 模板的构建后我们还需要把 mask label 给加到句子中好让模型帮我们完成标签预测任务。 我们设定 label 的长度为 2‘水果’、‘电脑’都是 2 个字的长度并将 label 塞到句子的开头位置 [CLS][MASK][MASK]这破笔记本速度太慢了卡的不要不要的。[SEP] 其中 [MASK] token 就是我们需要模型帮我们预测的标签 token现在我们把两个部分拼起来 [unused1][unused2][unused3][unused4][unused5][unused6][CLS][MASK][MASK]这破笔记本速度太慢了卡的不要不要的。[SEP] 这就是我们最终输入给模型的样本。 1.1.3 mlm loss 计算 下面就要开始进行模型微调了我们喂给模型这样的数据 [unused1][unused2][unused3][unused4][unused5][unused6][CLS][MASK][MASK]这破笔记本速度太慢了卡的不要不要的。[SEP] 并获得模型预测 [MASK] token 的预测结果并计算和真实标签之间的 CrossEntropy Loss。 P-Tuning 中标签数据长这样 水果 什么苹果啊都没有苹果味怪怪的味道而且一点都不甜超级难吃 电脑 这破笔记本速度太慢了卡的不要不要的。 ... 也就是说我们需要计算的是模型对 [MASK] token 的输出与「电脑」这两个标签 token 之间的 CrossEntropy Loss以教会模型在这样的上下文中被 [MASK] 住的标签应该被还原成「物品类别」。 1.1.4 实验 我们选用 63 条评论8 个类别的评论作为训练数据在 417 条评论上作分类测试模型 F1 能收敛在 76%。通过实验结果我们可以看到基于 prompt 的方式即使在训练样本数较小的情况下模型也能取得较为不错的效果。相比于传统的分类方式P-Tuning 能够更好的缓解模型在小样本数据下的过拟合从而拥有更好的鲁棒性。 论文链接https://arxiv.org/pdf/2103.10385.pdf 2.PET (PatternExploiting Training) 环境安装 本项目基于 pytorch transformers 实现运行前请安装相关依赖包 pip install -r ../../requirements.txt2.1 数据集准备 2.1.1 标签数据准备 项目中提供了一部分示例数据根据用户评论预测用户评论的物品类别分类任务数据在 data/comment_classify 。 若想使用自定义数据训练只需要仿照示例数据构建数据集即可 水果 什么苹果啊都没有苹果味怪怪的味道而且一点都不甜超级难吃 书籍 为什么不认真的检查一下 发这么一本脏脏的书给顾客呢 酒店 性价比高的酒店距离地铁近邻华师大环境好。 ...每一行用 \t 分隔符分开前半部分为标签label后半部分为原始输入。 2.1.2 Verbalizer准备 Verbalizer用于定义「真实标签」到「标签预测词」之间的映射。 在有些情况下将「真实标签」作为 [MASK] 去预测可能不具备很好的语义通顺性因此我们会对「真实标签」做一定的映射。 例如 日本爆冷2-1战胜德国是一则[MASK][MASK]新闻。 体育这句话中的标签为「体育」但如果我们将标签设置为「足球」会更容易预测。 因此我们可以对「体育」这个 label 构建许多个子标签在推理时只要预测到子标签最终推理出真实标签即可如下 体育 - 足球,篮球,网球,棒球,乒乓,体育 ...项目中提供了一部分示例数据在 data/comment_classify/verbalizer.txt 。 若想使用自定义数据训练只需要仿照示例数据构建数据集即可 电脑 电脑 水果 水果 平板 平板 衣服 衣服 酒店 酒店 洗浴 洗浴 书籍 书籍 蒙牛 蒙牛 手机 手机在例子中我们使用 1 对 1 的verbalizer若想定义一对多的映射只需要在后面用 , 分隔即可, e.g.: ... 水果 苹果,香蕉,橘子 ...2.1.3 Prompt设定 promot是人工构建的模板项目中提供了一部分示例数据在 data/comment_classify/prompt.txt 。 这是一条{MASK}评论{textA}。其中用大括号括起来的部分为「自定义参数」可以自定义设置大括号内的值。 示例中 {MASK} 代表 [MASK] token 的位置{textA} 代表评论数据的位置。 你可以改为自己想要的模板例如想新增一个 {textB} 参数 {textA}和{textB}是{MASK}同的意思。此时除了修改 prompt 文件外还需要在 utils.py 文件中 convert_example() 函数中修改 inputs_dict 用于给对应的给每一个「自定义参数」赋值 ... content content[:max_seq_len-10] # 防止当[MASK]在尾部的时候被截掉inputs_dict{ # 传入对应prompt的自定义参数textA: content, MASK: [MASK],textB ... # 给对应的自定义字段赋值 } ...2.2. 模型训练 修改训练脚本 train.sh 里的对应参数, 开启模型训练 python pet.py \--model bert-base-chinese \--train_path data/comment_classify/train.txt \--dev_path data/comment_classify/dev.txt \--save_dir checkpoints/comment_classify/ \--img_log_dir logs/comment_classify \--img_log_name BERT \--verbalizer data/comment_classify/verbalizer.txt \ # verbalizer文件位置--prompt_file data/comment_classify/prompt.txt \ # prompt_file文件位置--batch_size 8 \--max_seq_len 256 \--valid_steps 40 \--logging_steps 5 \--num_train_epochs 200 \--max_label_len 2 \ # 子标签最大长度--rdrop_coef 5e-2 \--device cuda:0 # 指定使用GPU正确开启训练后终端会打印以下信息 ... DatasetDict({train: Dataset({features: [text],num_rows: 63})dev: Dataset({features: [text],num_rows: 590}) }) Prompt is - 这是一条{MASK}评论{textA}。 100%|████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:0000:00, 12.96ba/s] 100%|████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:0000:00, 2.55ba/s] global step 5, epoch: 0, loss: 3.74432, speed: 2.67 step/s global step 10, epoch: 1, loss: 3.06417, speed: 5.86 step/s global step 15, epoch: 1, loss: 2.51641, speed: 5.73 step/s global step 20, epoch: 2, loss: 2.12264, speed: 5.84 step/s global step 25, epoch: 3, loss: 1.80121, speed: 5.82 step/s global step 30, epoch: 3, loss: 1.52964, speed: 5.78 step/s ...在 logs/sentiment_classification 文件下将会保存训练曲线图 2.3. 模型预测 完成模型训练后运行 inference.py 以加载训练好的模型并应用 ... contents [地理环境不错但对面一直在盖楼门前街道上打车不方便。,跟好朋友一起凑单买的很划算洗发露是樱花香的挺好的。。。] # 自定义评论 res inference(contents) # 推测评论类型 ...运行推理程序 python inference.py得到以下推理结果 Prompt is - 这是一条{MASK}评论{textA}。 Used 0.47s. inference label(s): [酒店, 洗浴]3.P-tuningAuto Learning prompt pattern 环境安装 本项目基于 pytorch transformers 实现运行前请安装相关依赖包 pip install -r ../../requirements.txttorch transformers4.22.1 datasets2.4.0 evaluate0.2.2 matplotlib3.6.0 rich12.5.1 scikit-learn1.1.2 requests2.28.13.1 数据集准备 3.1.1 标签数据准备 项目中提供了一部分示例数据根据用户评论预测用户评论的物品类别分类任务数据在 data/comment_classify 。 若想使用自定义数据训练只需要仿照示例数据构建数据集即可 水果 什么苹果啊都没有苹果味怪怪的味道而且一点都不甜超级难吃 书籍 为什么不认真的检查一下 发这么一本脏脏的书给顾客呢 酒店 性价比高的酒店距离地铁近邻华师大环境好。 ...每一行用 \t 分隔符分开前半部分为标签label后半部分为原始输入。 3.1.2 Verbalizer准备 Verbalizer用于定义「真实标签」到「标签预测词」之间的映射。 在有些情况下将「真实标签」作为 [MASK] 去预测可能不具备很好的语义通顺性因此我们会对「真实标签」做一定的映射。 例如 日本爆冷2-1战胜德国是一则[MASK][MASK]新闻。 体育这句话中的标签为「体育」但如果我们将标签设置为「足球」会更容易预测。 因此我们可以对「体育」这个 label 构建许多个子标签在推理时只要预测到子标签最终推理出真实标签即可如下 体育 - 足球,篮球,网球,棒球,乒乓,体育 ...项目中提供了一部分示例数据在 data/comment_classify/verbalizer.txt 。 若想使用自定义数据训练只需要仿照示例数据构建数据集即可 电脑 电脑 水果 水果 平板 平板 衣服 衣服 酒店 酒店 洗浴 洗浴 书籍 书籍 蒙牛 蒙牛 手机 手机在例子中我们使用 1 对 1 的verbalizer若想定义一对多的映射只需要在后面用 , 分隔即可, e.g.: ... 水果 苹果,香蕉,橘子 ...3.2 模型训练 修改训练脚本 train.sh 里的对应参数, 开启模型训练 python p_tuning.py \--model bert-base-chinese \ # backbone--train_path data/comment_classify/train.txt \--dev_path data/comment_classify/dev.txt \--verbalizer data/comment_classify/verbalizer.txt \ # verbalizer存放地址--save_dir checkpoints/comment_classify/ \--img_log_dir logs/comment_classify \ # loss曲线图存放地址--img_log_name BERT \ # loss曲线图文件名--batch_size 16 \--max_seq_len 128 \--valid_steps 20 \--logging_steps 5 \--num_train_epochs 50 \--max_label_len 2 \ # 标签最大长度--p_embedding_num 15 \ # p_token长度--device cuda:0 # 指定使用哪块gpu正确开启训练后终端会打印以下信息 ... global step 5, epoch: 1, loss: 6.50529, speed: 4.25 step/s global step 10, epoch: 2, loss: 4.77712, speed: 6.36 step/s global step 15, epoch: 3, loss: 3.55371, speed: 6.19 step/s global step 20, epoch: 4, loss: 2.71686, speed: 6.38 step/s Evaluation precision: 0.70000, recall: 0.69000, F1: 0.69000 best F1 performence has been updated: 0.00000 -- 0.69000 global step 25, epoch: 6, loss: 2.20488, speed: 6.21 step/s global step 30, epoch: 7, loss: 1.84836, speed: 6.22 step/s global step 35, epoch: 8, loss: 1.58520, speed: 6.22 step/s global step 40, epoch: 9, loss: 1.38746, speed: 6.27 step/s Evaluation precision: 0.75000, recall: 0.75000, F1: 0.75000 best F1 performence has been updated: 0.69000 -- 0.75000 global step 45, epoch: 11, loss: 1.23437, speed: 6.14 step/s global step 50, epoch: 12, loss: 1.11103, speed: 6.16 step/s ...在 logs/sentiment_classification 文件下将会保存训练曲线图 3.3 模型预测 完成模型训练后运行 inference.py 以加载训练好的模型并应用 ... contents [苹果卖相很好而且很甜很喜欢这个苹果下次还会支持的, 这破笔记本速度太慢了卡的不要不要的 ] # 自定义评论 res inference(contents) # 推测评论类型 ...运行推理程序 python inference.py得到以下推理结果 inference label(s): [水果, 电脑]参考链接https://github.com/HarderThenHarder/transformers_tasks/blob/main/prompt_tasks/p-tuning 更多优质内容请关注公号汀丶人工智能会提供一些相关的资源和优质文章免费获取阅读。
http://www.dnsts.com.cn/news/98125.html

相关文章:

  • 注册电商平台怎么注册优化推广排名
  • 郑州公司企业网站建设c语言基础知识入门
  • 网站二级目录解析互联网平台怎么建立
  • 网站建设 域名业务 邮箱宁波网站制作哪家全面
  • 网站建设500错误代码山西教育学会网站建设
  • 网站维护方式页面设计有哪几种风格
  • 庆阳网站建设公司杭州电子商务网站建设
  • 创建一个网站需要多少钱html网站开发中的应用
  • 网站开发 群建设局网站更改法人所需材料
  • 学什么可以做响应式网站建设工程培训
  • 外贸网站开发多少钱如何推广网站话术
  • 洛阳建网站公司重庆免费网站建设
  • 如何建立公司的销售网站wordpress 主题 标签
  • 网站设计公司报价湛江新闻头条最新消息
  • 陕西省关于网站信息内容建设适合国人的wordpress主题
  • 手机怎么制作自己的网站建设网站论文范文
  • 做一个网站放网上要多少钱驻马店市做网站
  • 代做网站怎么进行域名备案宁波seo网站排名
  • 自学做网站可以吗电子商务平台的营销推广方案
  • 福田网站建设课程考试镇江怎么样
  • 中国电力建设股份有限公司网站微商城怎么注册怎么弄
  • 深圳网站设计公司排名查询商标注册的官方网
  • 做竞价网站旅游网站建设的结论
  • 广州外贸网站建设推广企业信息管理系统免费
  • 注册网站域名多少钱一年建设网官网首页
  • 淘宝客网站的模板做网站的公司如何推广
  • 菏泽住房和城乡建设厅网站沈阳seo合作
  • 做的好的地方网站wordpress探针
  • 网站怎么做能提升ip流量中国机械加工网站
  • 怎么建个人公司网站360来店通自助营销平台