conversational-datasets
conversational-datasets 是一个专为对话式人工智能研发打造的大型开源数据集集合。它旨在解决高质量、大规模对话训练数据稀缺的难题,帮助开发者构建更精准的自动回复与问答模型。
该工具主要面向 AI 研究人员和机器学习工程师,提供了包括 Reddit 论坛线程、多语言电影字幕(OpenSubtitles)以及亚马逊商品问答(Amazon QA)在内的海量数据源。经过严格清洗与过滤,这些数据集包含了数亿条结构化的“上下文 - 回复”样本,非常适合用于模型的预训练及特定领域任务的微调。
其独特的技术亮点在于“可复现性”。conversational-datasets 不直接提供处理好的静态数据文件,而是交付标准化的生成脚本。用户可以在本地运行脚本,自定义预处理和过滤逻辑,并自动生成确定性的训练集与测试集划分。这种机制不仅确保了不同研究之间的评估结果公平可比,也让使用者能完全掌控数据质量。无论是希望探索大模型潜力的学者,还是需要构建稳健对话系统的开发团队,都能从中获得强有力的数据支持。
使用场景
某初创团队正在开发一款面向电商领域的智能客服机器人,急需提升模型在复杂对话语境下的回复准确率。
没有 conversational-datasets 时
- 数据获取困难且分散:工程师需手动爬取并清洗 Reddit、字幕组及亚马逊问答等多源数据,耗时数周仍难以凑齐高质量语料。
- 实验结果不可复现:由于缺乏统一的预处理标准和确定的训练/测试集划分,团队成员间模型效果对比困难,论文基准难以对齐。
- 领域适配成本高:直接使用原始粗数据训练,模型充斥着无关噪音(如被删除的评论或过短回复),导致迁移到电商场景时微调效果不佳。
- 格式转换繁琐:不同来源的数据格式各异,每次训练前都需编写大量脚本转换为 TensorFlow Record 或 JSON 标准格式,极易出错。
使用 conversational-datasets 后
- 一键生成海量标准数据:直接运行脚本即可自动生成包含数亿条对话的 Reddit、OpenSubtitles 或 Amazon QA 数据集,将数据准备周期从数周缩短至数小时。
- 确保评估严谨可复现:工具内置确定性的训练/测试集划分逻辑,团队可基于统一基准快速迭代模型,轻松复现业界 SOTA 结果。
- 预训练效果显著提升:利用经过严格过滤(剔除无效、过短内容)的大规模通用对话数据进行预训练,模型再微调至电商场景时,意图理解能力大幅增强。
- 无缝对接主流框架:生成的数据天然符合标准的“上下文 - 回复”格式(JSON 或 TF Record),可直接投入 TensorFlow 等框架进行训练,免去格式清洗烦恼。
conversational-datasets 通过提供可复现的大规模对话数据构建方案,让研发团队能从繁琐的数据工程中解放出来,专注于核心模型架构的创新与落地。
运行环境要求
- 未说明 (基于 Google Cloud Dataflow,通常支持 Linux)
未说明
未说明 (取决于 Dataflow 作业规模,需足够的 n1-standard-1 机器配额)

