CuratedThoughts: Data Curation for RL Training Datasets
45
22 commits
1 linked in READMEs
updated Feb 26, 2025
Andreas Hochlehnert¹*, Hardik Bhatnagar¹*, Vishaal Udandarao¹, Ameya Prabhu¹, Matthias Bethge¹
* - shared first authors, ¹ - Tübingen AI Center, University of Tübingen
Since the release of DeepSeek-R1 and its reinforcement learning-based reasoning approach, new datasets such as Open-R1 and OpenThoughts have been introduced. These datasets are used for various post-training approaches like supervised fine-tuning (SFT) and Group Relative Policy Optimization (GRPO).
Group Relative Policy Optimization (GRPO), as implemented in DeepSeek-R1, involves sampling from a group of model outputs and using verifiable rewards to score them. Outputs with higher rewards are then preferred, and the model's policy is updated accordingly. Through this method, the model is guided into generating reasoning traces that assist in solving a given task.
To generate proper reasoning traces, outputs must be both verifiable and unequivocal. Through a series of simple tests, we have demonstrated that these datasets might not be ideal for reinforcement learning-based training. Specifically, we identified the following issues:
Here is an overview of the percentage for Open-R1 and OpenThoughts:
| Subquestions | Proof | Figures | No GT | Total | |
|---|---|---|---|---|---|
| Open-R1 | 1.92% | 1.14% | 2.34% | 0% | 5.40% |
| OpenThoughts-114k | 0.83% | 19.63% | 0.36% | 20.12% | 40.94% |
| OpenThoughts-114k-Math | 1.03% | 24.78% | 0.04% | 0% | 25.85% |
Three, (10 points) Let $a+b+c=0, a^{2}+b^{2}+c^{2}=1$.
(1) Find the value of $ab+bc+ca$;
(2) Find the value of $a^{4}+b^{4}+c^{4}$....
Example 6 The rules of a "level-up game" stipulate: On the $n$-th level, a die must be rolled $n$ times. If the sum of the points obtained from these $n$ rolls is greater than $2^{n}$, the level is considered passed. Questions: (1) What is the maximum number of levels a person can pass in this game? (2) What is the probability that he can pass the first three levels consecutively?
Prove that number $1$ can be represented as a sum of a finite number $n$ of real numbers, ...
Augusto has a wire that is $10 \mathrm{~m}$ long. He makes a cut at a point on the wire, obtaining two pieces. One piece has a length of $x$ and the other has a length of $10-x$ as shown in the figure below:
These are the patterns we used for filtering:
# Match actual subquestions (mid-text questions)
subq_pattern = r"""
(?<=\n) # Ensure it appears after a newline
(?: # Start non-capturing group for subquestion markers
\(\s*[1-9a-zA-Zivx]+\s*\)| # (1), (a), (i), (ii), etc.
(?:Part|Question)\s+[a-zA-Z0-9] # "Part A", "Question 1", etc.
)
\s* # Optional whitespace
[A-Za-z0-9] # Ensure it's followed by actual content
"""
proof_pattern = r"\b(?:prove|proof|show that|demonstrate that|verify that)\b(?!.*multiple choice)"
figure_pattern = r"""
\b(?:
(?:as\s+)?shown\s+in\s+(?:the\s+)?(?:figure|diagram|picture)|
see\s+(?:the\s+)?(?:figure|diagram|picture)|
(?:figure|diagram|picture)\s+(?:below|above|\d+)|
in\s+(?:the\s+)?(?:figure|diagram|picture)
)\b
"""
We also ensured that it is not a multiple-choice question, to reduce false positives
mcq_pattern = r"""
(?:^|\n) # Start of line or newline
\(\s*[A-E]\s*\) # (A), (B), etc.
.*? # Some text
(?:\n|$) # End of line or end of string
"""
blank_mcq_pattern = r"""
\(\s*\)\s* # Blank parentheses for missing MCQ answers
.*? # Some text
\([A-E]\) # Actual MCQ options
"""
We present here a filtered version of open-r1/OpenR1-Math-220k, open-thoughts/OpenThoughts-114k and open-r1/OpenThoughts-114k-math that enhances their suitability for GRPO-based training.
@misc{curatedthoughts,
author = {Hochlehnert, Andreas and Bhatnagar, Hardik and Udandarao, Vishaal and Prabhu, Ameya and Bethge, Matthias},
title = {CuratedThoughts: Data Curation for RL Training Datasets},
url = {https://huggingface.co/datasets/bethgelab/CuratedThoughts},
year = {2025},
}
17 commits
5 commits
CuratedThoughts: Data Curation for RL Training Datasets
45
22 commits
1 linked in READMEs
updated Feb 26, 2025
Andreas Hochlehnert¹*, Hardik Bhatnagar¹*, Vishaal Udandarao¹, Ameya Prabhu¹, Matthias Bethge¹
* - shared first authors, ¹ - Tübingen AI Center, University of Tübingen
Since the release of DeepSeek-R1 and its reinforcement learning-based reasoning approach, new datasets such as Open-R1 and OpenThoughts have been introduced. These datasets are used for various post-training approaches like supervised fine-tuning (SFT) and Group Relative Policy Optimization (GRPO).
Group Relative Policy Optimization (GRPO), as implemented in DeepSeek-R1, involves sampling from a group of model outputs and using verifiable rewards to score them. Outputs with higher rewards are then preferred, and the model's policy is updated accordingly. Through this method, the model is guided into generating reasoning traces that assist in solving a given task.
To generate proper reasoning traces, outputs must be both verifiable and unequivocal. Through a series of simple tests, we have demonstrated that these datasets might not be ideal for reinforcement learning-based training. Specifically, we identified the following issues:
Here is an overview of the percentage for Open-R1 and OpenThoughts:
| Subquestions | Proof | Figures | No GT | Total | |
|---|---|---|---|---|---|
| Open-R1 | 1.92% | 1.14% | 2.34% | 0% | 5.40% |
| OpenThoughts-114k | 0.83% | 19.63% | 0.36% | 20.12% | 40.94% |
| OpenThoughts-114k-Math | 1.03% | 24.78% | 0.04% | 0% | 25.85% |
Three, (10 points) Let $a+b+c=0, a^{2}+b^{2}+c^{2}=1$.
(1) Find the value of $ab+bc+ca$;
(2) Find the value of $a^{4}+b^{4}+c^{4}$....
Example 6 The rules of a "level-up game" stipulate: On the $n$-th level, a die must be rolled $n$ times. If the sum of the points obtained from these $n$ rolls is greater than $2^{n}$, the level is considered passed. Questions: (1) What is the maximum number of levels a person can pass in this game? (2) What is the probability that he can pass the first three levels consecutively?
Prove that number $1$ can be represented as a sum of a finite number $n$ of real numbers, ...
Augusto has a wire that is $10 \mathrm{~m}$ long. He makes a cut at a point on the wire, obtaining two pieces. One piece has a length of $x$ and the other has a length of $10-x$ as shown in the figure below:
These are the patterns we used for filtering:
# Match actual subquestions (mid-text questions)
subq_pattern = r"""
(?<=\n) # Ensure it appears after a newline
(?: # Start non-capturing group for subquestion markers
\(\s*[1-9a-zA-Zivx]+\s*\)| # (1), (a), (i), (ii), etc.
(?:Part|Question)\s+[a-zA-Z0-9] # "Part A", "Question 1", etc.
)
\s* # Optional whitespace
[A-Za-z0-9] # Ensure it's followed by actual content
"""
proof_pattern = r"\b(?:prove|proof|show that|demonstrate that|verify that)\b(?!.*multiple choice)"
figure_pattern = r"""
\b(?:
(?:as\s+)?shown\s+in\s+(?:the\s+)?(?:figure|diagram|picture)|
see\s+(?:the\s+)?(?:figure|diagram|picture)|
(?:figure|diagram|picture)\s+(?:below|above|\d+)|
in\s+(?:the\s+)?(?:figure|diagram|picture)
)\b
"""
We also ensured that it is not a multiple-choice question, to reduce false positives
mcq_pattern = r"""
(?:^|\n) # Start of line or newline
\(\s*[A-E]\s*\) # (A), (B), etc.
.*? # Some text
(?:\n|$) # End of line or end of string
"""
blank_mcq_pattern = r"""
\(\s*\)\s* # Blank parentheses for missing MCQ answers
.*? # Some text
\([A-E]\) # Actual MCQ options
"""
We present here a filtered version of open-r1/OpenR1-Math-220k, open-thoughts/OpenThoughts-114k and open-r1/OpenThoughts-114k-math that enhances their suitability for GRPO-based training.
@misc{curatedthoughts,
author = {Hochlehnert, Andreas and Bhatnagar, Hardik and Udandarao, Vishaal and Prabhu, Ameya and Bethge, Matthias},
title = {CuratedThoughts: Data Curation for RL Training Datasets},
url = {https://huggingface.co/datasets/bethgelab/CuratedThoughts},
year = {2025},
}
17 commits
5 commits