TRL 文档

数据实用程序

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

开始使用

数据实用程序

trl.is_conversational

< >

( example: Dict ) bool

参数

  • example (Dict[str, Any]) — 数据集中的单个数据条目。示例可能具有不同的键,具体取决于数据集格式。

返回值

bool

如果数据采用对话格式,则为True,否则为False

检查示例是否采用对话格式。

示例

>>> example = {"prompt": [{"role": "user", "content": "What color is the sky?"}]}
>>> is_conversational(example)
True
>>> example = {"prompt": "The sky is"})
>>> is_conversational(example)
False

trl.apply_chat_template

< >

( example: Dict tokenizer: PreTrainedTokenizer )

将聊天模板应用于对话示例。

有关更多详细信息,请参阅 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|>'}

trl.extract_prompt

< >

( example: Dict )

从偏好数据示例中提取共享提示,其中提示隐含在选定和拒绝的完成中。

有关更多详细信息,请参阅 maybe_extract_prompt()

trl.maybe_extract_prompt

< >

( example: Dict ) Dict[str, List]

参数

  • example (Dict[str, List]) — 表示偏好数据集中单个数据条目的字典。它必须包含键 "chosen""rejected",其中每个值都是一个列表。

返回值

Dict[str, List]

包含以下内容的字典:

  • "prompt": “chosen” 和 “rejected” 完成之间的最长公共前缀。
  • "chosen": “chosen” 完成的其余部分,已移除提示。
  • "rejected": “rejected” 完成的其余部分,已移除提示。

从偏好数据示例中提取共享提示,其中提示隐含在选定和拒绝的完成中。

如果示例已包含 "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.Datasetmap 方法

>>> 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

参数

  • dataset (DatasetDatasetDict) — 要取消配对的偏好数据集。数据集必须包含列 "chosen""rejected" 和可选的 "prompt"
  • num_proc (Optional[int], 可选, 默认值 None) — 用于处理数据集的进程数量。

返回值

数据集

未配对的偏好数据集。

拆分偏好数据集。

示例

>>> 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 ) DatasetDatasetDict

参数

  • dataset (DatasetDatasetDict) — 要拆分的偏好数据集。数据集必须包含 "chosen""rejected" 和可选的 "prompt" 列。
  • num_proc (Optional[int], 可选, 默认值 None) — 用于处理数据集的进程数量。

返回值

DatasetDatasetDict

如果数据集是配对的,则为拆分后的偏好数据集,否则为原始数据集。

如果偏好数据集是配对的,则拆分该数据集。

示例

>>> 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}
< > 在 GitHub 上更新