一、背景
图灵测试:图灵测试的本质是通过让机器与人类进行自然语言对话,判断机器是否能够表现出与人类无法区分的智能行为。 传统机器学习:依赖手动特征工程,模型简单,计算资源需求低,解释性强,适用于数据量较小的任务。 深度学习:自动特征学习,模型复杂,计算资源需求高,解释性差,适用于数据量大且特征不明确的任务。 简而言之,Data要丢给Algorithm!Data是foundation! 尽管DL的进步是干掉人为特征工程,但是Garbage In Garbage Out!
二、本质
LLM: 本质就是一个NN,而NN的本质就是一个非线性的数学函数(计算图)!没有足够、优质的Batch Data喂给这个函数做GD,是无法Optimize到一个最优的参数的!
三、最佳实践
graph TD
A[Data Collection] --> B(Data Cleaning)
B --> C(Data Annotation)
C --> D(Data Augmentation)
D --> E(Data Splitting)
E --> F(Data Formatting)
F --> G(Data Storage and Management)
四、快速开始
五、实际工作
class RagDataset(Dataset):
def __init__(self, txt, tokenizer, max_length, stride):
self.input_ids = []
self.target_ids = []
token_ids = tokenizer.encode(txt, allowed_special={"<|endoftext|>"})
for i in range(0, len(token_ids) - max_length, stride):
input_chunk = token_ids[i:i + max_length]
target_chunk = token_ids[i + 1: i + max_length + 1]
self.input_ids.append(torch.tensor(input_chunk))
self.target_ids.append(torch.tensor(target_chunk))
def __len__(self):
return len(self.input_ids)
def __getitem__(self, idx):
return self.input_ids[idx], self.target_ids[idx]
def create_dataloader_v1(txt, batch_size=4, max_length=256,
stride=128, shuffle=True, drop_last=True, num_workers=0):
tokenizer = tiktoken.get_encoding("gpt2")
dataset = RagDataset(txt, tokenizer, max_length, stride)
dataloader = DataLoader(
dataset, batch_size=batch_size, shuffle=shuffle, drop_last=drop_last, num_workers=num_workers)
return dataloader
with open("test-qa-verdict.txt", "r", encoding="utf-8") as f:
raw_text = f.read()
tokenizer = tiktoken.get_encoding("gpt2")
encoded_text = tokenizer.encode(raw_text)
vocab_size = 50257
output_dim = 256
context_length = 1024
token_embedding_layer = torch.nn.Embedding(vocab_size, output_dim)
pos_embedding_layer = torch.nn.Embedding(context_length, output_dim)
max_length = 4
dataloader = create_dataloader_v1(raw_text, batch_size=8, max_length=max_length, stride=max_length)