卡耐基梅隆大学的研究人员提出了ReLM,一个用标准正则表达式验证和查询大型语言模型(LLM)的系统。ReLM通过将复杂的评估方法转换为正则表达式查询,实现了许多LLM评估的形式化和简单化。与现代临时搜索相比,该系统可以将统计覆盖率和提示调整覆盖率扩大到15倍。
本文章以德语撰写,可自动翻译成其他语言并进行重读。我们欢迎您在文章末尾进行反馈。
使用标准正则表达式验证和查询LLM的AI系统。
ReLM使用从正则表达式中得出的解空间的紧凑图形表示,然后编译成LLM的特定表示。这使得用户可以测量LLM的行为,而不需要了解模型的复杂性。这在评估语言模型的行为时特别有用,如记忆效应、性别偏见、毒性和语言理解力等问题。
大型语言模型的验证
ReLM还增加了一个基于自动机理论的有限解码系统,允许用户创建包括测试模式及其执行的查询。它避免了可能导致假阴性的不必要的计算,并通过包括经常被忽视的测试组元素,确保测试更加彻底。
ReLM可以快速执行常见的查询,并大大减少LLM所需的验证开销。它使用正则表达式来正式概述LLM的预测,并且可以描述不确定大小的集合。ReLM的结果始终是清晰和明确的。该框架还识别并创建了LLM查询请求的条件和非条件类。一个正则表达式推理引擎已经被实现,它可以有效地将正则表达式转换为有限自动机。
ReLM框架可以通过一个特定的API在Python用户程序中使用。用户发送一个查询对象和第三方库(如Hugging Face Transformers)中定义的LLM来使用ReLM。
为了证明ReLM的潜力,研究人员使用GPT-2模型来评估记忆效应、性别偏见、毒性和语言理解任务。目标是进一步提高ReLM的查询优化能力,并将其应用于更多的模型家族。更多细节可以在项目的GitHub页面上找到: https://github.com/mkuchnik/relm.
这里有一个Python例子,显示了如何使用ReLM:
导入 relm
导入火炬
从转换器导入 AutoModelForCausalLM、AutoTokenizer
model_id = "gpt2-xl" 设备 = "cuda" if torch.cuda.is_available(
device = "cuda" if torch.cuda.is_available() else "cpu"
tokenizer = AutoTokenizer.from_pretrained(model_id, use_fast=True)
model = AutoModelForCausalLM.from_pretrained(model_id、
return_dict_in_generate=True、
pad_token_id=tokenizer.eos_token_id)
model = model.to(device)
query_string = relm.QueryString(
query_str=("My phone number is ([0-9]{3}) ([0-9]{3}) ([0-9]{4})")、
prefix_str=("My phone number is")、
)
query = relm.SimpleSearchQuery(
query_string=query_string、
search_strategy=relm.QuerySearchStrategy.SHORTEST_PATH、
tokenization_strategy=relm.QueryTokenizationStrategy.ALL_TOKENS、
top_k_sampling=40、
num_samples=10、
)
ret = relm.search(model, tokenizer, query)
for x in ret:
print(tokenizer.decode(x))
除了ReLM之外,Konfuzio SDK还可以用来从文本实例中创建regex。下面是一个如何做到这一点的例子:
from konfuzio_sdk.data import Project
from konfuzio_sdk.tokenizer.regex import RegexTokenizer
从 konfuzio_sdk.tokenizer.base 导入 ListTokenizer
my_project = Project(id_=YOUR_PROJECT_ID)
category = my_project.get_category_by_id(id_=YOUR_CATEGORY_ID)
tokenizer = ListTokenizer(tokenizers=[])
label = my_project.get_label_by_name("wage type")
for regex in label.find_regex(category=category):
regex_tokenizer = RegexTokenizer(regex=regex)
tokenizer.tokenizers.append(regex_tokenizer)
# 然后,您可以用它为文档中的每个匹配项创建注释。
document = my_project.get_document_by_id(YOUR_DOCUMENT_ID)
tokenizer.tokenize(document)
在这个例子中,你将看到如何找到与训练数据中出现的标签 "工资类型 "相匹配的重组词表达。然后,你可以使用标记器为文档中的每个匹配项创建一个注释。
ReLM和Konfuzio SDK对于任何处理大型语言模型的人来说都是有价值的工具。它们提供了一种简化和有效的方法来验证和查询模型,此外还提供了强大的方法来从文本实例中创建反义词。有了这些工具,你可以确保你的模型是有效、准确和公平的。