大模型COT是否一定有用?在何处有用?

一个辩证研究及9个COT开源数据集

文章转自公众号老刘说NLP

openai o1出来之后,cot这类思维链数据受到大家广泛关注,最近也出现了一些论证的工作,因此,我们先来看看一个辩证研究:大模型COT在什么任务上有用,是否真的有用,会有一些发现。

另一个是关于数据的问题,我们可以看看目前都有哪些可用的开源CoT数据集。

一、关于COT的一个辩证研究:在什么任务上有用

关于cot的一个研究,《To CoT or not to CoT? Chain-of-thought helps mainly on math and symbolic reasoning》,https://arxiv.org/abs/2409.12183,通过定量的元分析和对20个数据集、14个模型的实验评估,研究了链式思考(Chain-of-Thought, CoT)提示技术在提升大型语言模型(LLMs)解题能力方面的有效性。

a8b0c1a2c3aa48a69492b6cef35ac34f.jpeg

如图1所示,其包含了两部分数据,用以说明链式思考(CoT)在不同类型的任务中相对于直接回答(Direct Answer, DA)的性能提升:

9c1ea0fdd6a6dfab95955ef6dc4a5683.jpeg

左侧(Left):CoT文献的元分析,每个点代表在某个(大模型,任务)组合上,使用CoT相较于直接回答所报告的性能差异(Delta)。 这个分析覆盖了超过100篇使用CoT的研究论文。点的位置表示在特定任务和模型组合下,CoT相比于直接回答方法带来的准确率提升或下降。

右侧(Right):零样本(Zero-shot)CoT与直接回答提示在五种通用推理类别上的平均性能比较;涵盖了20个数据集,并且每个数据集在14个不同的大型语言模型上进行了评估。这五种通用推理类别可能包括数学、逻辑、常识推理、知识推理等。图表展示了在这些类别的任务中,使用CoT的平均性能与直接回答的平均性能之间的比较。在数学和符号推理这类任务中,CoT一致地显示出显著的性能提升(红色点状线表示在实验中CoT的平均性能提升)。

值得注意的是,图1强调了CoT在处理数学和符号推理任务时的有效性,而在其他类型的推理任务中,CoT带来的性能提升则不那么显著。红色点状线提供了一个直观的比较,展示了在所有实验中CoT相对于直接回答的平均性能提升。

基于这个实验结果,可以到如下发现:

1、发现1-基于提示的CoT在何处以及为什么有帮助

Finding 1: CoT only helps substantially on problems requiring mathematical, logical, or algorithmic reasoning

CoT只在需要数学、逻辑或算法推理的问题上提供显著的帮助。

在其他类型的任务中,CoT带来巨大收益的案例很少,这些异常值中有许多包含了一些符号推理的成分。例如,在MMLU和MMLU Pro上,分析了CoT的改进,并发现CoT只在数据集的数学部分带来好处。MMLU上CoT带来的总性能提升中,高达95%归因于问题或生成的输出中包含“=”的问题。对于非数学问题,发现没有特征表明CoT何时会有帮助。

de625ed722846c501116f4d4783b6fc6.jpeg

2、发现2-为什么CoT在这些问题上有所改进,而只在这些问题上有所改进

Finding 2: CoT primarily helps with the execution step that performs computation and symbolic manipulation, but falls short of what LLMs with tool augmentation can do.

数学和形式逻辑推理数据集可以被分解为两个处理阶段:规划步骤(例如,将问题解析为方程)和执行步骤(构建中间输出并朝着解决方案努力)。

因此,发现CoT主要有助于执行步骤,执行步骤执行计算和符号操作,但与使用符号求解器相比,它的性能较差。

使用CoT提示的LMs可以生成可执行的形式解决方案计划,并比直接回答更好地执行这些计划。

但是使用LMs生成解决方案计划,然后使用外部符号求解器来解决问题,对于这些任务的两个阶段都比使用CoT更好。

8764f6936112d2df80a09271f922e321.jpeg

这些结果说明,CoT的实用性通常受到工具增强的限制:在CoT有帮助的问题上,已经拥有比CoT更强大的工具可以采用,而在没有工具的“软推理”问题上,如常识,CoT的益处有限。这一描述有两个主要含义。

首先,对于许多广泛使用CoT的问题,CoT是不必要的:存在更有效的提示策略,这些策略在推理成本更低的情况下可以获得类似的性能。

其次,迫切需要超越基于提示的CoT,转向基于搜索、交互代理或更重针对CoT进行微调的模型的更复杂方法。

因此,未来的工作可以探索如何更好地利用中间计算来解决数学和符号推理领域之外的挑战性问题。

二、一些可用的开源COT项目

当然,现在很多人都在寻找COT数据集,但很遗憾,开源现成的并不多,通过查找github,我们找到了如下9个数据集,实际上都是Fkan发布的,中文则更少,做的是翻译。

1、alpaca-CoT数据集项目

1)alpaca-CoT英文数据集

