TRL documentation

Utilitaires de données

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.18.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Utilitaires de données

is_conversational

trl.is_conversational

< >

( example: dict[str, typing.Any] ) → bool

Paramètres

  • example (dict[str, Any]) — Une entrée de données unique d'un jeu de données. L'exemple peut avoir des clés différentes selon le type de jeu de données.

Retourne

bool

True si les données sont au format conversationnel, False sinon.

Vérifiez si l'exemple est au format conversationnel.

Exemples :

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

>>> example = {"prompt": "The sky is"}
>>> is_conversational(example)
False

maybe_convert_to_chatml

trl.maybe_convert_to_chatml

< >

( example: dict[str, list] ) → dict[str, list]

Paramètres

  • example (dict[str, list]) — Une entrée de données unique contenant une liste de messages.

Retourne

dict[str, list]

Exemple reformulé au format ChatML.

Convertir un jeu de données conversationnel avec les champs from et value au format ChatML.

Cette fonction modifie les données conversationnelles pour les aligner sur le format ChatML d’OpenAI :

  • Remplace la clé "from" par "role" dans les dictionnaires de messages.
  • Remplace la clé "value" par "content" dans les dictionnaires de messages.
  • Renomme "conversations" en "messages" pour assurer la cohérence avec ChatML.

Exemple :

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

< >

( example: dict[str, collections.abc.Sequence] ) → dict[str, list]

Paramètres

  • example (dict[str, list]) — Un dictionnaire représentant une entrée de données unique dans le jeu de données de préférence. Il doit contenir les clés "chosen" et "rejected", où chaque valeur est soit conversationnelle, soit standard (str).

Retourne

dict[str, list]

Un dictionnaire contenant :

  • "prompt" : le préfixe commun le plus long entre les complétions « chosen » et « rejected ».
  • "chosen" : le reste de la complétion « chosen », avec le prompt supprimé.
  • "rejected" : le reste de la complétion « rejected », avec le prompt supprimé.

Extrait le prompt partagé d'un exemple de données de préférence, où le prompt est implicite dans les complétions choisie et rejetée.

La fonction identifie la plus longue séquence commune (préfixe) de tours de conversation entre les complétions « chosen » et « rejected » et l’extrait en tant que prompt. Elle supprime ensuite ce prompt des complétions « chosen » et « rejected » respectives.

Exemples :

>>> 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.'}]}

En revanche, avec la méthode 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

< >

( dataset: typing.Union[~DatasetType, ~IterableDatasetType]**map_kwargs )

Paramètres

  • dataset (Dataset ou DatasetDict ou IterableDataset ou IterableDatasetDict) — Jeu de données de préférence à dépaire. Le jeu de données doit avoir les colonnes "chosen", "rejected" et éventuellement "prompt".
  • **map_kwargs (dict, facultatif) — Arguments de mot-clé supplémentaires à passer à la méthode map du jeu de données lors du dépairement des préférences.

Désappairer un jeu de données de préférences.

La sortie contient "prompt", "completion" et "label", ainsi que les colonnes supplémentaires, qui sont dupliquées pour chaque ligne choisie et rejetée.

Exemple :

>>> 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}
Update on GitHub