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