掘金 人工智能 06月03日 18:38
多跳问答数据难找?试试 HopWeaver:首个基于任意语料库的自动合成框架,质量直逼人工标注
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

HopWeaver是一个创新的框架,它能够从非结构化文本语料库中自动生成多跳问答(MHQA)数据。 MHQA是评估AI高级推理能力的黄金标准,但高质量数据集的稀缺性限制了其发展。HopWeaver通过全自动流程,无需人工标注,即可生成媲美甚至超越人工标注的高质量问题,解决了这一难题。该框架通用性强,支持桥接型和比较型两种主要问题类型,为自然语言处理领域提供了新的数据合成工具。

🥇 HopWeaver是首个基于非结构化语料库进行跨文档多跳问题合成的全自动框架,这意味着它能够从任何领域的非结构化文本中自动生成多跳问题,无需依赖人工标注或特定知识结构。

🌐 HopWeaver具有极强的通用性,适用于任何领域的非结构化文本。这使得它能够应用于广泛的场景,从通用知识到专业领域,如医学和法律,从而解决了特定领域多跳数据匮乏的问题。

🧠 HopWeaver通过构建明确的推理路径和多层筛选机制,确保生成问题的质量。实验证明,HopWeaver生成的问题质量可媲美甚至超越人工标注数据集,并且需要模型进行真正的多跳推理。

🛠️ HopWeaver支持桥接型(实体连接)和比较型(属性分析)两种主要的多跳问题类型,这使得它能够生成多样性的问题,覆盖更广泛的推理场景。

🔥 HopWeaver提供了简明的操作流程,用户只需克隆代码库、安装依赖、准备数据和模型,配置API和路径,即可运行示例合成。这降低了使用门槛,方便研究人员和开发者快速上手。

引言:多跳问答的数据困境

在自然语言处理领域,多跳问答(Multi-hop Question Answering,MHQA)一直被视为评估AI系统(如熟知的RAG)高级推理能力的黄金标准。多跳问题要求模型跨越多个文档,通过逻辑推理找出答案,而不是简单地从单一段落中提取信息。然而,高质量的多跳问答数据集极其稀缺,主要受限于三大因素:

    人工标注成本高昂:专业人员需花费大量时间设计跨文档的推理路径和相应问题特定领域数据匮乏:现有多跳公开数据集主要集中在通用知识领域,专业领域(如医学、法律)的多跳数据几乎空白问题合成缺乏关键的“关联能力”:之前给模型的输入都是一两篇文档,却没有想过采用更高一层(语料库)作为输入,让合成系统自行挖掘海量语料之间的关联来生成问题。现在丢给模型一个语料库,就可以让HopWeaver自动生成数据了!

今天,我为大家介绍一个在数据合成领域的突破——HopWeaver,这是首个能够从任意非结构化文本语料库自动合成跨文档多跳问题的框架,无需人工标注即可生成媲美甚至超越人工标注的高质量问题。

数据质量评估结果的展示:

HopWeaver:开创性的多跳问题自动合成框架

核心特点

HopWeaver在多跳问答研究领域具有多项重大创新:

论文:HopWeavergithub代码:Hopweaver

为什么HopWeaver是数据合成领域的革新突破?

与现有方法的关键区别

传统上,获取多跳问答数据主要有三种途径:

    人工标注:成本高,速度慢,难以扩展到专业领域,依赖于维基百科中超链接关系跳转标注(如HotpotQA等数据集的标注流程)基于结构化知识的合成:依赖于知识图谱,受限于特定领域知识结构简单LLM生成:如给定文档后通过prompt让LLM生成一些提问(现阶段常见的LLM数据合成方式)。缺乏严格的跨文档推理路径保证,质量参差不齐

而HopWeaver从根本上改变了这一现状:

HopWeaver如何工作?简明技术原理

HopWeaver的工作流程可以分为两类,每一类涉及独特的算法设计:

1. 桥接型问题合成

2. 比较型问题合成

3. 多维度评估系统

🔥 实际应用案例:HopWeaver的强大之处

案例1:医学领域桥接型问题

这个案例展示了HopWeaver如何在医学文献中构建高质量的多跳问题:

文档A描述了膈肌脚的解剖结构,特别是左右膈肌脚如何在主动脉前方汇合形成正中弓状韧带。(解剖学知识)

文档B则介绍了正中弓状韧带综合征,这是一种由正中弓状韧带压迫腹腔动脉导致的病症。(病理学知识)

生成的多跳问题:"当膈肌脚在主动脉处汇合形成的解剖结构压迫腹腔动脉和神经节时,会引起什么综合征?"

回答这个问题需要先从文档A确定膈肌脚汇合形成的是"正中弓状韧带",然后在文档B中找到这个结构导致的综合征是"正中弓状韧带综合征"。这是一个需要真正跨文档推理的问题,难度与专业人员设计的问题相当。

案例2:音乐领域比较型问题

