Re44:数据集 GSM8K 和 论文 Training Verifiers to Solve Math Word Problems

news2024/11/19 13:32:40

诸神缄默不语-个人CSDN博文目录

论文全名:Training Verifiers to Solve Math Word Problems
GSM8K数据集原始论文

OpenAI 2021年的工作,关注解决MWP问题(具体场景是小学(grade school)数学题),训练模型关注其错误,重复尝试,直至找到正确解法。
因此本文训练verifier检测解决方案是否正确。
在小模型上,verifier可以使模型提升到与大模型靠近的程度。
数据集越大,verifier效果越好。小数据集上没用。

论文ArXiv链接:https://arxiv.org/abs/2110.14168

官方GitHub项目:openai/grade-school-math

官方博文https://openai.com/research/solving-math-word-problems

verifier这个想法当然很好,除了成本看起来就很高之外……
另外就是看论文中的暗示,这个优秀的模型效果也是靠调参调出来的啊。哎调参嘛本来就是建模的一部分,我一点都没有在酸!

文章目录

  • 1. GSM8K数据集
  • 2. verifier
  • 3. 实验结果
  • 4. 复现
    • 1. 官方GitHub项目内容整理
    • 2. 直接跑一遍GPT-2微调
    • 3. GPT-2 + verifier
  • 本文撰写过程中参考的其他网络资料

1. GSM8K数据集

含8.5K条数学题。
7.5K训练集,1K测试集

每个问题需要2-8步推理来求解。

数据集中的解法都是自然语言形式的。

在这里插入图片描述

此外还提供了一种“苏格拉底式提问”的数据(虽然在论文中压根没提这茬):

A carnival snack booth made $50 selling popcorn each day. It made three times as much selling cotton candy. For a 5-day activity, the booth has to pay $30 rent and $75 for the cost of the ingredients. How much did the booth earn for 5 days after paying the rent and the cost of ingredients?
How much did the booth make selling cotton candy each day? ** The booth made $50 x 3 = $<<50*3=150>>150 selling cotton candy each day.
How much did the booth make in a day? ** In a day, the booth made a total of $150 + $50 = $<<150+50=200>>200.
How much did the booth make in 5 days? ** In 5 days, they made a total of $200 x 5 = $<<200*5=1000>>1000.
How much did the booth have to pay? ** The booth has to pay a total of $30 + $75 = $<<30+75=105>>105.
How much did the booth earn after paying the rent and the cost of ingredients? ** Thus, the booth earned $1000 - $105 = $<<1000-105=895>>895.

质量控制是纯人工完成的,我好羡慕啊……
数据集是找人写了1000条(先用few-shot prompted 175B GPT-3 model生成seed问题),然后用Surge AI自动打标扩展,然后找人进行验证。
calculator annotation是由硬编码的逻辑和LLM联合生成的,在训练时就放在一起训练,在测试时直接用calculator(eval())重算答案(在检测到=出现后,调用calculator,计算figure 1中的红色部分左式,得到计算答案,覆盖红色部分),如果出现非法表达式将直接重新抽样
在这里插入图片描述

2. verifier

本文认为,LM的一个重要问题就在于容易因小错而产生失误(sensitivity,或者说不鲁棒),这是因为LM生成过程是autoregressive的,所以无法对之前生成的内容进行纠错。

verifier:评估模型生成解法的正确程度(token-level + 联合训练语言模型和是否正确2个目标函数)
(分类一般比生成任务简单)
(存在推理错误,但是结果正确的场景)
在训练时同时训练验证任务和语言模型任务(训练时两种数据一样多,相当于对语言模型数据的100倍上采样)
在这里插入图片描述

在测试时,让模型生成100个解决方案,选择verifier排序最高的解决方案,作为输出。
(或许这个verifier也可以被叫做,模型聚合。加强版投票吧感觉。不知道以前机器学习那边做模型聚合有没有用过这种第二阶段的验证器(或者叫排序器?打分器)哈,应该有的吧)

