作者:
(1) Brandon T. Willard,普通计算;
(2)R´emi Louf,《普通计算》。
令 St = (s1 ... st) 表示 t 个标记的序列,其中 st ∈ V,V 是词汇表,|V| = N。词汇表 V 由固定字母表中的字符串组成 [Sennrich et al., 2015],N 通常在 104 或更大的数量级上。
我们将下一个标记 st+1 定义为以下随机变量:
令 F ⊂ P (V),其中 P 是幂集运算符,是以特殊标记 EOS ∈ V 结尾的多标记字符串的子集。文本生成任务是从 F 中抽取样本。
已经考虑了几种生成 F 元素的程序。贪婪解码包括递归生成标记,在每一步中选择概率最高的标记。集束搜索也以递归方式生成标记,使用启发式方法查找分布的模式。最近,SMC 采样也被用于生成序列 [Lew 等人,2023 年]。
算法 1 概括描述了采样过程。该过程通常称为多项式采样,通过从上面定义的分类分布中采样,递归生成新令牌,直到找到 EOS 令牌。
• 数字样本,
• 与正则表达式 [a-zA-Z] 匹配的字符串,
• 以及根据指定语法解析的字符串(例如 Python、SQL 等)
带掩蔽的采样程序是算法 1 的简单增强,并在算法 2 中提供。
2.5 行中 m 的计算隐式地针对 V 的所有元素执行。除了计算 α 之外,这一步无疑是最昂贵的。在正则表达式引导掩码的情况下(以及比这更复杂的情况),支持度以及 m 必然取决于先前采样的标记。这种引导生成最终是一个迭代匹配或解析问题,不能直接适用于需要预先访问完整字符串的标准方法。在某些情况下,可以在每次迭代中从采样序列的开头执行部分匹配或解析,但这会产生至少与在整个词汇表中应用 O(N) 成本一起线性增长的成本。
这引出了我们这项工作的主要问题:如何根据正则表达式或 CFG 有效地匹配或解析不完整的字符串,并在算法 2 的每次迭代中确定掩码 m?