Page 155 - 《软件学报》2025年第4期
P. 155

王泽 等: 基于槽依赖建模的跨领域槽填充方法                                                          1561


                    本文的模型结构如图        4  所示, 主要包括槽填充任务和话语填充子任务两部分. 在流程上, 两个任务都是先对槽
                 提示进行重组, 然后输入到生成式模型中得到相应的槽实体序列. 输入可以有多个槽提示进行组合, 通过提示整合
                 模块的槽共享提示来建模不同槽类型之间的依赖关系. 此外, 本文通过构建话语填充子任务来增强话语中槽实体
                 与槽类型之间的映射关系, 同时进一步强化槽实体与用户话语之间的语义联系.

                                                         用户话语



                                          槽语义提示 1        槽共享提示          槽语义提示 2


                                                   槽提示 1          槽提示 2



                              槽填充任务                                                话语填充任务

                         话语:                            提 示整 合 模 块             话语:
                         Book a tea place at seven                             Book a  M 1 at M 2
                         提示:                                                   提示:
                         Q(restaurant _type) M 1                               Q(restaurant _type) tea place
                         Q(part_size_number ) M 2                              Q(part_size_number ) seven
                         Q(restaurant _name) M 3                               Q(restaurant _name) M 3
                                                       生 成预 训 练 模型



                         M 1  tea place   M 2  seven  M 3 None       M 1  tea place   M 2  seven  M 3 None
                                                    图 4 模型总体框架图

                 2.3   槽依赖建模      M 1   Q(part_size_number)

                                                                                         T  , 每个槽提示都是
                    为了建模不同槽类型之间的隐式依赖, 本文对多个槽提示进行拼接作为最终的输入提示
                                                                            t
                 针对某一槽类型的序列表示. 通过一个生成式预训练模型将提示序列                       T  与第   个用户话语  u t  进行拼接作为模型输
                 入, 由模型输出    T  中相关槽类型所对应的槽实体序列:

                                                                                                      (1)
                                                  T = Q(s 1 ), M 1 ,...,Q(s n ), M n

                                                                                                      (2)
                                               V = Seq2seq(u t ,T) = M 1 ,v 1 ,..., M n ,v n
                    公式  (1) 中   Q(s i ) 表示将第   i 个槽类型  s i  转换为槽提示表示, 具体的转换流程在后面的槽提示模板中进行介绍.
                                                                      M i  表示掩码词. 为了帮助模型对每个槽类型
                 模型的输出序列      V  中包含所有   s i  所对应的槽实体   v i i = 1,2,...,n ),
                                                          (
                                                                                          V  中生成的槽实体
                 进行准确地区分, 我们在输入序列中的每个槽提示后插入                  M i  , 对不同槽类型进行分割. 同时, 在
                 前加入   M i  , 使得标识词与输入序列中的槽类型构成映射. 通过这种设置能够帮助模型在生成过程中关注到槽类型
                 相对应的槽实体, 直接完成类型的匹配工作. 如图               4  中的槽填充任务所示, 用户话语和          3  个槽类型组成的提示模
                 板  (Q(restaurant_type)               M 2   Q(restaurant_name)    M 3  ) 进行拼接后, 生成槽实体序列“  M 1   tea
                               M 3   None”, 其中“tea place”属于槽类型“restaurant_type”所对应的实体, “seven”属于槽类型
                 place    M 2   seven
                 “part_size_number”所对应的实体, “restaurant_name”没有对应的实体.
                    槽实体数量的选择我们在后续进行了实验分析, 在训练阶段通过随机组合槽类型的方式来构建输入, 本文对
                 槽类型进行组合的时候考虑到可能存在的噪声, 比如在文本中本不具备明显依赖关系的两个槽类型强行联合的话
                 会影响性能. 因此, 我们基于当前文本实际存在的槽类型进行随机组合, 即对于                      None 值也就是不存在的槽类型不需
                 要进行组合. 从文本实际存在的槽类型出发, 考虑可能存在的槽依赖, 这样很大程度上降低了多槽融合的噪声问题.
   150   151   152   153   154   155   156   157   158   159   160