本文主要考虑两种解决方案:微调和验证(具体计算都用的是calculator,训练2个epoch(原因见第3节讲的figure 3))
微调:训练1个低temperature(0)的GPT-3
验证:训练一堆高temperature(0.7)的GPT-3(generator),然后给每个输出进行打分(verifier),选择分值最高的结果(generator和verifier的尺寸一样,语言模型目标一样)
在这里插入图片描述

之前的工作中,有类似做法的:

  1. (2020 SIGGRAPH MIG) Collaborative Storytelling with Large-scale Neural Language Models抽样→排序,根据人工偏好得到训练信号
  2. (2021 EMNLP Findings) Generate & Rank: A Multi-task Framework for Math Word Problems:联合训练生成和排序

本文选择不同的生成器和验证器,是为了防止生成器过拟合(但是原则上也可以一起train)

3. 实验结果

  1. GPT-3直接微调,在不同的训练集大小和不同的模型参数上,基本呈现出大力出奇迹的标准结局:
    (这么大的模型还能算平均值和标准差,有钱真好啊)
    在这里插入图片描述
  2. 直接微调GPT-3后,test@N(N次测试中至少对一次)和迭代数之间的关系:test@1基本单调增长,但在测试集损失函数上过拟合;test@100迅速下降(本文认为是过拟合)
    在这里插入图片描述
  3. 必须要先生成自然语言解释,再生成最终答案。如果直接生成最终答案,结果会从20.6%直接降到5.2%
  4. 不同模型大小上verifier的实验结果(就算是OpenAI也没钱在175B的模型上算平均值和标准差了是吧)
    在小数据集上verifier没用可能是因为过拟合
    在这里插入图片描述
  5. ablation study
    图a我不太确定,我的理解是token-level指的是将整个自然语言结果的每一个token都和生成结果算损失函数(相当于当成一个生成问题),solution-level指的是只考虑最后生成的数值是否正确(相当于当成一个分类问题)
    图b本文认为是因为模型了解语言分布有益于区别不同的生成结果
    图c的结论比较意识流,本文认为这说明verifier是模糊启发式直觉选手,而不是认认真真在做验证
    在这里插入图片描述
  6. 测试时的计算次数
    图a就是直接在测试结果中选打分最高的一项
    图b是选择排序最前的这么多测试结果,进行投票
    在这里插入图片描述7. dropout正则化是牛逼的,但是verifier更加牛逼
    residual dropout(transformer同款)因为GPT-3没有用dropout,所以本文在用dropout微调之前还加了用dropout预训练,以防数据漂移
    dropout概率是hyperparameters sweep搜出来的,牛逼吧……有钱真好啊……
    在这里插入图片描述
    这句话我是真没搞懂:Note that we increase the batch size for token-level verifiers by a factor of 4, to better handle the more difficult objective and the noise from dropout. 这是什么我不知道的理论吗?
  7. 附录B的这个超参是啥意思我也没搞懂:
    在这里插入图片描述
    超参设置:
    在这里插入图片描述
  8. verifier可视化
    在这里插入图片描述

4. 复现

1. 官方GitHub项目内容整理

没有给出具体的实验代码,只给了一些参考工具脚本(都没有经过优化,“又不是不能用.jpg”)

  1. 数据集
    用于实验的数据:https://github.com/openai/grade-school-math/blob/master/grade_school_math/data/train.jsonl和https://github.com/openai/grade-school-math/blob/master/grade_school_math/data/test.jsonl
    苏格拉底式提问的数据:https://github.com/openai/grade-school-math/blob/master/grade_school_math/data/train_socratic.jsonl和https://github.com/openai/grade-school-math/blob/master/grade_school_math/data/test_socratic.jsonl
  2. 调用calculator的示例:https://github.com/openai/grade-school-math/blob/master/grade_school_math/calculator.py
  3. https://github.com/openai/grade-school-math/blob/master/grade_school_math/dataset.py:一些实用的数据集工具脚本
    哦但是值得注意的是
  4. GPT-2微调的代码:https://github.com/openai/grade-school-math/blob/master/grade_school_math/train.py
  5. GPT-2推理的代码:https://github.com/openai/grade-school-math/blob/master/grade_school_math/sample.py

2. 直接跑一遍GPT-2微调

LLM的部分跟别的LLM其实差不多,只是GSM8K多了一个调用calculator的部分。

