RELLM: 利用正则表达式进行结构化生成的LLM库

在人工智能生成文本的应用中,确保输出符合特定格式是非常重要的。RELLM 是一个库,它通过包装本地 Hugging Face 管道模型实现了结构化的生成。其核心功能在于逐步生成每一个词元,并在每一步中屏蔽不符合提供的部分正则表达式的词元。这使得输出能够严格遵循指定的格式。

技术背景介绍

人工智能语言模型(LLM)如 GPT 等,在生成文本时通常不限制输出格式。然而,在某些应用场景下,遵循特定的输出格式(如 JSON 格式)可以显著提高可用性。为此,RELLM 提供了一种将 Hugging Face 的模型与正则表达式相结合的方法,确保输出符合指定的结构。

核心原理解析

RELLM 的核心原理是利用正则表达式来限制模型生成的词元集合。当生成下一个词元时,只有那些使得生成文本仍然符合正则表达式的词元是允许的。这种机制不仅可以防止结构错误,还可以增强模型在特定任务中的表现。

代码实现演示

下面我们将通过代码演示如何使用 RELLM 进行结构化生成。我们将首先展示没有结构化生成的情况,然后再利用 RELLM 实现符合 JSON 格式的输出。

不使用结构化生成

import logging
from langchain_huggingface import HuggingFacePipeline
from transformers import pipeline

# 设定日志记录级别为ERROR,减少输出冗余信息
logging.basicConfig(level=logging.ERROR)

prompt = """Human: "What's the capital of the United States?"
AI Assistant:{
  "action": "Final Answer",
  "action_input": "The capital of the United States is Washington D.C."
}
Human: "What's the capital of Pennsylvania?"
AI Assistant:{
  "action": "Final Answer",
  "action_input": "The capital of Pennsylvania is Harrisburg."
}
Human: "What 2 + 5?"
AI Assistant:{
  "action": "Final Answer",
  "action_input": "2 + 5 = 7."
}
Human: 'What's the capital of Maryland?'
AI Assistant:"""

# 使用稳定可靠的API服务
hf_model = pipeline(
    "text-generation", model="cerebras/Cerebras-GPT-590M", max_new_tokens=200
)

original_model = HuggingFacePipeline(pipeline=hf_model)
generated = original_model.generate([prompt], stop=["Human:"])
print("不使用结构化生成的结果:")
print(generated)

使用 RELLM 进行结构化生成

import regex  # 使用regex库而不是标准库中的re
from langchain_experimental.llms import RELLM

# 我们选择一个正则表达式,它匹配到看起来像这样的结构化json字符串:
pattern = regex.compile(
    r'\{\s*"action":\s*"Final Answer",\s*"action_input":\s*(\{.*\}|"[^"]*")\s*\}\nHuman:'
)

model = RELLM(pipeline=hf_model, regex=pattern, max_new_tokens=200)
generated = model.predict(prompt, stop=["Human:"])
print("使用结构化生成后的结果:")
print(generated)

应用场景分析

RELLM 在需要固定格式输出的场景(如自动客服、数据生成、问答系统等)中非常有用。它可以帮助确保生成文本的格式一致性,从而降低后续处理的复杂性。

实践建议

在使用 RELLM 时,确保正则表达式能够准确地描述目标格式。过于宽松的正则可能无法限制住格式,而过于严格的正则则可能使得生成失败。此外,定期更新和验证模型及正则表达式的兼容性是保证输出质量的重要措施。

如果遇到问题欢迎在评论区交流。
—END—

你可能感兴趣的:(正则表达式,python)