生成的多跳问题:"哪位作曲家的出生日期更早:Mihály Mosonyi 还是 Franz Liszt?"

这个问题要求从两个不同的作曲家传记文档中提取出生日期信息(Mosonyi生于1815年,Liszt生于1811年),并进行比较分析,是一个典型的跨文档比较型多跳问题。

🛠 快速上手指南:如何使用HopWeaver

想要体验HopWeaver的强大功能?以下是简明的操作流程(详细流程可参考github代码:Hopweaver):

    克隆代码库并安装依赖:

    git clone https://github.com/Zh1yuShen/HopWeaver.gitcd HopWeaverpip install -r requirements.txt

    准备核心数据与模型:

      下载预处理的Wiki数据集: 从我们上传的数据集链接 Hugging FaceModelScope 下载 wiki18_fulldoc_trimmed_4096.jsonl 文件。下载GTE嵌入模型:Hugging Face 下载 GTE 模型。下载预构建的FAISS索引:Hugging FaceModelScope 下载预构建的 gte_Flat.index 文件 (推荐)。

    配置API和路径:

      复制 config_lib/example_config.yaml 并重命名为例如 config_lib/my_quickstart_config.yaml (或者,您可以直接修改 example_config.yaml,但不推荐用于保留原始示例)。

      LLM API密钥和模型配置:在您的配置文件中(例如 my_quickstart_config.yaml)设置LLM API密钥。系统会依据您在YAML中指定的 generator_model 名称内的关键字,来选择对应的API设置块(如 openai_setting, google_setting)。请确保您选择的 generator_model 与YAML中正确配置的 *_setting 块相对应,并包含 api_keysbase_url

      例如,若设置 generator_model: "gpt-4o",则会使用 openai_setting:

      # OpenAI 设置 (若模型名称暗示为OpenAI,或默认情况下使用)openai_setting:  api_keys:    - "YOUR_OPENAI_API_KEY" # <--- 设置您的OpenAI密钥  base_url: "https://api.openai.com/v1"# 若需要,可定义其他设置(如 google_setting, anthropic_setting),# 确保它们与您选择的 generator_model匹配。例如:# google_setting:#   api_key: "YOUR_GOOGLE_API_KEY"#   base_url: "https://generativelanguage.googleapis.com/v1"# anthropic_setting:#   api_key: "YOUR_ANTHROPIC_API_KEY"#   base_url: "https://api.anthropic.com"# 各组件的模型选择。# 每个模型名称(如果其使用的生成器依赖基于关键字的设置选择逻辑,# 如 openai_generator.py)都决定了哪个 *_setting 配置块(例如 openai_setting, google_setting)# 必须已正确配置API密钥和base_url。generator_model: "gpt-4o"entity_extractor_model: "gpt-4o" # 若使用gpt-4o,请确保openai_setting已配置question_generator_model: "gpt-4o" # 请确保openai_setting已配置polisher_model: "gpt-4o"           # 请确保openai_setting已配置filter_model: "gpt-4o"             # 请确保openai_setting已配置

      数据与模型路径: 更新配置文件中的以下路径,指向您在步骤2中下载的文件和模型文件夹:

      # 全局路径映射model2path:  gte: "您下载的GTE模型文件夹的完整路径" # <--- 修改这里, 例如 /home/user/models/gte_sentence-embedding_multilingual-base# 各嵌入模型的池化方法 (GTE 通常使用 cls, 此处通常无需修改)model2pooling:  gte: "cls"# 检索模型的索引路径method2index:  gte: '您下载的gte_Flat.index文件的完整路径' # <--- 修改这里, 例如 /home/user/data/HopWeaver/index/gte_Flat.index# 不同方法的语料库路径method2corpus:  gte: '您下载的wiki18_fulldoc_trimmed_4096.jsonl文件的完整路径' # <--- 修改这里, 例如 /home/user/data/HopWeaver/datasets/wiki18_fulldoc_trimmed_4096.jsonl

      请确保将 "YOUR_OPENAI_API_KEY""您下载的...的完整路径" 替换为您的实际密钥和本地文件/文件夹的绝对路径。

    运行示例合成:使用您配置好的文件(例如 my_quickstart_config.yaml)运行一个简单的桥接问题合成任务:

    python -m hopweaver.generate_and_evaluate_bridge --config ./config_lib/my_quickstart_config.yaml --count 3 --name quick_test_bridge --retriever standard

    这将会生成3个桥接问题,并将结果保存在 output/quick_test_bridge/ 目录下。

PS:只有检索模型需要使用计算资源(简单的消费级显卡或CPU就可以满足,需要占用内存),LLM调用的部分最简便的方式是先调用api试用各类模型(如免费的google gemini),有批量调用需求的时候可以考虑本地使用vllm部署模型。

完成以上步骤后,您应该能够成功运行HopWeaver。如需了解更多高级功能和自定义选项,请继续阅读后续的详细使用指南。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

HopWeaver 多跳问答 数据合成 自然语言处理
相关文章