参考官方代码和transformers的新功能。

这个我晚些再补。

3. GPT-2 + verifier

GPT-3毕竟没有开源,所以只能拿GPT-2当代餐了。

然后这个代码也我自己写的。应该比较好写,我晚些再补。

本文撰写过程中参考的其他网络资料

  1. 【搬运】GSM8K 数据集介绍_x66ccff的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/961759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java设计模式:四、行为型模式-09:模板模式

文章目录 一、定义&#xff1a;模板模式二、模拟场景&#xff1a;模板模式三、改善代码&#xff1a;模板模式3.0 引入依赖3.1 工程结构3.2 模板模式结构图3.3 爬取商品生成海报实现3.3.1 HTTP获取连接类3.3.2 定义执行顺序的抽象类3.3.3 当当爬取抽象实现类3.3.4 京东爬取抽象实…

java八股文面试[多线程]——synchronized锁升级详细流程

偏向锁 偏向锁是JDK6中的重要引进&#xff0c;因为HotSpot作者经过研究实践发现&#xff0c;在大多数情况下&#xff0c;锁不仅不存在多线程竞争&#xff0c;而且总是由同一线程多次获得&#xff0c;为了让线程获得锁的代价更低&#xff0c;引进了偏向锁。 偏向锁是在单线程执…

python3.11教程1:python基础语法、程序控制、函数

文章目录 一、Python简介1.1 为什么学习python1.2 python安装与配置1.3 python解释器1.4 命令行参数1.4.1 sys.argv变量1.4.2 -c和-m选项 1.5 解释器的运行环境1.5.1 编码格式1.5.2 编码声明 二、Python基础语法2.1 行结构2.2 变量&#xff08;标识符&#xff09;2.3 字节串2.4…

如何让照片动起来?几步操作轻松动起来

现在&#xff0c;许多人都喜欢在社交媒体上分享自己的照片。但是&#xff0c;有时单张静态照片可能无法完全表达出你想要表达的感觉。为了使你的照片更生动有趣&#xff0c;你可以使用一些简单的技巧使它们动起来。下面是几个简单的步骤。 步骤1&#xff1a;打开制作应用并导入…

图像融合去雾、近红外去雾、(近)红外和可见光数据集

今天给大家分享一篇发表在IEEE TMM上的去雾文章Joint Contrast Enhancement and Exposure Fusion for Real-World Image Dehazing 作者从对比度增强和曝光融合的视角来解决图像去雾问题&#xff0c;在真实场景上取得了较好的去雾效果。此外&#xff0c;作者将所提出的方法应用…

Json解析流程

一、拿到了题库 分析一下可以定义的 1、序号&#xff0c;用来区分题目数&#xff0c;每个题有唯一的序号 2、题目&#xff0c;就是下图的Q 3、预设的回答&#xff0c;下图的A 分析完我可以知道有三个字段&#xff0c;分别是int index、string Q、string A。 二、把字段丢到…

MongoDB 会丢数据吗? 在次补刀MongoDB 双机热备

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis &#xff0c;Oracle ,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加微信号 liuaustin3 &#xff08;…

git 查看当前分支最近一次提交的commit SHA

获取当前分支最近一次commit SHA &#xff08;长度为40个16进制数字的字符&#xff09;命令如下&#xff1a; git rev-parse HEAD 获取简写&#xff08;短&#xff09; commit SHA git rev-parse --short HEAD

灾备中的网络加密是什么?

什么是网络加密&#xff1f; 在网络设计之初&#xff0c;对网络安全的问题考虑的不周全&#xff0c;数据在链路上传输的时候都是明文传输的&#xff0c;稍微有点技术的人&#xff0c;都可以轻松的拿到网络上的数据流量&#xff0c;并进行查看。试想一下&#xff0c;如果我们为…

Revit SDK 介绍:DistanceToPanels 根据距离设置参数

前言 这个例子展示如何计算距离&#xff0c;并将距离的值设置为参数。 内容 选中球形&#xff0c;运行程序&#xff0c;会设置控制高度的参数&#xff0c;距离越远参数值越大。效果如下所示&#xff1a; 核心逻辑&#xff1a; 得到选中物体的位置遍历分割表面内部的 Panel…

