这篇论文的假设是指类似日常生活中的推断假设。
论文
摘要
研究人员主要依靠 painstaking 的数据分析与思考(即所谓的"欧几里得时刻")来驱动假设的产生。在本文中,我们探讨了大规模语言模型(LLMs)在假设生成方面的潜力,尤其关注基于数据(即带标签的示例)的假设生成任务。
为了使 LLMs 能够处理长文本上下文,我们首先从少量示例中生成初始假设 ,随后通过迭代更新逐步提升假设的质量 。受多臂老虎机 问题启发,我们设计了一种奖励函数,用以指导更新过程中的利用与探索权衡。实验结果表明,我们的算法能够生成显著优于少样本提示方法的假设,在分类任务中将预测性能提升了 31.7%;此外,在三个真实世界数据集上,准确率分别提高了 13.9%、3.3% 和 24.9%。值得注意的是,我们在两个极具挑战性的真实世界数据集上,还分别以 12.1% 和 11.6% 的优势超越了传统监督学习方法。更令人振奋的是,生成的假设不仅验证了人类已知的理论,还为任务本身揭示了全新的洞见。
1 简介
核心问题是如何让大语言模型(LLMs)生成高质量的假设。尽管用户可以轻松地提示LLMs生成假设,但这些模型可能无法有效利用单个长提示中的输入示例。
此外,在生成过程中引入质量评估机制 至关重要,这样我们才能筛选掉低质量的假设,并逐步优化出更优的方案。正是基于以上两点观察,我们决定从一种类似于监督学习的 设置入手:通过迭代式地提示LLM根据训练样本生成假设,并以训练准确率作为质量衡量标准,从而指导整个生成过程。更为便利的是,我们还可以像监督学习那样,借助模型在未参与训练的测试集上的表现,来评估最终生成假设的质量。
为了利用大模型生成高质量的假设,我们提出了一种受多臂赌博机中置信上限算法 启发的算法。 给定由少量示例生成的初始假设 ,我们需要评估其质量 ,并提出新的假设以弥补其不足之处 。为应对这种探索与利用之间的权衡,我们引入了一个奖励函数 ,并对表现最佳的假设进行评估。 k 针对每个训练样本的假设。我们维护一个错误样本库,以捕捉假设池中知识的不足,并根据该错误样本库生成新的假设,从而弥补这一差距。
生成的假设自然支持一种基于假设的可解释分类器 。我们提出了一套针对给定假设集的推理策略。我们将该方法应用于一个合成任务 ------其中存在唯一已知的有效假设,以及三个真实世界任务 (欺骗性评论、标题热度和推文热度 )。这些真实世界任务聚焦于欺骗检测与消息热度预测,而这类问题即使对人类而言也极具挑战性。
需要强调的是,尽管假设在辅助下游分类任务中的效用可作为衡量大模型生成假设能力的一个指标, 我们的目标并非最大化分类性能 。 相反,我们主要的兴趣在于假设的质量 . 因此,至关重要的是,这些假设不仅要在生成它们的大型语言模型(LLM)之外具有可解释性 。我们证明,由一种LLM(例如GPT-3.5-turbo)生成的假设,能够被另一种LLM(例如Mixtral)用于实现准确推理。甚至在针对DECEPTIVE REVIEWS的分布外数据集上,我们的方法还能超越经过微调的RoBERTa模型------即所谓的"oracle"。这种跨领域泛化能力有力地证明了我们有能力生成高质量的假设。此外,通过定性分析,我们生成的假设不仅验证了现有文献中的理论,还为该任务提供了新的见解。
2.方法
我们的假设生成算法(算法 1) 受置信上界(UCB)算法的启发(奥尔, 2002). 给定一组初始示例 Sinit⊂ S ,我们首先提示大模型生成假设,以用于 Sinit,它们作为我们初始的假设库 H . 尽管初始假设 能够解释部分数据,但它们通常难以涵盖所有示例的完整范围。因此,我们引入了一个更新阶段,该阶段具有双重目的:1)提高假设所能解释的数据比例;2)替换那些被证实不准确的假设。
在更新阶段,针对一个训练样本 s,我们选择前 k 来自假设库的高回报假设 H. 模型被提示使用每个顶级选项进行预测 k 高回报的假设 s. 然后,我们计算推理的准确率,并据此更新每个假设的奖励。如果 w假设 假设对这些示例预测错误,然后 s 被添加到错误示例池 W. 一旦错误示例池达到最大大小 w最大,错误的示例在 W 用于生成新的假设。错误示例池代表了当前假设集合在该数据集上存在的知识缺口。因此,通过生成新假设,算法能够填补这些空白。我们更新 H 根据奖励生成的新假设。
奖励。 如上所述,每个假设都关联着一个奖励。在我们的算法中,由于多臂赌博机问题与我们的问题设定之间存在相似性,因此我们采用了UCB算法中的奖励函数。具体而言,我们将每个假设视为一个"臂",而每个训练样本则被视作一次"拉动"。不过,值得注意的是,与传统的多臂赌博机问题不同,对于单个训练样本,我们会同时测试多个假设。此外,当假设被更新后,还可能引入新的"臂",从而使这一设置从标准的静态"臂"场景转变为动态"臂"场景。正式地讲,奖励被定义为:

