Page 272 - 《软件学报》2025年第5期
P. 272
2172 软件学报 2025 年第 36 卷第 5 期
语言模型 (如 BERT) 构建一个二分类器, 从非结构化文本和表格文本组成的句子集合 S 中挑选前 top n 个检索句
子. 给定一个问题 Q, 检索到的相关句子集合 C 可以根据公式 (2) 的事实指标集合 I 从 S 中得到:
I = argsort({P θ (C i |Q)|i ∈ N}[: top n ]) (2)
其中, C i 是第 i 个句子, N 是 S 中每个句子的指标集合, θ 是分类器参数, P θ (C i |Q) 是分类器判定 C i 为支撑句子 (支
{P θ (C i |Q)|i ∈ N} 进行降序排序, 并返
撑单元格句子或者回答问题所必需的文本句子) 的概率, argsort 指对概率集合
回与这些概率相对应的句子指标.
2.2.3 生成器
本文旨在通过引入多粒度单元格语义对比机制, 提升生成器区分支撑单元格句子和干扰单元格句子的能力.
因此, 本文首先介绍主流的生成器, 而基于对比机制的生成器将在第 3 节介绍. 主流的生成器采用 encoder-
decoder 架构来做数值推理, 其以预训练语言模型为核心的 encoder 编码检索器返回的检索句子集合 C 和问题 Q.
然后由一个 LSMT 及 attention 机制构成的 decoder 来解码计算程序 G = {g i } N , 其中 G 包含定义的操作符, 操作数
i=0
及特殊符号 (例如代表第 i 步计算结果的特殊符号#i) 等构成元素. 这里的 g i 表示计算程序中的第 i 个构成元素. 生
成器一般通过计算程序 G 作为监督学习信号, 从而指导模型优化其参数配置. 公式 (3) 显示了生成器推理过程:
M ∏
P ϕ (G|C, Q) = P ϕ (g t |C,Q,g <t ) (3)
t=0
其中, ϕ 是生成器参数, M 是计算程序长度.
3 基于多粒度单元格语义对比的生成器
文本和表格的数值推理问答中, 模型需要基于单元格句子进行数值推理, 然后生成包含单元格数值的计算程
序. 然而, 生成器区分支撑和干扰单元格句子是有挑战的, 主要理由是: (1) 由模板构造的单元格句子基本上由简短
的行名和列名组成, 但这些行名和列名在形式上差异很小, 难以提供足够的信息区分它们的语义; (2) 单元格句子
可能仅相差一个行名或者列名, 这进一步减少了它们之间的语义差异 [6] ; (3) 这些简短的行名或者列名可能和问题
有重合词汇, 也会导致生成器难以区分它们的语义; (4) 由于标注成本昂贵, 导致训练数据是有限的. 同时, 模板句
子与预训练语言模型的训练语料之间存在差异. 这些都可能会使得生成器难以学习到高质量的单元格句子语义表
示, 进而导致生成器容易基于干扰单元格数值生成错误的计算程序. 对比学习的一个核心思想是拉近同类表示的
距离, 拉远不同类别表示的距离, 优化的表示可以进一步提升模型的性能 [20−23] . 受益于对比学习的思想, 本文期望
用对比学习方式来优化支撑和干扰单元格句子语义表示, 拉远它们的语义表示距离, 进而帮助生成器区分它们. 除
了由粗粒度角度出发考虑单元格句子整体语义差别, 同时本文也从细粒度角度出发利用单元格句子语义构成元
素 (行名, 列名和单元格数值) 来告诉生成器模型更具体的差异. 因此, 本文提出了一种多粒度单元格语义对比
(MGCC) 方法, 来帮助生成器区分支撑和干扰单元格句子.
后文图 4 展示了基于多粒度单元格语义对比的生成器架构. 首先生成器 encoder 对问题和检索返回的句子进
行编码. 然后, 本文提出的多粒度单元格语义对比用于优化 encoder 的输出. 基于这些优化后的输出, decoder 可以
更好地区分支撑单元格句子和干扰单元格句子表示. 具体地, 本文将在第 3.1 节介绍图 4 中 encoder 的输入. 图 4 中
的 SemContrast 是粗粒度单元格语义对比, 该部分将在第 3.2 节介绍. 图 4 中的 RowContrast, ColContrast 和 ValContrast
分别代表细粒度单元格语义构成元素的行名对比, 列名对比和单元格数值对比, 本文将在第 3.3 节介绍这些内容.
此外, 这里提到的 decoder 与第 2.2.3 节介绍的 decoder 是一致的.
3.1 多粒度表格单元格语义对比的生成器输入设计
为了获得多粒度单元格语义对比的正负例表示, 本文对生成器的输入做了改进. 给定一个问题 Q, 通过检索,
本文可以获得前 top n 个检索句子 C =< C 1 ,C 2 ,...,C top n > , 这里 C i 是第 i 个检索句子. 不同于之前的生成器直接拼
接 Q 和 C, 这里本文在每个检索句子 C i 后面拼接一个特殊单词 [SEP], 其可以作为每个 C i 的表示 [4] . 具体输入为
[SEP] . 之后本文将拼接结果作为 H .
c
[CLS] Q [SEP] C 1 [SEP] C 2 [SEP] ... C top n encoder 输入, 得到表示