personalization-reddit
收藏资源简介:
personalization-reddit 是一个从 Reddit 社交论坛收集的问答对数据集,专门用于个性化或偏好学习研究。其核心是通过一种名为“OP感谢回复”的启发式方法自动识别高质量答案:当原始发帖人(OP)在评论区回复表达感谢时,该感谢回复所对应的父评论即被视为 OP 对其自身问题所偏好的答案。数据集按 Reddit 子版块(社区)组织,包含来自 AskHistorians、askscience、DIY、programming(如 golang、rust、learnpython)以及各种兴趣爱好(如 gardening、woodworking、tea、bicycling)等 28 个不同主题社区的数据。每个数据样本包含一个查询(由帖子标题和正文组成)和一个对应的偏好答案(被感谢的评论正文)。此外,每条记录还提供了丰富的元数据,包括用户匿名ID、时间戳、帖子与评论的分数、最高得分评论(可能与偏好答案相同)、以及发帖人和回答者的用户 flair 信息等。数据以 JSONL 格式存储,每个子版块一个文件。该数据集适用于训练或评估能够理解并模拟用户个性化偏好的对话系统、问答系统或推荐系统。
personalization-reddit is a dataset of question-answer pairs collected from the Reddit social forum, specifically designed for personalized or preference learning research. Its core feature is an automated heuristic method called "OP感谢回复" to identify high-quality answers: when the original poster (OP) replies in the comments expressing gratitude, the parent comment corresponding to that grateful reply is considered the answer preferred by the OP for their own question. The dataset is organized by Reddit subreddits (communities), covering 28 different thematic communities such as AskHistorians, askscience, DIY, programming (e.g., golang, rust, learnpython), and various hobbies (e.g., gardening, woodworking, tea, bicycling). Each data sample includes a query (composed of the post title and body) and a corresponding preferred answer (the body of the thanked comment). Additionally, each record provides rich metadata, including anonymized user IDs, timestamps, scores for posts and comments, the highest-scored comment (which may be the same as the preferred answer), and user flair information for both the poster and the responder. The data is stored in JSONL format, with one file per subreddit. This dataset is suitable for training or evaluating dialogue systems, question-answering systems, or recommendation systems that can understand and mimic user personalized preferences.
数据集概述:personalization-reddit
- 数据集名称:personalization-reddit
- 数据集地址:https://huggingface.co/datasets/dipikakhullar/personalization-reddit
- 构建方法:基于 Reddit 数据,利用 OP-thanks-reply 启发式方法挖掘。当原帖作者(OP)回复某个评论并表达感谢时,该评论被视为 OP 对其问题的首选答案,从而形成
(query, preferred_answer)对。
数据来源
- 原始帖子和评论数据来自 arctic_shift 发布的 Pushshift 镜像(https://github.com/ArthurHeitmann/arctic_shift),按每个子版块提取,涵盖截至提取日期的全部历史数据。
- 提取流程见
personalization仓库中的may_15/reddit_pipeline/。 - 原始 NDJSON 文件仅在本地保存,未在此处重新分发。
数据集划分
数据集包含多个子版块(subreddit),每个子版块对应一个独立的 split。共有 30 个 split,每个 split 对应一个 JSONL 文件。完整列表如下:
| Split | 文件名 |
|---|---|
| AskAcademia | extracted/pairs/sub-AskAcademia.jsonl |
| AskBaking | extracted/pairs/sub-AskBaking.jsonl |
| AskCulinary | extracted/pairs/sub-AskCulinary.jsonl |
| AskDocs | extracted/pairs/sub-AskDocs.jsonl |
| AskEngineers | extracted/pairs/sub-AskEngineers.jsonl |
| AskHistorians | extracted/pairs/sub-AskHistorians.jsonl |
| AskStatistics | extracted/pairs/sub-AskStatistics.jsonl |
| Coffee | extracted/pairs/sub-Coffee.jsonl |
| DIY | extracted/pairs/sub-DIY.jsonl |
| German | extracted/pairs/sub-German.jsonl |
| JapanTravel | extracted/pairs/sub-JapanTravel.jsonl |
| LanguageTechnology | extracted/pairs/sub-LanguageTechnology.jsonl |
| LearnJapanese | extracted/pairs/sub-LearnJapanese.jsonl |
| Sewing | extracted/pairs/sub-Sewing.jsonl |
| Shoestring | extracted/pairs/sub-Shoestring.jsonl |
| askphilosophy | extracted/pairs/sub-askphilosophy.jsonl |
| askscience | extracted/pairs/sub-askscience.jsonl |
| bicycling | extracted/pairs/sub-bicycling.jsonl |
| gardening | extracted/pairs/sub-gardening.jsonl |
| golang | extracted/pairs/sub-golang.jsonl |
| homeimprovement | extracted/pairs/sub-homeimprovement.jsonl |
| houseplants | extracted/pairs/sub-houseplants.jsonl |
| languagelearning | extracted/pairs/sub-languagelearning.jsonl |
| learnjavascript | extracted/pairs/sub-learnjavascript.jsonl |
| learnpython | extracted/pairs/sub-learnpython.jsonl |
| rust | extracted/pairs/sub-rust.jsonl |
| solotravel | extracted/pairs/sub-solotravel.jsonl |
| tea | extracted/pairs/sub-tea.jsonl |
| woodworking | extracted/pairs/sub-woodworking.jsonl |
可通过数据查看器中的下拉菜单选择 split,或使用以下代码加载:
python from datasets import load_dataset ds = load_dataset("dipikakhullar/personalization-reddit", split="AskHistorians")
数据文件结构
提取后的数据存放在 extracted/ 目录下,分为两类文件:
- pairs/子版块.jsonl:每行一个
(query, preferred_answer)对。 - stats/子版块.json:每个子版块的漏斗计数(funnel counts)统计。
记录结构(pairs/子版块.jsonl)
每个记录包含以下字段:
| 字段 | 类型 | 描述 |
|---|---|---|
user_id |
str | 匿名化的 OP 用户 ID(基于 Reddit 用户名 HMAC-SHA256 哈希) |
timestamp |
str | 帖子创建时间(ISO 8601 UTC) |
subreddit |
str | 来源子版块名称 |
query |
str | 帖子标题,若存在正文则附加正文 |
preferred_answer |
str | OP 感谢的评论的正文(感谢回复的父级评论) |
top_comment |
str | null |
op_metadata |
object | OP 用户字段(发帖时捕获),详见下表 |
answerer_metadata |
object | 回答者用户字段(评论时捕获),详见下表 |
metadata |
object | 其他元信息,详见下表 |
op_metadata 子对象:
| 字段 | 类型 | 描述 |
|---|---|---|
user_id |
str | 与顶层 user_id 相同 |
author_flair_text |
str | null |
author_flair_css_class |
str | null |
author_flair_type |
str | null |
author_flair_background_color |
str | null |
author_flair_text_color |
str | null |
answerer_metadata 子对象:
| 字段 | 类型 | 描述 |
|---|---|---|
user_id |
str | 与 metadata.answerer_anon_id 相同 |
author_flair_text |
str | null |
author_flair_css_class |
str | null |
metadata 子对象:
| 字段 | 类型 | 描述 |
|---|---|---|
post_id |
str | Reddit 提交 ID |
post_score |
int | 提取时的提交评分 |
answer_comment_id |
str | 首选答案的评论 ID |
answer_score |
int | 提取时首选答案的评分 |
answerer_anon_id |
str | 首选答案作者的匿名 ID |
top_comment_id |
str | null |
top_comment_score |
int | null |
top_comment_anon_id |
str | null |
top_equals_preferred |
bool | 首选答案是否同时也是最高分评论 |
thanks_reply_id |
str | OP 感谢回复的评论 ID(触发配对的信号) |
thanks_reply_score |
int | OP 感谢回复的评分 |
thanks_reply_text |
str | OP 感谢回复的正文 |
thanks_reply_timestamp |
str | 感谢回复创建时间(ISO 8601 UTC) |
启发式方法(OP thanks-reply)
对于每个通过问题过滤器的帖子:
- 查找作者为 OP 且正文匹配“感谢”模式的回复(参见
signals.py::is_thanks_reply)。 - 每个此类回复的父级评论被记录为候选的“首选答案”。
- 将每个候选转换为一个配对,合并帖子元信息、答案正文和感谢回复上下文。
在生成配对前,会过滤掉机器人和已删除/隐藏的作者(参见 signals.py 和 subreddits.py::BOT_AUTHORS)。
匿名化
Reddit 用户名在写入前通过 HMAC-SHA256 和每次运行随机生成的密钥盐进行哈希(参见 anon.py::anon_user_id)。帖子和评论的 ID 及正文文本保持原样——通过搜索帖子 ID 或引用正文,仍可重新识别来自公开 Reddit 帖子的内容。
包含的子版块
数据集包含 30 个子版块,每个子版块的详细统计信息(如 rs_records_scanned、keep_posts、thanks_refs、pairs_emitted 等)可在 extracted/stats/ 目录下查看。