地址https://github.com/PhoebusSi/alpaca-CoT/tree/main/data,CoT数据集是通过对FLAN发布的9个CoT数据集进行格式化组合得到的。它包含9个CoT任务,涉及74771个样本。

9f4d2a5060f5c11dd7acfb699978eb52.jpeg

每个数据集的分布,如下:

48638669efc1997cc5083fc16320789b.jpeg

不过,全是英文,可以看看一个具体示例:

be388b5234cfd1d4f2c07b23d89ec262.jpeg

2)CoT_zh中文数据集

CoT_zh数据集是通过使用谷歌翻译将CoT数据集转成中文得到。

地址:https://github.com/SpringDuB/fine_tune_ChatGLM/tree/main/datas/CoT_zh

可以使用modelscope加载数据:

from modelscope.msdatasets import MsDataset
from modelscope.utils.constant import DownloadMode

# Load the CoT chinese dataset
ds_train = MsDataset.load( 'YorickHe/CoT_zh', split= 'train', download_mode=DownloadMode.FORCE_REDOWNLOAD)
print(next(iter(ds_train)))

可以看看一个具体的例子:

afa60fca239cbc31715cfd98d46e319d.jpeg

参考文献

1、https://github.com/PhoebusSi/alpaca-CoT/tree/main/data

2、https://github.com/SpringDuB/fine_tune_ChatGLM/tree/main/datas/CoT_zh

3、https://arxiv.org/abs/2409.12183


### 使用OTB数据集实现目标跟踪算法 #### 准备工作 在使用OTB数据集之前,需先下载并安装必要的软件包和库。这通常涉及Python环境设置以及特定于计算机视觉的任务所需的依赖项。 对于OTB数据集的具体操作,用户可以通过访问官方提供的OTB Benchmark学习资源来获取详细的指南[^1]。该资源不仅提供了关于如何配置和运行评估工具的信息,还包含了OTB50和OTB100两个版本的数据集介绍及其应用实例。 #### 获取数据集 为了开始处理OTB数据集,首先应当从官方网站或其他可信渠道下载所需的数据集文件。这些文件一般会包含图像序列及对应的标注信息,用于训练或测试目的。 一旦获得了数据集,就可以按照如下方式加载: ```python import os from PIL import Image import numpy as np def load_images_from_folder(folder): images = [] for filename in sorted(os.listdir(folder)): img_path = os.path.join(folder, filename) if img_path.endswith(".jpg") or img_path.endswith(".png"): img = Image.open(img_path).convert('RGB') images.append(np.array(img)) return np.stack(images) dataset_dir = 'path/to/otb_dataset' sequence_name = 'Basketball' # Example sequence name from OTB dataset image_sequence = load_images_from_folder(f'{dataset_dir}/{sequence_name}/img/') ground_truth_rectangles = np.loadtxt(f'{dataset_dir}/{sequence_name}/groundtruth_rect.txt', delimiter=',') ``` 这段代码展示了如何读取指定目录下的图片序列,并将其转换成NumPy数组形式以便后续处理;同时也说明了怎样解析地面真值矩形框的位置坐标。 #### 实现基本的目标跟踪逻辑 基于上述准备好的输入数据,下面给出一个简单的模板框架用来构建自定义的目标跟踪器: ```python class SimpleTracker: def __init__(self, initial_bbox): self.bbox = initial_bbox def update(self, frame): """Update the bounding box based on new frame.""" pass # Implement tracking logic here def get_current_bbox(self): return self.bbox initial_frame_index = 0 tracker = SimpleTracker(initial_bbox=ground_truth_rectangles[initial_frame_index]) for i, frame in enumerate(image_sequence[starting_point:], start=start_point): tracker.update(frame) current_bbox = tracker.get_current_bbox() print(f"Frame {i}: Bounding Box={current_bbox}") ``` 此部分提供了一个非常基础的`SimpleTracker`类结构作为起点,实际的应用程序可能需要更复杂的模型和技术来提高准确性与鲁棒性。例如,可以考虑引入深度学习的方法或是利用现有的高效能开源解决方案如C-COT等高级特性[^3]。 #### 可视化结果 最后一步是对不同算法的结果进行可视化展示,以直观地理解各方法之间的差异。这里推荐采用Matplotlib库来进行绘图: ```python import matplotlib.pyplot as plt plt.figure(figsize=(8, 6)) # Assuming multiple algorithms have been evaluated and results stored in json files. algorithms_results = {} # Load your algorithm evaluation JSONs into this dict. for algo_name, result_data in algorithms_results.items(): precision_scores = result_data['precision'] success_rates = result_data['success'] plt.plot(precision_scores, label=f"{algo_name} Precision", linestyle=':') plt.plot(success_rates, label=f"{algo_name} Success Rate") plt.xlabel('Threshold') plt.ylabel('Score') plt.title('Performance Comparison of Tracking Algorithms on OTB Dataset') plt.legend(loc="best") plt.show() ``` 通过这种方式能够有效地比较多个算法的表现,特别是在执行消融研究时尤为有用[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值