Príprava súboru údajov na trénovanie a validáciu veľkého jazykového modelu (LLM)
Zavedenie
Generovanie súboru údajov na trénovanie jazykového modelu (LLM) zahŕňa niekoľko kľúčových krokov na zabezpečenie jeho účinnosti pri zachytávaní nuancií jazyka. Od výberu rôznych zdrojov textu cez predbežné spracovanie až po rozdelenie množiny údajov, každá fáza si vyžaduje pozornosť venovanú detailom. Okrem toho je dôležité vyvážiť veľkosť a zložitosť súboru údajov, aby sa optimalizoval proces učenia modelu. Kurátorstvom dobre štruktúrovaného súboru údajov sa kladie pevný základ pre školenie LLM schopného porozumieť a generovať prirodzený jazyk s odbornosťou a presnosťou.
Táto stručná príručka vás prevedie generovaním klasifikačného súboru údajov na trénovanie a overovanie jazykového modelu (LLM). Aj keď je tu vytvorený súbor údajov malý, ale kladie pevný základ pre prieskum a ďalší vývoj.
Predpoklady
- Základné znalosti: Oboznámenie sa s konceptmi LLM a technikami predbežného spracovania údajov.
- Zdroje údajov: Prístup k čistým, rôznorodým a relevantným súborom údajov v textovom formáte.
- Súpravy nástrojov: Nainštalujte si Python, knižnice ako
pandas,numpya frameworky akoTensorFlowaleboPyTorch. - Úložisko: Dostatočné výpočtové prostriedky na spracovanie veľkých množín údajov.
Súbory údajov na jemné doladenie a trénovanie LLM
Niekoľko zdrojov poskytuje skvelé súbory údajov na doladenie a trénovanie vašich LLM. Niektoré z nich sú uvedené nižšie: -
1.Kaggle: Kaggle hostí rôzne súbory údajov v rôznych doménach. Môžete nájsť množiny údajov pre úlohy NLP, ktoré zahŕňajú klasifikáciu textu, analýzu nálady a ďalšie. Navštívte: Súbory údajov Kaggle
2. Súbory údajov Hugging Face: Hugging Face poskytuje veľké súbory údajov špeciálne upravené pre úlohy spracovania prirodzeného jazyka. Ponúkajú tiež jednoduchú integráciu so svojou knižnicou transformátorov na trénovanie modelov. Navštívte: Súbory údajov o objímaní tváre
3. Vyhľadávanie súborov údajov Google: Google Dataset Search je vyhľadávač špeciálne navrhnutý tak, aby pomohol výskumníkom nájsť online údaje, ktoré sú voľne dostupné na použitie. Tu nájdete rôzne množiny údajov pre úlohy jazykového modelovania. Navštívte: Vyhľadávanie súborov údajov Google
4. Úložisko strojového učenia UCI: Aj keď sa úložisko strojového učenia UCI nezameriava výlučne na NLP, obsahuje rôzne súbory údajov, ktoré možno použiť na jazykové modelovanie a súvisiace úlohy. Navštívte: Úložisko strojového učenia UCI
5.GitHub: GitHub hostí množstvo úložísk, ktoré obsahujú súbory údajov na rôzne účely vrátane NLP. Môžete vyhľadávať úložiská súvisiace s vašou konkrétnou úlohou alebo architektúrou modelu. Navštívte: GitHub
6. Common Crawl: Common Crawl je nezisková organizácia, ktorá prehľadáva web a voľne poskytuje svoje archívy a súbory údajov verejnosti. Môže byť cenným zdrojom na zber textových údajov pre jazykové modelovanie. Navštívte: Bežné prehľadávanie
7. Súbory údajov OpenAI: OpenAI pravidelne vydáva súbory údajov na výskumné účely. Tieto súbory údajov často obsahujú rozsiahle textové korpusy, ktoré možno použiť na trénovanie LLM. Navštívte: Súbory údajov OpenAI
Kód na vytvorenie a prípravu množiny údajov
Kód a koncept tohto článku sú inšpirované vynikajúcim kurzom Sebastiana Rashku, ktorý poskytuje komplexný pohľad na vytvorenie podstatného jazykového modelu od základov.
1. Začneme inštaláciou potrebných balíkov,
import pandas as pd #for data processing, manipulation
import urllib.request #for downloading files from URLs zip file
import zipfile #to deal with zip file
import os #for dealing with the OS
from pathlib import Path #for working with file paths
2. Nižšie uvedené riadky kódu pomôžu získať nespracovaný súbor údajov a extrahovať ho,
# getting the zip file from the url
url = "https://archive.ics.uci.edu/static/public/228/sms+spam+collection.zip"
data_zip_path = "sms_spam_collection.zip"
data_extracted_path = "sms_spam_collection"
data_file_path = Path(data_extracted_path) / "SMSSpamCollection.tsv"
3.Ďalej použijeme príkaz 'with', a to na otvorenie URL aj na otvorenie lokálneho súboru.
# Downloading the file
with urllib.request.urlopen(url) as response:
with open(data_zip_path, "wb") as out_file:
out_file.write(response.read())
Unzipping the file
with zipfile.ZipFile(data_zip_path, "r") as zip_ref:
zip_ref.extractall(data_extracted_path)
4. Nižšie uvedený kód zabezpečí, že stiahnutý súbor bude správne premenovaný na súbor ".tsv"
# Add .tsv file extension
original_file_path = Path(data_extracted_path) / "SMSSpamCollection"
os.rename(original_file_path, data_file_path)
print(f"File downloaded and saved as {data_file_path}")
Po úspešnom vykonaní tohto kódu dostaneme správu ako "Súbor stiahnutý a uložený ako sms_spam_collection/SMSSpamCollection.tsv "
5.Použite knižnicu pandas na načítanie uloženého súboru údajov a ďalšie preskúmanie údajov.
raw_text_df = pd.read_csv(data_file_path, sep="\t", header=None, names=["Label", "Text"])
raw_text_df.head()
print(raw_text_df["Label"].value_counts())
Štítok\nšunka 4825\nspam 747\nNázov: count, dtype: int64
6.Definujme funkciu s pandami na vygenerovanie vyváženého datasetu. Spočiatku spočítame počet spamových správ a potom náhodne vyberieme rovnaký počet tak, aby sa zosúladil s celkovým počtom prípadov spamu.
def create_balanced_dataset(df):
# Count the instances of "spam"
num_spam_inst = raw_text_df[raw_text_df["Label"] == "spam"].shape[0]
# Randomly sample "ham' instances to match the number of 'spam' instances
ham_subset_df = raw_text_df[raw_text_df["Label"] == "ham"].sample(num_spam, random_state=123)
# Combine ham "subset" with "spam"
balanced_df = pd.concat([ham_subset_df, raw_text_df[raw_text_df["Label"] == "spam"]])
return balanced_df
balanced_df = create_balanced_dataset(raw_text_df)
Urobme value_count a skontrolujme počty "spamu" a "šunky"
print(balanced_df["Label"].value_counts())
Štítok\nšunka 747\nspam 747\nNázov: count, dtype: int64
Ako vidíme, dátový rámec je teraz vyvážený.
#change the 'label' data to integer class
balanced_df['Label']= balanced_df['Label'].map({"ham":1, "spam":0})
7.Net napíšeme funkciu, ktorá náhodne rozdelí súbor údajov na trénovanie, testovanie a validáciu funkcie.
def random_split(df, train_frac, valid_frac):
df = df.sample(frac = 1, random_state = 123).reset_index(drop=True)
train_end = int(len(df) * train_frac)
valid_end = train_end + int(len(df) * valid_frac)
train_df = df[:train_end]
valid_df = df[train_end:valid_end]
test_df = df[valid_end:]
return train_df,valid_df,test_df
train_df, valid_df, test_df = random_split(balanced_df, 0.7, 0.1)
Potom uložte množinu údajov lokálne.
train_df.to_csv("train_df.csv", index=None)
valid_df.to_csv("valid_df.csv", index=None)
test_df.to_csv("test_df.csv", index=None)
Záver
Vytvorenie veľkého jazykového modelu (LLM) je pomerne zložité. S touto neustále sa vyvíjajúcou oblasťou umelej inteligencie a novými technológiami sa však veci stávajú menej komplikovanými. Od položenia základov pomocou robustných algoritmov až po dolaďovanie hyperparametrov a správu rozsiahlych súborov údajov, každý krok je rozhodujúci pri vytváraní modelu schopného porozumieť a generovať ľudský text.
Jedným z kľúčových aspektov školenia LLM je vytváranie vysokokvalitných súborov údajov. To zahŕňa získavanie rôznorodých a reprezentatívnych textových korpusov, ich predbežné spracovanie s cieľom zabezpečiť konzistentnosť a relevantnosť a, čo je možno najdôležitejšie, spravovanie vyvážených súborov údajov, aby sa predišlo zaujatostiam a zvýšil výkon modelu.
Týmto sme sa dostali na koniec článku a pochopili sme, aké jednoduché je vytvoriť klasifikačný súbor údajov z oddeleného súboru. Dôrazne odporúčame použiť tento článok ako základ a vytvoriť zložitejšie údaje.
Dúfame, že sa vám článok páčil!
Referencie
- Odkaz na kód