快速开始
对话语料库
用于对话响应选择的大型语料库集合。
本仓库提供了创建可复现对话响应模型训练与评估数据集的工具,其中包括:
- Reddit - 37亿条评论,以线程式对话结构组织
- OpenSubtitles - 超过4亿行电影和电视字幕文本(提供英语及其他语言版本)
- Amazon QA - 超过360万条亚马逊商品相关的问答对
机器学习方法在处理此类大规模数据集时效果最佳。在 PolyAI,我们首先在海量对话数据上预训练对话响应模型,随后将这些模型适配到对话式 AI 的特定领域任务中。这种先在大规模数据上预训练、再进行领域适配的方法,在图像处理领域早已流行,如今也在自然语言处理社区迅速兴起。
我们并未直接提供原始处理后的数据,而是给出了用于自行生成数据的脚本和说明。这样您可以查看并可能调整预处理和过滤步骤。这些说明定义了标准的数据集,并采用确定性的训练/测试集划分方式,可用于在研究论文中进行可复现的评估。
数据集
每个数据集都有自己的目录,其中包含数据流脚本、运行说明以及单元测试。
| | | 训练集规模 | 测试集规模 | |-------------------------------- |------------------------------------- |---------------- |--------------- | | Reddit | 2015 - 2019 | 6.54亿 | 7,200万 | | OpenSubtitles | 英语(另有其他语言版本) | 2.86亿 | 3,300万 | | Amazon QA | - | 300万 | 30万 |
请注意,这些是经过过滤和其他处理后的数据集规模。例如,Reddit 数据集基于原始的37亿条评论数据库,但最终仅包含7.26亿个样本,因为脚本会过滤掉过长或过短的评论、无意义的评论(如“[已删除]”)以及没有回复的评论。
基准测试
各数据集的基准测试结果可在 BENCHMARKS.md 中找到。
对话语料库格式
本仓库包含用于创建标准格式数据集的脚本——任何符合此格式的数据集在其他地方都简称为 对话数据集。
数据集可以存储为:
- 每行一个样本的 JSON 文本文件
- 或者作为 TensorFlow 记录文件,其中包含序列化的 tensorflow example 协议缓冲区。
训练集和测试集分别存储为独立的集合。样本会在各个文件之间随机打乱顺序(不一定可复现)。然而,训练/测试集的划分始终是确定性的,因此无论何时生成数据集,都会得到相同的划分。
每个样本包含一段对话上下文及其对应的回复。例如:
{
'context/1': "你好,最近怎么样?",
'context/0': "我很好。你呢?",
'context': "太好了。你觉得今天的天气如何?",
'response': "感觉不像是二月份的天气。"
}
具体而言,每个样本包含若干字符串特征:
context特征:对话上下文中最新的文本response特征:直接回应context的文本- 若干 额外上下文特征,如
context/0、context/1等,按时间倒序排列。这样命名是为了让context/i总是指第i个最近的额外上下文,从而无需填充,也便于混合不同长度上下文的数据集。
根据数据集的不同,每个样本还可能包含一些额外的特征。例如,在 Reddit 数据集中,上下文和回复的作者信息会通过附加特征来标识。
阅读对话数据集
JSON 格式
在 TensorFlow 之外使用时,JSON 格式可能更为方便。要获取 JSON 格式的数据集,可以在数据集的 create_data.py 脚本中使用 --dataset_format JSON 参数。每行将包含一个单独的 JSON 对象。
以下是读取 JSON 格式数据集的一些示例 Python 代码。
import json
from glob import glob
for file_name in glob("dataset/train/*.json"):
for line in open(file_name):
example = json.loads(line)
# 现在可以访问:
# example['context']
# example['response']
# example['context/0'] 等。
TensorFlow 格式
tools/tfrutil.py 和 baselines/run_baseline.py 脚本展示了如何使用 TensorFlow 库中的函数,在 Python 中读取 TensorFlow 示例格式的对话数据集。
您可以使用 tools/tfrutil.py 来计算 TensorFlow 记录文件中的样本数量:
$ python tools/tfrutil.py size data/reddit-test
726158
它也可以用来以可读格式显示这些样本:
$ python tools/tfrutil.py pp data/reddit-test
Example 0
--------
[Context]:
飞机?那是什么?
[Response]:
《空前绝后》!这部电影是对飞行题材电影的精彩恶搞,听起来很糟糕,但实际上满分10分!
Extra Contexts:
[context/2]:
不幸的是,他们晚餐都吃了鱼。
[context/1]:
这是某种梗吗?我不明白。
[context/0]:
《空前绝后》。放下手头的一切,现在就看吧!
Other features:
[context_author]:
Doctor_Insano_MD
[response_author]:
ThegreatandpowerfulR
[subreddit]:
todayilearned
[thread_id]:
41ar0l
--------
...
以下是将对话数据集读入 TensorFlow 图形的一些示例 TensorFlow 代码:
num_extra_contexts = 10
batch_size = 100
pattern = "gs://your-bucket/dataset/train-*.tfrecord"
if not tf.gfile.Glob(pattern):
raise ValueError("No files matched pattern " + pattern)
dataset = tf.data.Dataset.list_files(pattern)
dataset = dataset.apply(
tf.contrib.data.parallel_interleave(
lambda file: tf.data.TFRecordDataset(file),
cycle_length=8))
dataset = dataset.apply(
tf.data.experimental.shuffle_and_repeat(
buffer_size=8 * batch_size))
dataset = dataset.batch(batch_size)
def _parse_function(serialized_examples):
parse_spec = {
"context": tf.FixedLenFeature([], tf.string),
"response": tf.FixedLenFeature([], tf.string)
}
parse_spec.update({
"context/{}".format(i): tf.FixedLenFeature(
[], tf.string, default_value="")
for i in range(num_extra_contexts)
})
return tf.parse_example(serialized_examples, parse_spec)
dataset = dataset.map(_parse_function, num_parallel_calls=8)
dataset = dataset.prefetch(8)
iterator = dataset.make_one_shot_iterator()
tensor_dict = iterator.get_next()
# 现在 TensorFlow 图形可以访问
# tensor_dict["context"]、tensor_dict["response"] 等,
# 它们是以字符串特征(Unicode 字节)形式呈现的批次数据。
入门指南
对话数据集是通过 Apache Beam 流水线 脚本创建的,并在 Google Dataflow 上运行。这会将数据处理流水线并行化到许多工作机器上。Apache Beam 需要 Python 2.7,因此您需要设置一个 Python 2.7 的虚拟环境:
python2.7 -m virtualenv venv
. venv/bin/activate
pip install -r requirements.txt
Dataflow 脚本会将对话数据集写入 Google 云存储,因此您需要先 创建一个存储桶 来保存数据集。
Dataflow 会在多个 Compute Engine 实例上运行工作节点,所以请确保您有足够的 n1-standard-1 机器配额(配额信息)。各个数据集的 README 文件会说明需要多少个工作节点,以及每个 Dataflow 作业大概需要多长时间。
最后,您还需要通过创建具有 Dataflow 和 Cloud Storage 访问权限的服务账号来 设置身份验证,并设置 GOOGLE_APPLICATION_CREDENTIALS:
export GOOGLE_APPLICATION_CREDENTIALS={{json 文件密钥位置}}
这样应该足以按照每个数据集的创建说明进行操作。
评估
当然,您可以以任何您喜欢的方式评估您的模型。不过,在发表结果时,我们鼓励您同时报告“1/100 排名准确率”,这一指标正逐渐成为研究界的通用标准。
“1/100 排名准确率”是一种 Recall@k 指标。一般来说,Recall@k 是指针对给定的对话上下文,提供 N 个回复,其中只有一个回复是相关的。该指标用于判断相关回复是否出现在前 k 名候选回复中。当 k=1 且 N=100 时,就得到了“1/100”指标。也就是说,对于每一个查询,我们会判断正确的回复是否位于 100 个候选回复中的第一名。最终得分则是所有查询的平均值。
“1/100”指标是通过随机抽取 100 个样本批次来计算的,批次中的其他回复则被用作随机的负样本。这种方法能够高效地对大量样本进行分批计算。尽管无法保证这些随机负样本一定是真正的“负样本”,但“1/100”指标仍然提供了一个有用的评估信号,与下游任务有较好的相关性。
以下 TensorFlow 代码展示了如何为一种点积风格的编码器模型计算该指标,其中每个上下文和回复的得分都是对应向量之间的点积:
# 使用 TensorFlow 操作将上下文和回复编码为向量。
# 下面两者都是 [100, encoding_size] 的矩阵。
context_encodings = _encode_contexts(tensor_dict['context'])
response_encodings = _encode_responses(tensor_dict['response'])
scores = tf.matmul(
context_encodings, response_encodings,
transpose_b=True) # 一个 [100, 100] 的矩阵。
batch_size = tf.shape(context_encodings)[0]
accuracy_1_of_100 = tf.metrics.accuracy(
labels=tf.range(batch_size),
predictions=tf.argmax(scores, 1)
)
另请参阅 baselines,其中包含计算 1-of-100 指标的示例代码。
许多研究已在基于检索的对话系统中使用了 Recall@k,其中包括以下论文:
Ubuntu 对话语料库:用于非结构化多轮对话系统研究的大规模数据集,Lowe 等人,SIGDIAL 2015。
面向会话式对话系统的神经话语排序模型,Inaba 和 Takahashi,SIGDIAL 2016。
非任务导向型会话系统的策略与政策学习,Yu 等人,SIGDIAL 2016。
利用 Ubuntu 对话语料库训练端到端对话系统,Lowe 等人,Dialogue and Discourse 2017。
序列匹配网络:基于检索的聊天机器人中多轮响应选择的新架构,Wu 等人,ACL 2017。
通过融入领域知识改进多轮对话系统中的响应选择,Chaudhuri 等人,CoNLL 2018。
针对神经在线聊天响应选择的数据增强,Du 和 Black,SCAI 2018。
用于神经会话模型在线响应选择的定制非线性赌盘算法,Liu 等人,AAAI 2018。
DSTC7 任务 1:基于直觉的端到端响应选择,Gunasekara 等人,2019 年。
基于检索的聊天机器人中多轮响应选择的多表示融合网络,Tao 等人,WSDM 2019。
具有深度注意力匹配网络的聊天机器人多轮响应选择,Zhou 等人,ACL 2018。
以下论文特别使用了 1-of-100 排名准确率:
会话上下文线索:个性化和历史记录在响应排名中的作用,Al-Rfou 等人,arXiv 预印本 2016 年。
智能回复中高效的自然语言回复建议,Henderson 等人,arXiv 预印本 2017 年。
用户对用户交易平台对话中的问答选择,Kumar 等人,IWSDS 2018。
通用句子编码器,Cer 等人,arXiv 预印本 2018 年。
从会话中学习语义文本相似度,Yang 等人,2018 年 NLP 表征学习研讨会。
引用
在您的工作中使用这些数据集时,请引用我们的论文《会话数据集仓库》(A Repository of Conversational Datasets):
@inproceedings{Henderson2019,
author = {Matthew Henderson and Pawe{\l} Budzianowski and I{\~{n}}igo Casanueva and Sam Coope and Daniela Gerz and Girish Kumar and Nikola Mrk{\v{s}}i\'c and Georgios Spithourakis and Pei-Hao Su and Ivan Vulic and Tsung-Hsien Wen},
title = {A Repository of Conversational Datasets},
year = {2019},
month = {jul},
note = {数据可在 github.com/PolyAI-LDN/conversational-datasets 上获取},
url = {https://arxiv.org/abs/1904.06472},
booktitle = {会话式 AI 的 NLP 工作坊论文集},
}
贡献
我们非常欢迎以拉取请求形式的贡献。
每个拉取请求都会在 CircleCI 中进行测试——首先使用 flake8 进行代码风格检查,然后运行单元测试。我们尤其感兴趣的是:
- 新的数据集
- 对脚本的调整,使其在您的环境中更好地运行(例如其他 Apache Beam 运行器、其他云存储解决方案、其他示例格式)
- 您的方法在基准测试中的结果 基准测试页面。
- 新基线的代码以及现有基线的改进
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
