TRL documentation
Utilitários de Dados
Utilitários de Dados
is_conversational
trl.is_conversational
< source >( example: dict[str, typing.Any] ) → bool
Verifique se o exemplo está em um formato conversacional.
maybe_convert_to_chatml
trl.maybe_convert_to_chatml
< source >( example: dict[str, list] ) → dict[str, list]
Convert um conjunto de dados conversacional com os campos from e value para o formato ChatML.
Esta função modifica dados conversacionais para alinhá-los ao formato ChatML da OpenAI:
- Substitui a chave
"from"por"role"nos dicionários de mensagens. - Substitui a chave
"value"por"content"nos dicionários de mensagens. - Renomeia
"conversations"para"messages"para consistência com o ChatML.
Exemplo:
>>> from trl import maybe_convert_to_chatml
>>> example = {
... "conversations": [
... {"from": "user", "value": "What color is the sky?"},
... {"from": "assistant", "value": "It is blue."},
... ]
... }
>>> maybe_convert_to_chatml(example)
{'messages': [{'role': 'user', 'content': 'What color is the sky?'},
{'role': 'assistant', 'content': 'It is blue.'}]}extract_prompt
trl.extract_prompt
< source >( example: dict[str, collections.abc.Sequence] ) → dict[str, list]
Parâmetros
- example (
dict[str, list]) — Um dicionário representando uma única entrada de dados no conjunto de dados de preferências. Ele deve conter as chaves"chosen"e"rejected", em que cada valor é conversacional ou padrão (str).
Retorna
dict[str, list]
Um dicionário contendo:
"prompt": O prefixo comum mais longo entre as conclusões “chosen” e “rejected”."chosen": O restante da conclusão “chosen”, com o prompt removido."rejected": O restante da conclusão “rejected”, com o prompt removido.
Extrai o prompt compartilhado de um exemplo de dados de preferência, onde o prompt é implícito tanto nas conclusões escolhidas quanto nas rejeitadas.
A função identifica a sequência comum mais longa (prefixo) de turnos de conversa entre as conclusões “chosen” e “rejected” e extrai isso como o prompt. Em seguida, remove esse prompt das respectivas conclusões “chosen” e “rejected”.
Exemplos:
>>> 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.'}]}Ou, com o método map de Dataset:
>>> 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.'}]}unpair_preference_dataset
trl.unpair_preference_dataset
< source >( dataset: typing.Union[~DatasetType, ~IterableDatasetType]**map_kwargs )
Parâmetros
- dataset (Dataset ou DatasetDict ou IterableDataset ou IterableDatasetDict) —
Conjunto de dados de preferências para desparear. O conjunto de dados deve ter as colunas
"chosen","rejected"e, opcionalmente,"prompt". - **map_kwargs (
dict, opcional) — Argumentos de palavra-chave adicionais para passar ao método map do dataset ao desparear preferências.
Desparear um conjunto de dados de preferências.
A saída contém "prompt", "completion" e "label", além de quaisquer colunas extras, que são duplicadas para cada linha escolhida e rejeitada.
Exemplo:
>>> 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}