Introduction to Skywork Critic Series Models
Skywork-Critic-Llama3.1-70B and Skywork-Critic-Llama3.1-8B, developed by the SkyworkAI Alignment Team, are advanced judge models that excel at pairwise preference evaluation. These models compare and assess input pairs, offering nuanced judgments on their relative quality or suitability. Leveraging their deep understanding of language and context, Skywork-Critic models provide valuable insights for various applications, including data improvement, evaluation, and reward modeling.
Training Details
Skywork-Critic-Llama3.1-70B and Skywork-Critic-Llama3.1-8B are built on Meta Llama-3.1-70B-Instruct and Llama-3.1-8B-Instruct respectively. These models have undergone fine-tuning using a diverse array of high-quality datasets, including:
- Cleaned open-source data: We utilize a high-quality subset of HelpSteer2, OffsetBias, WildGuard (adversarial) and Magpie DPO series(Ultra,Pro (Llama-3.1),Pro,Air). For more details, please refer to our Skywork-Reward-Preference-80K-v0.1 dataset. Additionally, we integrate several open-source, high-quality critic datasets such as Open-Critic-GPT into our training process.
- In-house human annotation data: This includes both pointwise scoring across many dimensions for a single response and pairwise comparisons between two responses. Each dimension incorporates a rationale for the assigned score. Please note that manually labeled data is very expensive to obtain. We only have a few hundred manually labeled data points, all of which are in Chinese, so the ability to perform single rating might not be particularly strong.
- Synthetic critic data: We use a similar appoarch to self-taught. Specifically, we employed two methods to generate inferior responses for a given instruction: 1) Creating a similar instruction and then generating a response for this new instruction. 2) Introducing subtle errors into high-quality responses.
- Critic-related chat data: We incorporate critic-related chat data to maintain the model's conversational capabilities.
The training employs instruction-tuning methodology, focusing on pairwise preference evaluation and general chat tasks. We have conducted a thorough verification process to ensure our training dataset does not contain any test set information from RewardBench, maintaining the integrity of our evaluation results.
RewardBench Leaderboard for Generative Models
We evaluate our models on RewardBench using the official test script.
As of September 2024, Skywork-Critic-Llama3.1-70B ranks first on RewardBench for generative models across all sizes, while Skywork-Critic-Llama3.1-8B tops the list for generative models under 10B parameters. (Note: An asterisk (*) indicates an open-source model.)
| Model | Chat | Chat Hard | Safety | Reasoning | Overall Score |
|---|---|---|---|---|---|
| Skywork-Critic-Llama3.1-70B * | 96.6 | 87.9 | 93.1 | 95.5 | 93.3 |
| Salesforce/SFR-LLaMa-3.1-70B-Judge-r | 96.9 | 84.8 | 91.6 | 97.6 | 92.7 |
| Salesforce/SFR-nemo-12B-Judge-r | 97.2 | 82.2 | 86.5 | 95.1 | 90.3 |
| Skywork-Critic-Llama3.1-8B * | 93.6 | 81.4 | 91.1 | 89.8 | 89.0 |
| Salesforce/SFR-LLaMa-3.1-8B-Judge-r | 95.5 | 77.7 | 86.2 | 95.1 | 88.7 |
| facebook/Self-taught-Llama-3-70B | 96.9 | 84.0 | 91.1 | 82.5 | 88.6 |
| google/gemini-1.5-pro-0514 | 92.3 | 80.6 | 87.9 | 92.0 | 88.2 |
| openai/gpt-4o-2024-08-06 | 96.1 | 76.1 | 88.1 | 86.6 | 86.7 |
| openai/gpt-4-0125-preview | 95.3 | 74.3 | 87.6 | 86.9 | 86.0 |
| openai/gpt-4-turbo-2024-04-09 | 95.3 | 75.4 | 87.6 | 82.7 | 85.2 |
| Anthropic/claude-3-5-sonnet-20240620 | 96.4 | 74.0 | 81.6 | 84.7 | 84.2 |
| meta-llama/Meta-Llama-3.1-70B-Instruct * | 97.2 | 70.2 | 82.8 | 86.0 | 84.0 |
| NCSOFT/Llama-3-OffsetBias-8B * | 92.5 | 80.3 | 86.8 | 76.4 | 84.0 |
Demo Code
Below are two examples of how to use the Skywork Critic model: as a preference data selector, and as a judge to generate scores and rationales for instruction-response pairs.
Skywork Critic Model as a Preference Data Selector
Here is an example showing how to use the Skywork Critic Model as a preference data selector. It distinguishes between chosen and rejected training data for Direct Preference Optimization (DPO) training.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# An Example Case
prompt = "Jane has 12 apples. She gives 4 apples to her friend Mark, then buys 1 more apple, and finally splits all her apples equally among herself and her 2 siblings. How many apples does each person get?"
responseA = "1. Jane starts with 12 apples and gives 4 to Mark. 12 - 4 = 8. Jane now has 8 apples.\n2. Jane buys 1 more apple. 8 + 1 = 9. Jane now has 9 apples.\n3. Jane splits the 9 apples equally among herself and her 2 siblings (3 people in total). 9 รท 3 = 3 apples each. Each person gets 3 apples."
responseB = "1. Jane starts with 12 apples and gives 4 to Mark. 12 - 4 = 8. Jane now has 8 apples.\n2. Jane buys 1 more apple. 8 + 1 = 9. Jane now has 9 apples.\n3. Jane splits the 9 apples equally among her 2 siblings (2 people in total). 9 รท 2 = 4.5 apples each. Each person gets 4 apples."
# feed a natural language prompt to generative model
prompt_template = """Please act as an impartial judge and evaluate the quality of the responses provided by two AI assistants to the user question displayed below. You should choose the assistant that follows the user\'s instructions and answers the user\'s question better.
Your evaluation should consider factors such as the helpfulness, relevance, accuracy, depth, creativity, and level of detail of their responses. Avoid any position biases and ensure that the order in which the responses were presented does not influence your decision. Do not allow the length of the responses to influence your evaluation. Do not favor certain names of the assistants. Be as objective as possible.
Please directly output your final verdict by strictly following this format: "[[A]]" if assistant A is better, "[[B]]" if assistant B is better.
[User Question]
{input}
[The Start of Assistant A's Answer]
{response_a}
[The End of Assistant A's Answer]
[The Start of Assistant B's Answer]
{response_b}
[The End of Assistant B's Answer]
"""
user_message = prompt_template.format(input=prompt, response_a=responseA, response_b=responseB)
conversation = [{"role": "user", "content": user_message}]
model_name = "Skywork/Skywork-Critic-Llama3.1-70B"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
input_ids = tokenizer.apply_chat_template(
conversation,
tokenize=True,
add_generation_prompt=True,
return_tensors="pt").to(model.device)
generation = model.generate(
input_ids=input_ids,
max_new_tokens=2048,
do_sample=False,
pad_token_id=128009,
temperature=0)
completion = tokenizer.decode(
generation[0][len(input_ids[0]):],
skip_special_tokens=True,
clean_up_tokenization_spaces=True)
print(completion)
# Output:
# The generative model should output "[[A]]"
Skywork Critic Model as a Judge
Here is an example showing how to use the Skywork Critic model as a judge. For an instruction-response pair, the Skywork-Critic Model generates a score and rationale based on specific evaluation criteria. Our preliminary research indicates that 8B-parameter models struggle to produce reliable judgments for responses. Consequently, we exclusively utilize the Skywork-Critic-Llama3.1-70B model as our judge.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# An Example Case
prompt = "Jane has 12 apples. She gives 4 apples to her friend Mark, then buys 1 more apple, and finally splits all her apples equally among herself and her 2 siblings. How many apples does each person get?"
# Chosen Response
responseA = "1. Jane starts with 12 apples and gives 4 to Mark. 12 - 4 = 8. Jane now has 8 apples.\n2. Jane buys 1 more apple. 8 + 1 = 9. Jane now has 9 apples.\n3. Jane splits the 9 apples equally among herself and her 2 siblings (3 people in total). 9 รท 3 = 3 apples each. Each person gets 3 apples."
# Rejected Response
responseB = "1. Jane starts with 12 apples and gives 4 to Mark. 12 - 4 = 8. Jane now has 8 apples.\n2. Jane buys 1 more apple. 8 + 1 = 9. Jane now has 9 apples.\n3. Jane splits the 9 apples equally among her 2 siblings (2 people in total). 9 รท 2 = 4.5 apples each. Each person gets 4 apples."
# feed a natural language prompt to generative model
single_rating_prompt_template = """่ฏทๆฎๆผไธไธชไธไธ็ๅฏน่ฏ่ดจ้่ฏไปทไธๅฎถ๏ผ่ฝๅคไปๅคไธช็ปดๅบฆ่ฏๆญๅๅๆ AI ๅฉๆๅฏน็จๆท้ฎ้ข็ๅ็ญ๏ผๅนถ่ฟ่กๆปไฝๆๅ๏ผๅๅผ่ๅดๆฏ 1-5๏ผใไฝ ็่ฏไผฐๅบ่่ๅ็ญ็ๆ็จๆงใ็ธๅ
ณๆงใๅ็กฎๆงใๆทฑๅบฆใๅ้ ๆงใๅฎๅ
จๆง็ญไผๅค็ปดๅบฆ๏ผ่ฏทๆณจๆ๏ผไธๅไปปๅก็ฑปๅ็ๆไปคๅฏน่ฏไผฐๅๆ็ปดๅบฆ็ไพง้ไธไธๆ ท๏ผ้่ฆๆ นๆฎๅ
ทไฝ็้ฎ้ข่ฟ่กๅๆใ
[็จๆท้ฎ้ข]
{input}
[ๅฉๆๅ็ญ็ๅผๅง]
{response_a}
[ๅฉๆๅ็ญ็็ปๆ]
ไฝ ็่ฏฆ็ป่ฏไผฐๅๆปไฝๆๅไธบ: """
# Critic responseA and responseB separately.
user_message = single_rating_prompt_template.format(input=prompt, response_a=responseA)
# user_message = single_rating_prompt_template.format(input=prompt, response_a=responseB)
conversation = [{"role": "user", "content": user_message}]
print(f"conversation => {conversation}")
model_name = "70B"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
input_ids = tokenizer.apply_chat_template(
conversation,
tokenize=True,
add_generation_prompt=True,
return_tensors="pt").to(model.device)
generation = model.generate(
input_ids=input_ids,
max_new_tokens=2048,
do_sample=False,
pad_token_id=128009,
temperature=0)
completion = tokenizer.decode(
generation[0][len(input_ids[0]):],
skip_special_tokens=True,
clean_up_tokenization_spaces=True)
print(completion)
Model-Generated Judgment for Chosen Response A
**่ฏไผฐๅๆ๏ผ**
1. **ๆ็จๆง**๏ผๅ็ญ็ดๆฅ่งฃๅณไบ็จๆท็้ฎ้ข๏ผๆไพไบๆธ
ๆฐ็ๆญฅ้ชคๅ่ฎก็ฎ่ฟ็จ๏ผ้ๅธธๆ็จใ
2. **็ธๅ
ณๆง**๏ผๅ็ญๅฎๅ
จ็ธๅ
ณไบ็จๆท็้ฎ้ข๏ผๆฒกๆๅ็ฆปไธป้ขใ
3. **ๅ็กฎๆง**๏ผ่ฎก็ฎ่ฟ็จๅ็กฎๆ ่ฏฏ๏ผ็ปๆๆญฃ็กฎใ
4. **ๆทฑๅบฆ**๏ผๅ็ญๆไพไบ่ฏฆ็ป็ๆญฅ้ชคๅ่งฃ้๏ผๅธฎๅฉ็จๆท็่งฃ้ฎ้ข็่งฃๅณ่ฟ็จใ
5. **ๅ้ ๆง**๏ผ่ฝ็ถๅ็ญๆฏ็ดๆฅ็่ฎก็ฎ่ฟ็จ๏ผไฝๅจ่งฃ้ๆฏไธๆญฅๆถไฝฟ็จไบ็ฎๅ็่ฏญ่จๅๆ็กฎ็่ฎก็ฎ๏ผไฝฟๅพๅ็ญๆไบ็่งฃใ
6. **ๅฎๅ
จๆง**๏ผๅ็ญไธญๆฒกๆๅ
ๅซไปปไฝๅฏ่ฝๅผ่ตท่ฏฏ่งฃๆๅฑ้ฉ็ไฟกๆฏใ
**ๆปไฝๆๅ๏ผ5**
**ๆป็ป**๏ผ่ฟไธชๅ็ญ้ๅธธๆธ
ๆฐใๅ็กฎไธๆ็จ๏ผๅฎๅ
จๆปก่ถณไบ็จๆท็้ๆฑใๅฎ้่ฟ้ๆญฅ่งฃ้ๅ่ฎก็ฎ๏ผๅธฎๅฉ็จๆท็่งฃ้ฎ้ข็่งฃๅณ่ฟ็จใๆฒกๆๅ็ฐไปปไฝ้่ฆๆน่ฟ็ๅฐๆน๏ผๅ ๆญค็ปไบๆปกๅใ
Model-Generated Judgment for Rejected Response B
**่ฏไผฐๅๆ๏ผ**
1. **ๆ็จๆง**๏ผๅ็ญ็ดๆฅ่งฃๅณไบ็จๆท็้ฎ้ข๏ผๆไพไบๆฏไธชไบบๆ็ปๅพๅฐ็่นๆๆฐ้ใ
2. **็ธๅ
ณๆง**๏ผๅ็ญ็ดงๅฏ็ธๅ
ณไบ็จๆท็้ฎ้ข๏ผๆฒกๆๅ็ฆปไธป้ขใ
3. **ๅ็กฎๆง**๏ผๅ็ญไธญ็่ฎก็ฎ่ฟ็จๆฏๆญฃ็กฎ็๏ผไฝๅจๆๅไธๆญฅไธญๅบ็ฐไบ้่ฏฏใJane ๅ่นๆๆถ๏ผๅบ่ฏฅๆฏๅฐ่นๆๅ็ป่ชๅทฑๅๅฅน็2ไธชๅ
ๅผๅงๅฆน๏ผๆปๅ
ฑ3ไธชไบบ๏ผ่ไธๆฏ2ไธชไบบใ
4. **ๆทฑๅบฆ**๏ผๅ็ญๆไพไบ่ฏฆ็ป็่ฎก็ฎๆญฅ้ชค๏ผๅธฎๅฉ็จๆท็่งฃ้ฎ้ข็่งฃๅณ่ฟ็จใ
5. **ๅ้ ๆง**๏ผๅ็ญๆฏ็ดๆฅ็๏ผๆฒกๆ็นๅซ็ๅ้ ๆง๏ผไฝๅฏนไบ่ฟไธช็ฎๅ็ๆฐๅญฆ้ฎ้ขๆฅ่ฏด๏ผ็ดๆฅ็ๅ็ญๆฏๅ้็ใ
6. **ๅฎๅ
จๆง**๏ผๅ็ญๆฒกๆๅ
ๅซไปปไฝๅฏ่ฝๅผ่ตท่ฏฏ่งฃๆๅฑ้ฉ็ไฟกๆฏใ
**ๆปไฝๆๅ๏ผ** 4
**ๆน่ฟๅปบ่ฎฎ๏ผ**
- ๅจๆๅไธๆญฅไธญ๏ผๆญฃ็กฎๅฐ่ฎก็ฎๆฏไธชไบบๅพๅฐ็่นๆๆฐ้ใJane ๅบ่ฏฅๅฐ 9 ไธช่นๆๅ็ป่ชๅทฑๅๅฅน็ 2 ไธชๅ
ๅผๅงๅฆน๏ผๆปๅ
ฑ 3 ไธชไบบใๅ ๆญค๏ผๆฏไธชไบบๅพๅฐ็่นๆๆฐ้ๅบ่ฏฅๆฏ 9 รท 3 = 3 ไธช่นๆใ
Declaration and License Agreement
Declaration
We hereby declare that the Skywork model should not be used for any activities that pose a threat to national or societal security or engage in unlawful actions. Additionally, we request users not to deploy the Skywork model for internet services without appropriate security reviews and records. We hope that all users will adhere to this principle to ensure that technological advancements occur in a regulated and lawful environment.
We have done our utmost to ensure the compliance of the data used during the model's training process. However, despite our extensive efforts, due to the complexity of the model and data, there may still be unpredictable risks and issues. Therefore, if any problems arise as a result of using the Skywork open-source model, including but not limited to data security issues, public opinion risks, or any risks and problems arising from the model being misled, abused, disseminated, or improperly utilized, we will not assume any responsibility.
License Agreement
The community usage of Skywork model requires Skywork Community License. The Skywork model supports commercial use. If you plan to use the Skywork model or its derivatives for commercial purposes, you must abide by terms and conditions within Skywork Community License.
Contact
If you have any questions or feedback, don't hesitate to reach out to our friendly team at [email protected] or [email protected]. Liang Zhao leads this project.
Citation
If you find our work helpful, please feel free to cite us using the following BibTeX entry:
@misc{skyworkcritic2024,
title={Skywork Critic Model Series},
author={Shiwen, Tu and Liang, Zhao and Liu, Chris Yuhao and Zeng, Liang and Liu, Yang},
year={2024},
month={September},
howpublished={\url{https://huggingface.co/Skywork}},
url={https://huggingface.co/Skywork},
}
- Downloads last month
- 71
Model tree for Skywork/Skywork-Critic-Llama-3.1-70B
Base model
meta-llama/Llama-3.1-70B
๐ค