DAY07_Maven高级——分模块开发与设计依赖管理聚合与继承属性管理多环境配置与应用私服

目录 一 分模块开发与设计1. 分模块开发的意义问题导入模块拆分原则 2. 分模块开发问题导入2.1 创建Maven模块2.2 书写模块代码2.3 通过maven指令安装模块到本地仓库&#xff08;install指令&#xff09; 二 依赖管理1. 依赖传递问题导入 2. 可选依赖问题导入 3. 排除依赖问题导…

HVV行动之态势感知平台(一)

知攻善防&#xff0c;遇强则强&#xff01; 先介绍一下什么是HVV行动&#xff1a; 它是由公安部牵头的&#xff0c;通过组织红队和蓝队进行为期两周到三周的攻防对抗演习&#xff0c;来检测一些企业单位可能存在的网络漏洞和威胁&#xff0c;进而进行修复和加固&#xff0c;提…

go web之一:hello world快速上手+handle(http.Handle和http.HandleFunc的区别与联系)

前情提要&#xff1a; 需要安装好go的环境和VSCode的go插件。 hello world快速上手 1、创建go.mod 在项目根目录下打开命令行&#xff0c;或者直接用VSCode中的终端。输入命令 go mod init github.com/solenovex/web-tutorial 然后就能看到项目结构中多了一个go.mod 2、…

石油化工智慧安监方案:TSINGSEE青犀视频AI智能识别安全生产风险预警平台建设

一、行业背景 石油化工生产存储企业属于高温、高压、易燃、易爆、有毒的危险行业&#xff0c;其生产装置大型化、密集化、生产工艺复杂、生产过程紧密耦合。随着互联网技术的发展&#xff0c;运用先进的AI、物联网、大数据、云计算等技术手段不断提高石油化工行业的安全监管水…

postgis数据库导出csv表再导入postgis

1、导出csv表 from settings_Address import * from sqlalchemy import create_engine, MetaData import pandas as pd def create_conn(Postgis_user,Postgis_password,Postgis_host,Postgis_port,dbname_PG):# return create_engine(PostgispyPostgis://{}:{}{}:{}/{}.forma…

jmeter源码二次开发

本文以jmeter5.5为例&#xff0c;扩展“TCP Socket支持定长的返回字节流”功能。 一、 源码本地编译运行 1、在jmeter官网下载源码&#xff1a;jmeter各版本源码地址 2、在idea中用gradle导入jmeter源码&#xff0c;idea中要配置jdk&#xff0c;gradle&#xff0c;我用的是j…

使用flink sqlserver cdc 同步数据到StarRocks

前沿&#xff1a; flink cdc功能越发强大&#xff0c;支持的数据源也越多&#xff0c;本篇介绍使用flink cdc实现&#xff1a; sqlserver-》&#xff08;using flink cdc&#xff09;-〉flink -》&#xff08;using flink starrocks connector&#xff09;-〉starrocks整个流程…

SQL注入类型与技巧

目录 一、注入类型 1.联合查询注入 2.报错注入 3.bool注入(布尔盲注) 4.sleep注入(时间盲注) 二、注入技巧 1.科学计数法绕过正则 2.过滤information 3.无列名注入 一、注入类型 1.联合查询注入 MySQL联合查询注入利用union(联合查询)可以同时执行多条SQL语句的特点…

error: ‘std::_hypot‘ has not been declared using std::hypot;

Cmake 使用qt的编译器 编译opencv时 执行mingw32-make时出现了错误 本质原因就是 _hypot 没有声明。所以找到对应的文件声明一下 就行了。 E:\*****\Qt5.14.1\Tools\mingw730_64\lib\gcc\x86_64-w64-mingw32\7.3.0\include\c 下面的math.h 文件。 可以看到这个文件有一个…

8月31日-9月1日 第六章 案例:MySQL主从复制与读写分离(面试重点,必记)

本章结构 案例概述 案例前置知识点 详细图示 1、什么是读写分离&#xff1f; 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作&#xff08;INSERT、UPDATE、DELETE&#xff09;&#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导…