Si 是已用于评估假设的示例集合。 hi,t 是训练时间步,且 α是一个控制探索项的超参数。奖励函数中的第一项表示假设对所有数据的准确率 Si. 第二项是探索项,它根据假设被选择的次数以及到目前为止访问的训练样本数量来计算。其中,准确项促使算法优先采用表现优异的假设,而探索项则鼓励算法去尝试那些尚未被频繁选中的假设。因此,奖励函数在探索与利用之间实现了平衡。
为提高效率,我们在训练 过程中单独使用每个假设,未考虑其组合效应 ;然而,在推理 阶段,我们应至少基于两个原因,充分利用一组假设的整体作用 。首先,某些假设可能仅适用于部分示例;其次,相互竞争的理论可能需要进行直接对比分析。因此,我们设计了多种推理策略,以应对这些不同的推理方式(详见附录)。 A 用于提示和附录 B.2 用于实现细节)。
• 最佳精度假设 。 假设 h 从假设库中选取准确度最高的内容,并将其纳入提示中,以引导模型执行推理。
• 过滤与加权投票 。 单一假设可能不足以解释数据。因此,这种方法采用多种相关假设的组合 ,为单个样本做出预测。我们首先 过滤 通过提示大型语言模型(LLM)判断哪些假设与示例相关 ,进而生成这些相关假设的预测。随后,再次提示LLM为每个相关假设生成预测,并将这些预测进行汇总 。加权投票,其中权重是相应假设的训练准确率。
• 单步自适应推理 。 与过滤与加权投票 类似,过滤与加权投票这种方法利用上下文信息来选择假设。然而,不同之处在于,它会为每个测试样本挑选出最适用的假设。具体而言,对于给定的测试样本,LLM 被要求从一组选项中识别出最贴切的假设。针对每一个假设,我们提供了训练集中该假设曾准确预测过的实例。随后,LLM 通过将测试样本与这些训练实例进行对比,并评估其相似性,最终选出最相关的假设。接着,我们将所选假设应用于测试样本。
• 两步自适应推理。我们将之前的推理策略分为两个步骤:1. LLM 通过将测试示例与假设的对应示例进行比较,确定最相关的示例集合。2. 随后,LLM 会接收到相应的假设,并在第二个提示中利用该假设对测试示例执行推理。
项目分析总结
基于对代码的分析,这是一个名为 HypoGeniC 的科学研究工具,专注于使用大型语言模型(LLM)生成科学假设。
核心功能架构
主要框架组件:
- HypoGeniC (Hypothesis Generation in Context) - 基于数据驱动的假设生成框架
- HypoRefine - 结合文献和数据的协同假设生成框架
- Union Methods - 文献与框架假设的机械组合方法
技术栈:
- 支持 OpenAI GPT、Anthropic Claude、本地VLLM模型
- 使用Redis缓存API响应以降低成本
- 基于Python 3.10+,使用transformers、torch等ML库
核心算法模块
生成模块 (hypogenic/algorithm/generation/):
DefaultGeneration- 批量初始化和迭代生成假设- 支持批量处理和并发API调用
推理模块 (hypogenic/algorithm/inference/):
DefaultInference- 基础假设推理OneStepAdaptiveInference- 单步自适应推理TwoStepAdaptiveInference- 两步自适应推理FilterAndWeightInference- 过滤和加权推理
更新模块 (hypogenic/algorithm/update/):
DefaultUpdate- 默认假设更新策略SamplingUpdate- 采样更新策略
应用场景举例
1. 社交媒体分析
# 示例:预测推特转发行为
task_config = "./data/retweet/config.yaml"
# 基于用户资料、推文内容生成转发假设
# 如:"用户关注数越多,转发率越高"等假设
2. 新闻标题优化
# 示例:标题点击率预测
task_config = "./data/headline_binary/config.yaml"
# 生成关于标题特征的假设
# 如:"包含疑问词的标题点击率更高"等假设
3. 商品评论分析
# 示例:酒店评论情感分析
# 基于评论内容生成情感倾向假设
# 如:"提及房间清洁度的评论更可能是正面评价"
4. 学术研究支持
- 文献预处理和知识提取
- 结合现有文献和实验数据生成新假设
- 自动化假设验证和筛选
工作流程
- 数据准备 - 准备JSON格式的训练/测试数据
- 配置设置 - 编写YAML配置文件定义任务和提示模板
- 假设生成 - 使用LLM批量生成候选假设
- 假设推理 - 在测试数据上验证假设准确性
- 迭代优化 - 根据表现更新和改进假设
实际应用价值
- 科研加速 - 自动化假设生成过程,减少人工头脑风暴时间
- 跨领域发现 - 发现数据中隐藏的、非直观的关联模式
- 假设验证 - 系统化评估假设在不同数据集上的表现
- 知识整合 - 结合现有文献和新数据产生创新假设
这个工具特别适合数据科学家、研究人员和分析师,能够从复杂数据中自动生成可验证的假设,大大提升了探索性数据分析的效率。
请举一个例子·,说明假设是怎么生成的
让我通过一个新闻标题点击率预测的例子来说明假设是如何生成的:
1. 数据准备
假设我们有这样的训练数据:
{
"headline_1": [
"科学家发现新行星",
"今日股市大跌",
"本地餐馆获奖"
],
"headline_2": [
"震惊!宇宙中竟藏着这样的秘密!",
"投资者必看:明天将会发生什么?",
"你绝对想不到这家餐厅的故事..."
],
"label": [
"Headline 2 has more clicks than Headline 1",
"Headline 2 has more clicks than Headline 1",
"Headline 2 has more clicks than Headline 1"
]
}
2. 提示模板构建
系统会根据配置文件生成这样的提示:
System: 你是一个专业的数据分析师,请根据观察到的数据生成假设。
User: 这里是一些观察结果:
观察1:
标题1: 科学家发现新行星
标题2: 震惊!宇宙中竟藏着这样的秘密!
观察结果: Headline 2 has more clicks than Headline 1
观察2:
标题1: 今日股市大跌
标题2: 投资者必看:明天将会发生什么?
观察结果: Headline 2 has more clicks than Headline 1
请生成5个可能的假设,帮助我们判断哪些标题会有更多点击。
请以 1. [假设], 2. [假设], ... 5. [假设] 的格式生成。
提出的假设:
3. LLM生成假设
LLM会分析这些数据模式,生成如下假设:
1. 包含感叹号和情感词汇的标题点击率更高
2. 使用"震惊"、"秘密"等悬念词汇的标题更容易吸引点击
3. 提问式标题比陈述式标题点击率更高
4. 包含"你"、"你的"等第二人称代词的标题更吸引人
5. 制造悬念和好奇心的标题比直接信息型标题表现更好
4. 假设验证和筛选
系统会在测试数据上验证这些假设:
- 测试案例: 标题A vs 标题B
- 应用假设: 根据每个假设预测哪个标题点击率更高
- 准确率计算: 对比预测结果与实际点击率
- 假设评分: 根据预测准确率为每个假设打分
5. 迭代优化
初始假设池 : 5个假设,平均准确率70% 数据更新 : 加入新的训练样本 假设更新:
- 保留高准确率假设
- 修正低准确率假设
- 生成新假设补充 优化结果: 更新后的假设池准确率提升到85%
6. 具体代码执行过程
在 hypogenic/algorithm/generation/default.py:88 中:
# 1. 准备批量输入数据
example_bank = train_data.loc[example_indices].copy().reset_index(drop=True)
# 2. 生成提示
prompt_inputs = self.prompt_class.batched_generation(
example_bank, init_hypotheses_per_batch # 例如:5个假设
)
# 3. 调用LLM API
responses = self.api.batched_generate(prompt_inputs, ...)
# 4. 提取假设
hypotheses_list = extract_hypotheses(responses) # 从LLM响应中解析假设
7. 最终输出
系统会输出一个假设库,每个假设包含:
- 假设描述: "包含感叹号的标题点击率更高"
- 准确率: 82%
- 支持证据: 基于多少训练样本
- 置信度: 系统对该假设的信心程度
这样,研究人员就得到了一组可验证、可解释的假设,可以用于指导实际的内容创作决策。
这个过程的核心价值在于:从数据中自动发现人类可能忽略的模式,并将其转化为可验证的业务假设。
是怎么训练的
HypoGeniC的训练机制
HypoGeniC的训练不是传统意义上的"训练",而是一个迭代优化和假设筛选的过程。让我详细解释:
1. 核心训练循环
基于代码分析,HypoGeniC的"训练"实际上是一个在线学习和假设优化的过程:
1. 训练循环核心逻辑
初始化阶段 (hypogenic/algorithm/generation/default.py:45):
# 1. 批量生成初始假设
def batched_initialize_hypotheses(self, num_init, init_batch_size, init_hypotheses_per_batch):
# 将初始数据分成多个批次
for i in range(num_batches):
example_bank = train_data.loc[example_indices].copy()
# 为每个批次生成提示
prompt_inputs = self.prompt_class.batched_generation(example_bank, init_hypotheses_per_batch)
# LLM批量生成假设
responses = self.api.batched_generate(prompt_inputs)
在线训练循环 (hypogenic/algorithm/update/default.py:109):
for i in range(start_sample, num_train_examples):
# 逐个测试样本,评估假设表现
current_sample = i + 1
# 获取top-k最佳假设
top_k_hypotheses = sorted(hypotheses_bank, key=lambda x: hypotheses_bank[x].reward, reverse=True)[:k]
# 用当前样本测试每个假设
preds, labels = self.inference_class.batched_predict(train_data, [(i, {hypothesis: hypotheses_bank[hypothesis]}) for hypothesis in top_k_hypotheses])
2. 假设评估和更新机制
即时反馈学习 (hypogenic/algorithm/update/default.py:142-151):
for pred, label, hypothesis in zip(preds, labels, top_k_hypotheses):
if pred != label:
# 假设预测错误,降低其权重
hypotheses_bank[hypothesis].update_info_if_not_useful(current_sample, alpha)
else:
# 假设预测正确,提高其权重
hypotheses_bank[hypothesis].update_info_if_useful(current_sample, alpha)
# 记录这个假设适用的正例
hypotheses_bank[hypothesis].update_useful_examples(i, label)
自适应新假设生成 (hypogenic/algorithm/update/default.py:162-189):
# 当错误率达到阈值时,触发新假设生成
if num_wrong_hypotheses >= num_wrong_to_add_bank or len(top_k_hypotheses) == 0:
wrong_example_ids.add(i)
# 累积足够的错误样本后,生成新假设
if len(wrong_example_ids) == update_batch_size * num_hypotheses_to_update:
# 针对这些难例生成新假设
new_hypotheses = self.generation_class.batched_hypothesis_generation(
wrong_example_ids, # 用错误样本作为上下文
current_sample,
update_hypotheses_per_batch,
alpha
)
3. 具体训练过程举例
假设训练新闻标题点击率预测:
Round 1: 初始假设生成
数据: 10个标题对比样本
生成的初始假设:
1. "包含感叹号的标题点击率更高" (准确率: 70%)
2. "使用数字的标题更吸引人" (准确率: 65%)
3. "制造悬念的标题表现更好" (准确率: 80%)
Round 2: 在线学习和筛选
# 测试样本11
标题A: "科学家发布重要研究成果"
标题B: "震惊!科学家发现改变世界的东西!"
真实结果: B点击率更高
假设1预测: B ✓ (权重+α)
假设2预测: A ✗ (权重-α)
假设3预测: B ✓ (权重+α)
Round 3: 错误累积和新假设生成
# 当假设2连续预测错误达到阈值
wrong_examples = [样本11, 样本15, 样本23, 样本27, 样本31]
# 针对这些错误样本生成新假设
新假设提示: "基于以下错误案例,生成更准确的假设..."
生成: "包含具体行动动词的标题比抽象描述更吸引点击"
4. 奖励函数和权重更新
奖励计算 (hypogenic/algorithm/summary_information.py):
def update_info_if_useful(self, current_sample, alpha):
# 正确预测的奖励递减(避免早期过度自信)
reward = alpha * (1 - self.correct_count / current_sample)
self.reward += reward
self.correct_count += 1
def update_info_if_not_useful(self, current_sample, alpha):
# 错误预测的惩罚递增
penalty = alpha * (self.wrong_count / current_sample)
self.reward -= penalty
self.wrong_count += 1
5. 训练特点总结
1. 在线学习:
- 不是批量训练,而是逐样本学习
- 实时反馈,即时调整假设权重
2. 自适应生成:
- 当现有假设表现不佳时,自动生成新假设
- 针对难点样本生成特定假设
3. 探索-利用平衡:
alpha参数控制学习率k参数控制考虑的假设数量- 动态平衡已知好假设和探索新假设
4. 无需传统训练:
- 不需要梯度下降
- 不需要神经网络权重更新
- 完全基于符号推理和LLM生成
这种训练方式的优势 是可解释性强、样本效率高;局限是依赖LLM质量,且假设质量受限于生成提示的设计。
基于我对这个项目的深入分析,我可以为你详细说明如何将这套流程用于材料科学的ideas生成领域。
项目核心机制分析
这个项目本质上是一个基于LLM的假设生成与推理系统,包含三个核心组件:
- HypoGeniC: 纯数据驱动的假设生成
- HypoRefine: 数据+文献的多智能体协同假设生成
- Union方法: 机制性结合文献假设与数据驱动假设
对材料科学领域的适配方案
📊 输入格式改造
你提到的输入"1个科研问题+N篇相关论文"可以这样适配:
步骤1: 将论文转换为结构化数据
# 将N篇论文转换为JSON格式
{
"research_question": ["如何提高钙钛矿太阳能电池的效率?"],
"paper_titles": ["论文1标题", "论文2标题", ...],
"paper_abstracts": ["论文1摘要", "论文2摘要", ...],
"key_findings": ["发现1", "发现2", ...],
"methods": ["方法1", "方法2", ...],
"materials": ["材料1", "材料2", ...],
"properties": ["性能1", "性能2", ...],
"label": ["当前研究现状总结/研究缺口"] # 这个可以作为训练标签
}
步骤2: 科研问题作为观察数据
- 将科研问题作为
observations提示模板的核心输入 - 论文内容作为背景知识和先验信息
🧪 材料科学特定的工作流程设计
# 建议的材料科学工作流程
1. Literature Processing Agent (文献处理智能体)
- 提取材料成分、合成方法、性能参数
- 识别研究趋势和技术瓶颈
- 生成文献假设:"基于已有研究,X材料在Y条件下可能具有Z特性"
2. Data Analysis Agent (数据分析智能体)
- 分析实验数据模式
- 生成数据驱动假设:"根据数据分析,A和B之间存在正相关关系"
3. Hypothesis Refinement (假设精化)
- 结合文献假设与数据假设
- 生成创新性研究思路
- 评估假设的可行性和创新性
🔧 具体实施步骤
1. 创建材料科学任务配置
# materials_science.yaml
task_name: materials_hypothesis_generation
train_data_path: ./materials_train.json
val_data_path: ./materials_val.json
test_data_path: ./materials_test.json
prompt_templates:
observations: |
Research Question: ${research_question}
Related Papers: ${paper_abstracts}
Key Materials: ${materials}
Known Properties: ${properties}
Current Limitations: ${limitations}
hypothesis_generation:
system: |
你是一位材料科学专家。基于给定的科研问题和相关论文,
提出3-5个具体的研究假设。每个假设应该包括:
1) 预期材料/结构
2) 合成/制备方法
3) 预期性能改进
4) 理论依据
user: |
科研问题:${research_question}
相关论文信息:
${observations}
请生成具有创新性和可行性的研究假设。
materials_inference:
system: |
基于给定假设,预测最优的材料设计方案。
user: |
假设:${hypothesis}
请提供具体的材料组成、制备条件和预期性能。
2. 关键定制化组件
需要创建的组件:
- 材料标签提取器: 从LLM输出中提取材料设计建议
- 文献预处理模块: 将PDF论文转换为结构化数据
- 创新性评估器: 评估生成想法的原创性和科学价值
3. 输出格式设计
# 期望的输出格式
{
"research_ideas": [
{
"idea_id": 1,
"materials": "Fe3O4@SiO2核壳结构",
"synthesis": "水热法合成,800°C退火",
"properties": ["比表面积>200 m²/g", "磁导率>50 emu/g"],
"innovation_score": 0.85,
"feasibility_score": 0.78,
"literature_basis": "基于论文[1,3,7]的发现"
}
]
}
💡 核心优势与创新点
- 系统性文献整合: 相比人工文献调研,能更系统地整合多篇论文信息
- 跨领域知识融合: 可能发现不同研究领域之间的联系
- 假设迭代优化: 通过多轮假设生成和评估,不断精化研究思路
- 可量化评估: 对每个研究想法给出创新性和可行性评分
⚠️ 需要注意的挑战
- 数据质量依赖: 需要高质量的论文解析和结构化
- 领域知识验证: 生成的想法需要材料专家验证
- 实验可行性: 理论假设与实际实验之间存在差距
- 最新进展同步: 需要持续更新最新研究进展
🚀 实施建议
- 从简单任务开始: 先选择材料科学的一个细分领域(如电池材料)
- 建立高质量数据集: 手动标注一些高质量的研究假设作为训练数据
- 渐进式迭代: 先用现有方法生成基础假设,再逐步加入材料专业知识
- 专家反馈循环: 建立材料专家的反馈机制,持续优化系统
这套框架的核心价值在于它提供了一个可扩展、可定制的假设生成系统,你可以根据材料科学的具体需求逐步调整和优化各个组件。