Подготовьте набор данных для обучения и проверки модели большого языка (LLM).
Введение
Создание набора данных для обучения языковой модели (LLM) включает в себя несколько важных шагов, обеспечивающих ее эффективность в улавливании языковых нюансов. От выбора различных источников текста до предварительной обработки и разделения набора данных — каждый этап требует внимания к деталям. Кроме того, крайне важно сбалансировать размер и сложность набора данных, чтобы оптимизировать процесс обучения модели. Подбирая хорошо структурированный набор данных, вы закладываете прочную основу для обучения LLM, способного понимать и генерировать естественный язык с умением и точностью.
Это краткое руководство поможет вам создать набор классификационных данных для обучения и проверки языковой модели (LLM). Хотя набор данных, созданный здесь, невелик, он закладывает прочную основу для исследований и дальнейшего развития.
Предварительные условия
- Базовые знания: Знакомство с концепциями LLM и методами предварительной обработки данных.
- Источники данных: доступ к чистым, разнообразным и актуальным наборам данных в текстовом формате.
- Наборы инструментов: установите Python, библиотеки, такие как
pandas
,numpy
, и платформы, такие какTensorFlow
илиPyTorch
. - Хранение: достаточные вычислительные ресурсы для обработки больших наборов данных.
Наборы данных для тонкой настройки и обучения LLM
Несколько источников предоставляют отличные наборы данных для точной настройки и обучения ваших LLM. Некоторые из них перечислены ниже: -
1.Kaggle: Kaggle размещает различные наборы данных в разных доменах. Вы можете найти наборы данных для задач НЛП, включая классификацию текста, анализ настроений и многое другое. Посетите: Наборы данных Kaggle
2.Наборы данных Hugging Face: Hugging Face предоставляет большие наборы данных, специально созданные для задач обработки естественного языка. Они также предлагают простую интеграцию со своей библиотекой трансформаторов для обучения моделей. Посетите: Наборы данных обнимающих лиц
3. Поиск набора данных Google. Поиск набора данных Google — это поисковая система, специально разработанная, чтобы помочь исследователям находить онлайн-данные, которые находятся в свободном доступе для использования. Здесь вы можете найти различные наборы данных для задач языкового моделирования. Посетите: Поиск набора данных Google
4. Репозиторий машинного обучения UCI. Хотя репозиторий машинного обучения UCI не ориентирован исключительно на НЛП, он содержит различные наборы данных, которые можно использовать для языкового моделирования и связанных с ним задач. Посетите: репозиторий машинного обучения UCI.
5.GitHub: На GitHub размещено множество репозиториев, содержащих наборы данных для различных целей, включая НЛП. Вы можете искать репозитории, относящиеся к вашей конкретной задаче или архитектуре модели. Посетите: GitHub
6.Common Crawl: Common Crawl — это некоммерческая организация, которая сканирует Интернет и бесплатно предоставляет свои архивы и наборы данных общественности. Это может быть ценным ресурсом для сбора текстовых данных для языкового моделирования. Посещение: Обычное сканирование
7.Наборы данных OpenAI: OpenAI периодически выпускает наборы данных для исследовательских целей. Эти наборы данных часто включают в себя крупномасштабные текстовые корпуса, которые можно использовать для обучения студентов LLM. Посетите: Наборы данных OpenAI.
Код для создания и подготовки набора данных
Код и концепция этой статьи вдохновлены прекрасным курсом Себастьяна Рашки, который дает исчерпывающее представление о построении полноценной языковой модели с нуля.
1.Начнем с установки необходимых пакетов,
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. Приведенные ниже строки кода помогут получить необработанный набор данных и извлечь его.
# 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.Далее мы будем использовать оператор with как для открытия URL-адреса, так и для открытия локального файла.
# 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.Приведенный ниже код гарантирует, что загруженный файл будет правильно переименован в файл «.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}")
После успешного выполнения этого кода мы получим сообщение «Файл загружен и сохранен как sms_spam_collection/SMSSpamCollection.tsv».
5. Используйте библиотеку pandas, чтобы загрузить сохраненный набор данных и продолжить исследование данных.
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())
Этикетка ветчина 4825 спам 747 Имя: count, тип d: int64
6.Давайте определим функцию с помощью pandas для создания сбалансированного набора данных. Первоначально мы подсчитываем количество «спамовых» сообщений, а затем случайным образом выбираем то же число, чтобы сопоставить его с общим количеством случаев спама.
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)
Давайте выполним value_count, чтобы проверить количество спама и ветчины.
print(balanced_df["Label"].value_counts())
Этикетка ветчина 747 спам 747 Имя: count, тип d: int64
Как мы видим, кадр данных теперь сбалансирован.
#change the 'label' data to integer class
balanced_df['Label']= balanced_df['Label'].map({"ham":1, "spam":0})
7.Net мы напишем функцию, которая будет случайным образом разделять набор данных для обучения, тестирования и функции проверки.
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)
Затем сохраните набор данных локально.
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)
Заключение
Построить большую языковую модель (LLM) довольно сложно. Однако с этим постоянно развивающимся ИИ. Появляются новые области и технологии, все становится менее сложным. От закладки основы с помощью надежных алгоритмов до точной настройки гиперпараметров и управления огромными наборами данных — каждый шаг имеет решающее значение в создании модели, способной понимать и генерировать текст, похожий на человеческий.
Одним из важнейших аспектов обучения LLM является создание высококачественных наборов данных. Это включает в себя поиск разнообразных и репрезентативных корпусов текстов, их предварительную обработку для обеспечения согласованности и актуальности и, что, возможно, наиболее важно, подбор сбалансированных наборов данных во избежание систематических ошибок и повышения эффективности модели.
На этом мы подошли к концу статьи и поняли, насколько легко создать набор классификационных данных из файла с разделителями. Мы настоятельно рекомендуем использовать эту статью в качестве основы и создавать более сложные данные.
Надеемся, вам понравилось читать статью!
Ссылки
- Ссылка на код