txtai 有一个强大的训练管道,可以为下游任务(如标记文本)微调大型语言模型(LLM)。txtai 还具有从头开始训练语言模型的能力。
绝大多数时候,微调 LLM 会产生最好的结果。但是当对模型的结构进行重大更改时,通常需要从头开始训练。
重大变化的例子是:
改变词汇量
更改隐藏维度的数量
更改注意力头或层数
本文将展示如何构建一个新的分词器并从头开始训练一个小型语言模型(称为微模型)。
安装依赖
安装txtai和所有依赖项。
Install txtai
pip install txtai datasets sentence-transformers onnxruntime onnx
加载数据集
此示例将使用ag_news数据集,它是新闻文章标题的集合。
from datasets import load_dataset
dataset = load_dataset(“ag_news”, split=“train”)
训练分词器
第一步是训练分词器。我们可以使用现有的分词器,但在这种情况下,我们需要更小的词汇表。
from transformers import AutoTokenizer
def stream(batch=10000):
for x in range(0, len(dataset), batch):
yield dataset[x: x + batch][“text”]
tokenizer = AutoTokenizer.from_pretrained(“bert-base-uncased”)
tokenizer = tokenizer.train_new_from_iterator(stream(), vocab_size=500, length=len(dataset))
tokenizer.model_max_length = 512
tokenizer.save_pretrained(“bert”)
让我们测试分词器。
print(tokenizer.tokenize(“Red Sox defeat Yankees 5-3”))
[‘re’, ‘##d’, ‘so’, ‘##x’, ‘de’, ‘##f’, ‘##e’, ‘##at’, ‘y’, ‘##ank’, ‘##e’, ‘##es’, ‘5’, ‘-’, ‘3’