主要观点:可以将基于字符的有限状态机(FSM)确定性地转换为使用令牌的 FSM,给出了在Outlines中的示例代码,通过一系列步骤生成第一个令牌,还展示了转换后的索引及其中的状态和令牌对应关系,虽增加了复杂度但操作类似,且需注意 FSM 中的每个转换都代表对语言模型(LLM)的昂贵调用,使用 FSM 表示正则表达式可在控制输出时几乎无需额外成本,若能找到跳过 LLM 调用的方法则有望实现更快的生成。
关键信息:
- 代码
from outlines.fsm.regex import make_deterministic_fsm, create_fsm_index_tokenizer
用于转换 FSM。 - 生成第一个令牌的步骤:传递提示给模型获取下一个令牌概率分布,从状态 0 开始,根据
index[0].keys()
列出有效转换的令牌,用概率分布采样一个令牌,跟随对应转换移动到新状态。 index
是一个字典,映射有限状态机的状态到可能的转换,转换用允许的令牌到下一个状态的字典表示。- 展示了转换后的索引及其中的状态和令牌对应关系。
- 强调每个转换代表对 LLM 的昂贵调用,使用 FSM 表示正则表达式可控制输出且几乎无需额外成本,有望实现更快生成。
重要细节:
- 给出了具体的代码示例和详细的操作步骤。
- 展示了复杂的 FSM 可视化图像。
- 说明了在使用 FSM 时的成本和潜在优势。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。