转换器
安装
您需要安装 transformer、datasets 和 torch 库才能在 Outlines 中使用这些模型,或者替代地:
Outlines 提供与 torch 中因果模型的实现的集成,位于 transformers 库中。您可以通过传递模型的名称来初始化模型:
from outlines import models
model = models.transformers("microsoft/Phi-3-mini-4k-instruct", device="cuda")
如果您需要更细粒度的控制,您还可以单独初始化模型和分词器:
from transformers import AutoModelForCausalLM, AutoTokenizer
from outlines import models
llm = AutoModelForCausalLM.from_pretrained("gpt2", output_attentions=True)
tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = models.Transformers(llm, tokenizer)
使用Logits处理器
有两种方法可以使用Outlines结构化生成与HuggingFace Transformers:
- 使用 Outlines 生成器包装器,
outlines.models.transformers - 使用
OutlinesLogitsProcessor与transformers.AutoModelForCausalLM
Outlines 支持多种 logits 处理器用于结构化生成。在这个例子中,我们将使用 RegexLogitsProcessor,它保证生成的文本符合指定的模式。
使用 outlines.models.transformers
import outlines
time_regex_pattern = r"(0?[1-9]|1[0-2]):[0-5]\d\s?(am|pm)?"
model = outlines.models.transformers("microsoft/Phi-3-mini-4k-instruct", device="cuda")
generator = outlines.generate.regex(model, time_regex_pattern)
output = generator("The the best time to visit a dentist is at ")
print(output)
# 2:30 pm
使用通过 transformers 库初始化的模型
import outlines
import transformers
model_uri = "microsoft/Phi-3-mini-4k-instruct"
outlines_tokenizer = outlines.models.TransformerTokenizer(
transformers.AutoTokenizer.from_pretrained(model_uri)
)
phone_number_logits_processor = outlines.processors.RegexLogitsProcessor(
"\\+?[1-9][0-9]{7,14}", # phone number pattern
outlines_tokenizer,
)
generator = transformers.pipeline('text-generation', model=model_uri)
output = generator(
"Jenny gave me her number it's ",
logits_processor=transformers.LogitsProcessorList([phone_number_logits_processor])
)
print(output)
# [{'generated_text': "Jenny gave me her number it's 2125550182"}]
# not quite 8675309 what we expected, but it is a valid phone number
替代模型类
outlines.models.transformers 默认使用 transformers.AutoModelForCausalLM,这是大多数标准大型语言模型的适当类,包括 Llama 3、Mistral、Phi-3 等。
然而,通过传递适当的类,也可以使用具有独特行为的其他变体。
Mamba
Mamba 是一种替代变压器的工具,它采用内存高效的线性时间解码。
要使用 Mamba 和 outlines,您必须首先安装必要的要求:
Then you can either create an Mamba-2 Outlines model via
or explicitly with
import outlines
from transformers import MambaForCausalLM
model = outlines.models.transformers(
"state-spaces/mamba-2.8b-hf",
model_class=MambaForCausalLM
)
阅读 transformers 的文档 以获取更多信息。
编码器-解码器模型
您可以在Outlines中使用像T5和BART这样的编码器-解码器(seq2seq)模型。
不过,在模型选择时要小心,一些模型如 t5-base 不包含某些字符 ({),当你尝试进行结构化生成时,可能会出现错误。
T5 Example:
import outlines
from transformers import AutoModelForSeq2SeqLM
model_pile_t5 = outlines.models.transformers(
model_name="EleutherAI/pile-t5-large",
model_class=AutoModelForSeq2SeqLM,
)
Bart Example: