数据实用程序
trl.is_conversational
< 源代码 >( example: Dict ) → bool
检查示例是否采用对话格式。
将聊天模板应用于对话示例。
有关更多详细信息,请参阅 maybe_apply_chat_template()。
trl.maybe_apply_chat_template
< 源代码 >( example: Dict tokenizer: PreTrainedTokenizer ) → Dict[str, str]
参数
- example (
Dict[str, List[Dict[str, str]]
) — 表示对话数据集单个数据条目。每个数据条目可以根据数据集格式具有不同的键。支持的数据集格式包括:- 语言建模数据集:
"messages"
。 - 仅提示数据集:
"prompt"
。 - 提示-完成数据集:
"prompt"
和"completion"
。 - 偏好数据集:
"prompt"
、"chosen"
和"rejected"
。 - 具有隐式提示的偏好数据集:
"chosen"
和"rejected"
。 - 非配对偏好数据集:
"prompt"
、"completion"
和"label"
。
对于键
"messages"
、"prompt"
、"chosen"
、"rejected"
和"completion"
,其值是消息列表,其中每条消息都是一个具有键"role"
和"content"
的字典。 - 语言建模数据集:
- tokenizer (
PreTrainedTokenizer
) — 用于应用聊天模板的标记器。
返回值
Dict[str, str]
应用聊天模板后格式化的示例。
如果示例采用对话格式,则向其应用聊天模板。
注意:此函数不会更改键,除了语言建模数据集,其中 "messages"
被替换为 "text"
。
示例
>>> from transformers import AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-3-mini-128k-instruct")
>>> example = {
... "prompt": [{"role": "user", "content": "What color is the sky?"}],
... "completion": [{"role": "assistant", "content": "It is blue."}]
... }
>>> apply_chat_template(example, tokenizer)
{'prompt': '<|user|>\nWhat color is the sky?<|end|>\n<|assistant|>\n', 'completion': 'It is blue.<|end|>\n<|endoftext|>'}
从偏好数据示例中提取共享提示,其中提示隐含在选定和拒绝的完成中。
有关更多详细信息,请参阅 maybe_extract_prompt()。
trl.maybe_extract_prompt
< 源代码 >( example: Dict ) → Dict[str, List]
从偏好数据示例中提取共享提示,其中提示隐含在选定和拒绝的完成中。
如果示例已包含 "prompt"
键,则该函数按原样返回示例。否则,该函数
识别 “chosen” 和 “rejected” 完成之间的对话轮次的最长公共序列(前缀),并将其提取为提示。然后,它从相应的 “chosen” 和 “rejected” 完成中移除此提示。
示例
>>> example = {
... "chosen": [
... {"role": "user", "content": "What color is the sky?"},
... {"role": "assistant", "content": "It is blue."}
... ],
... "rejected": [
... {"role": "user", "content": "What color is the sky?"},
... {"role": "assistant", "content": "It is green."}
... ]
... }
>>> extract_prompt(example)
{'prompt': [{'role': 'user', 'content': 'What color is the sky?'}],
'chosen': [{'role': 'assistant', 'content': 'It is blue.'}],
'rejected': [{'role': 'assistant', 'content': 'It is green.'}]}
或者,使用 datasets.Dataset
的 map
方法
>>> from trl import extract_prompt
>>> from datasets import Dataset
>>> dataset_dict = {
... "chosen": [
... [
... {"role": "user", "content": "What color is the sky?"},
... {"role": "assistant", "content": "It is blue."},
... ],
... [
... {"role": "user", "content": "Where is the sun?"},
... {"role": "assistant", "content": "In the sky."},
... ],
... ],
... "rejected": [
... [
... {"role": "user", "content": "What color is the sky?"},
... {"role": "assistant", "content": "It is green."},
... ],
... [
... {"role": "user", "content": "Where is the sun?"},
... {"role": "assistant", "content": "In the sea."},
... ],
... ],
... }
>>> dataset = Dataset.from_dict(dataset_dict)
>>> dataset = dataset.map(extract_prompt)
>>> dataset[0]
{'prompt': [{'role': 'user', 'content': 'What color is the sky?'}],
'chosen': [{'role': 'assistant', 'content': 'It is blue.'}],
'rejected': [{'role': 'assistant', 'content': 'It is green.'}]}
trl.unpair_preference_dataset
< 源代码 >( dataset: DatasetType num_proc: Optional = None ) → Dataset
拆分偏好数据集。
示例
>>> from datasets import Dataset
>>> dataset_dict = {
... "prompt": ["The sky is", "The sun is"]
... "chosen": [" blue.", "in the sky."],
... "rejected": [" green.", " in the sea."]
... }
>>> dataset = Dataset.from_dict(dataset_dict)
>>> dataset = unpair_preference_dataset(dataset)
>>> dataset
Dataset({
features: ['prompt', 'completion', 'label'],
num_rows: 4
})
>>> dataset[0]
{'prompt': 'The sky is', 'completion': ' blue.', 'label': True}
trl.maybe_unpair_preference_dataset
< 源代码 >( dataset: DatasetType num_proc: Optional = None ) → Dataset
或 DatasetDict
如果偏好数据集是配对的,则拆分该数据集。
示例
>>> from datasets import Dataset
>>> dataset_dict = {
... "prompt": ["The sky is", "The sun is"]
... "chosen": [" blue.", "in the sky."],
... "rejected": [" green.", " in the sea."]
... }
>>> dataset = Dataset.from_dict(dataset_dict)
>>> dataset = unpair_preference_dataset(dataset)
>>> dataset
Dataset({
features: ['prompt', 'completion', 'label'],
num_rows: 4
})
>>> dataset[0]
{'prompt': 'The sky is', 'completion': ' blue.', 'label': True}