准备用于训练和验证大型语言模型 (LLM) 的数据集
介绍
生成用于训练语言模型 (LLM) 的数据集涉及几个关键步骤,以确保其捕获语言细微差别的有效性。从选择不同的文本源到预处理再到分割数据集,每个阶段都需要注意细节。此外,平衡数据集的大小和复杂性对于优化模型的学习过程至关重要。通过整理结构良好的数据集,可以为培训能够熟练准确地理解和生成自然语言的法学硕士奠定坚实的基础。
本简短指南将引导您生成分类数据集以训练和验证语言模型 (LLM)。虽然这里创建的数据集很小,但它为探索和进一步开发奠定了坚实的基础。
先决条件
- 基础知识:熟悉LLM概念和数据预处理技术。
- 数据源:以文本格式访问干净、多样化且相关的数据集。
- 工具包:安装 Python、
pandas
、numpy
等库以及TensorFlow
或PyTorch
等框架代码>. - 存储:足够的计算资源来处理大型数据集。
用于微调和培训法学硕士的数据集
有几个来源提供了很好的数据集,可用于微调和培训法学硕士。下面列出了其中一些:-
1.Kaggle:Kaggle 托管跨不同领域的各种数据集。您可以找到 NLP 任务的数据集,其中包括文本分类、情感分析等。访问:Kaggle 数据集
2.Hugging Face 数据集:Hugging Face 提供了专门为自然语言处理任务而设计的大型数据集。他们还提供与 Transformer 库的轻松集成以进行模型训练。访问:拥抱人脸数据集
3.Google数据集搜索:Google数据集搜索是一个专门设计用于帮助研究人员查找可免费使用的在线数据的搜索引擎。您可以在此处找到用于语言建模任务的各种数据集。访问:Google 数据集搜索
4.UCI机器学习存储库:虽然UCI机器学习存储库不仅仅专注于NLP,但它包含可用于语言建模和相关任务的各种数据集。访问:UCI 机器学习存储库
5.GitHub:GitHub 托管着众多存储库,其中包含用于不同目的的数据集,包括 NLP。您可以搜索与您的特定任务或模型架构相关的存储库。访问:GitHub
6.Common Crawl:Common Crawl是一个非营利组织,负责抓取网络并向公众免费提供其档案和数据集。它可以成为收集用于语言建模的文本数据的宝贵资源。访问:普通爬行
7.OpenAI数据集:OpenAI定期发布用于研究目的的数据集。这些数据集通常包括可用于训练法学硕士的大规模文本语料库。访问:OpenAI 数据集
创建和准备数据集的代码
本文的代码和概念的灵感来自 Sebastian Rashka 的优秀课程,该课程提供了从头开始构建实质性语言模型的全面见解。
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 名称:计数,数据类型: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 名称:计数,数据类型: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)相当复杂。然而,随着人工智能不断发展。领域和新技术的出现,事情变得不再那么复杂。从使用强大的算法奠定基础,到微调超参数和管理大量数据集,每一步对于创建能够理解和生成类人文本的模型都至关重要。
培训法学硕士的一个重要方面是创建高质量的数据集。这涉及采购多样化且有代表性的文本语料库,对其进行预处理以确保一致性和相关性,也许最重要的是,管理平衡的数据集以避免偏差并提高模型性能。
至此,我们到达了本文的结尾,并且我们了解了从分隔文件创建分类数据集是多么容易。我们强烈建议使用本文作为基础并创建更复杂的数据。
我们希望您喜欢阅读这篇文章!
参考
- 代码参考