Pretraitement des données#

Maintenant, regardons comment les donnĂ©es de prĂ©-entraĂźnement et d’affinage sont structurĂ©es et pourquoi.

données de pré-entraßnement:

import jsonlines
import itertools
import pandas as pd
from pprint import pprint

import datasets
from datasets import load_dataset
pretrained_dataset = load_dataset("c4", "en", split="train", streaming=True)

Nous importons l’ensemble de donnĂ©es nommĂ© ‘Common Crawl’ :c4:. C’est l’un des meilleurs disponibles et il est open source. Il contient des millions d’exemples, chacun Ă©tant un objet JSON avec des clĂ©s telles que “id”, “created_at”, “url”, “title”, et il contient toutes sortes de textes. Cet ensemble de donnĂ©es est disponible sur la plateforme de jeux de donnĂ©es de Hugging Face.

Let’s see the first five texts of this dataset, so you can get an idea about what is inside each text:

n = 5
print("Pretrained dataset samples:")
top_n = itertools.islice(pretrained_dataset, n)
for sample in top_n:
    print(sample)

donnĂ©es d’affinage:

filename = "company_docs.jsonl"
instruction_dataset_df = pd.read_json(filename, lines=True)
print(instruction_dataset_df.head())

Comme nous pouvons le voir, il est plus structurĂ© sous forme de questions-rĂ©ponses plutĂŽt que simplement une pile de texte non Ă©tiquetĂ©. Mais les donnĂ©es ici sont sous la forme d’un dataframe avec deux colonnes : “Question” et “RĂ©ponse”. Pour le rendre compatible avec l’affinage, nous devons concatĂ©ner les questions et rĂ©ponses de cette maniĂšre :

examples = instruction_dataset_df.to_dict(orient='records')
text = examples[0]["Question"] + " " + examples[0]["Answer"]
print(text)

Cette approche structurée, souvent appelée modÚle de prompt, est nécessaire car notre modÚle doit comprendre le contexte.

prompt_template_qa = """### Question:\n{question}\n\n### Answer:\n{answer}"""
# Let's apply it to the whole dataset
finetuning_dataset = []
for example in examples:
    text_with_prompt_template_qa = prompt_template_qa.format(question=example["Question"], answer=example["Answer"])
    finetuning_dataset.append({"text": text_with_prompt_template_qa})

Attention

La plupart du temps, le modĂšle de prompt Question/RĂ©ponse donnĂ© n’est pas suffisant ou optimal pour obtenir de bons rĂ©sultats, donc nous sommes tentĂ©s d’utiliser des instructions/input/output ou des modĂšles supplĂ©mentaires.

Format data

Et enfin, pour stocker les donnĂ©es d’affinage, nous optons gĂ©nĂ©ralement pour le format JSONL :

with jsonlines.open('company_docs_processed.jsonl', 'w') as writer:
    writer.write_all(finetuning_dataset)

Note

Nous pouvons également télécharger le jeu de données directement sur Hugging Face pour une utilisation ultérieure.

finetuning_dataset_name = "your_username/company_docs"
finetuning_dataset = load_dataset(finetuning_dataset_name)
print(finetuning_dataset)