为 Llama 准备数据

良好的数据准备是训练任何高性能语言模型(如 Llama)的关键。数据准备包括收集和清理数据、为 Llama 准备数据以及使用不同的数据预处理器。NLTK、spaCy 和 Hugging Face 标记器等工具结合起来,帮助为 Llama 的训练管道中的应用准备好数据。一旦您了解了这些数据预处理的阶段,您就一定能提高 Llama 模型的性能。

数据准备被认为是机器学习模型中最关键的阶段之一,尤其是在处理大型语言模型时。本章讨论如何准备用于 Llama 的数据,并涵盖以下主题。

  • 数据收集和清理
  • 为 Llama 格式化数据
  • 数据预处理期间使用的工具

所有这些过程确保数据得到良好清理和适当结构化,以优化用于管道训练 Llama。

收集和清理数据

数据收集

与 Llama 等训练模型相关的最关键点是数据的高质量多样性。换句话说,运行语言模型时用于训练的文本数据的主要来源是来自其他类型文本的残片,包括书籍、文章、博客条目、社交媒体内容、论坛和其他公开可用的文本数据。

使用 Python 抓取网站的文本数据

import 请求
from bs4 import BeautifulSoup
# 从中获取数据的 URL
url = 'https://www.tutorialspoint.com/Llama/index.htm'
response = 请求.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 现在,提取文本数据
text_data = soup.get_text()
# 现在,将数据保存到文件中
with open('raw_data.txt', 'w', encoding='utf-8') as file:
    file.write(text_data)

输出

运行脚本时,它会将抓取的文本保存到名为 raw_data.txt 的文件中,然后将原始文本清理为数据。

数据清理

原始数据充满噪音,包括 HTML 标签、特殊字符以及原始数据中出现的不相关数据,因此必须先清理原始数据,然后才能将其呈现给 Llama。数据清理可能包括:

  • 删除 HTML 标签
  • 特殊字符
  • 区分大小写
  • 标记化
  • 删除停用词

示例:使用 Python 预处理文本数据

import re
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

import nltk
nltk.download('punkt')
nltk.download('stopwords')

# 加载原始数据
with open('/raw_data.txt', 'r', encoding='utf-8') as file:
    text_data = file.read()

# 清理 HTML 标签
clean_data = re.sub(r'<.*?>', '', text_data)

# 清理特殊字符
clean_data = re.sub(r'[^A-Za-z0-9\\\s]', '', clean_data)

# 将文本拆分为标记
tokens = word_tokenize(clean_data)

stop_words = set(stopwords.words('english'))

# 从标记中过滤掉停用词
filtered_tokens = [w for w in tokens if not w.lower() in stop_words]

# 保存清理后的数据
with open('cleaned_data.txt', 'w', encoding='utf-8') as file:
    file.write(' '.join(filtered_tokens))

print("Data cleaned and saved to cleaned_data.txt")

输出

Data cleaned and saved to cleaned_data.txt

已清理的数据将保存到 cleaned_data.txt。该文件现在包含标记化和已清理的数据,可供 Llama 进一步格式化和预处理。

预处理数据以使用 Llama

Llama 需要将数据作为输入进行训练;它是预先构造的。数据应该被标记化,也可以根据与训练结合使用的架构转换为 JSON 或 CSV 等格式。

文本标记化

文本标记化是将句子分成更小的部分(通常是单词或子单词)的行为,以便 Llama 可以处理它们。您可以使用预构建的库,其中包括 Hugging Face 的 tokenizers 库。

from transformers import LlamaTokenizer

# token = "your_token"
# 示例句子
text = "Llama is an innovative language model."

#加载 Llama tokenizer
tokenizer = LlamaTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf", token=token)

#Tokenize
encoded_input = tokenizer(text)

print("Original Text:", text)
print("Tokenized Output:", encoded_input)

输出

Original Text: Llama is an innovative language model.
Tokenized Output: {'input_ids': [1, 365, 29880, 3304, 338, 385, 24233, 1230, 4086, 1904, 29889], 
   'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}

将数据转换为 JSON 格式

JSON 格式与 Llama 相关,因为它以结构化方式表示数据的格式存储文本数据。

import json

# 数据结构
data = {
"id": "1",
"text": "Llama is a powerful language model for AI research."
}
# 将数据保存为 JSON
with open('formatted_data.json', 'w', encoding='utf-8') as json_file:
    json.dump(data, json_file, indent=4)
    
print("Data formatted and saved to formatted_data.json")

Output

Data formatted and saved to formatted_data.json

该程序将打印一个名为 formatted_data.json 的文件,其中包含 JSON 格式的格式化文本数据。

数据预处理工具

数据清理、标记化和格式化工具适用于 Llama。最常用的工具组是使用 Python 库、文本处理框架和命令。以下是 Llama 数据准备中一些广泛应用的工具的列表。

1. NLTK(自然语言工具包)

最著名的自然语言处理库是 NLTK。该库支持的功能包括文本数据的清理、标记化和词干提取。

示例:使用 NLTK 删除停用词

import nltk
from nltk.corpus import stopwords
nltk.download('punkt')
nltk.download('stopwords')

# 测试数据
text = "This is a simple sentence with stopwords."

# 标记化
words = nltk.word_tokenize(text)

# 停用词
stop_words = set(stopwords.words('english'))

filtered_text = [w for w in words if not w.lower() in stop_words] # This line is added to filter the words and assign to the variable
print("Original Text:", text)
print("Filtered Text:", filtered_text)

输出

原始文本: This is a simple sentence with stopwords.
过滤文本: ['simple', 'sentence', 'stopwords', '.']

2. spaCy

另一个专为数据预处理而设计的高级库。它还快速、高效,并且专为 NLP 任务中的实际使用应用程序而构建。

示例:使用 spaCy 进行标记化

import spacy

# 加载 spaCy 模型
nlp = spacy.load("en_core_web_sm")

# 例句
text = "Llama 是一种创新的语言模型。"

# 处理文本
doc = nlp(text)

# 标记化
tokens = [token.text for token in doc]

print("Tokens:", tokens)

输出

Tokens:['Llama', 'is', 'an', 'innovative', 'language', 'model', '.']

3. Hugging Face 标记器

Hugging Face 提供了一些高性能标记器,主要用于训练语言模型,而不是 Llama 本身。

示例:使用 Hugging Face 标记器

from transformers import AutoTokenizer
token = "your_token"
# 例句
text = "Llama 是一种创新的语言模型。"

#加载 Llama 标记器
tokenizer = AutoTokenizer.from_pretrained('meta-llama/Llama-2-7b-hf', token=token)

#标记化
encoded_input = tokenizer(text)
print("原始文本:", text)
print("标记化输出:",coded_input)

输出

原始文本:Llama is an innovative language model.
标记化输出: {'input_ids': [1, 365, 29880, 3304, 338, 385, 24233, 1230, 4086, 1904, 29889], 
   'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}

4. Pandas 用于数据格式化

处理结构化数据时使用。在将数据传递给 Llama 之前,您可以使用 Pandas 将数据格式化为 CSV 或 JSON。

import pandas as pd

# 数据结构
data = {
"id": "1",
"text": "Llama is a powerful language model for AI research."
}

# 使用显式索引创建 DataFrame
df = pd.DataFrame([data], index=[0]) # 创建字典列表并传递索引 [0]

# 将 DataFrame 保存为 CSV
df.to_csv('formatted_data.csv', index=False)

print("数据保存到 formatted_data.csv")

输出

数据保存到 formatted_data.csv

格式化的文本数据将在 CSV 文件 formatted_data.csv 中找到。