Page 212 - 《软件学报》2025年第12期
P. 212

吴信东 等: 华谱通: 基于知识推理的家谱问答大语言模型                                                    5593


                    如图  19(a) 所示, 华谱通可以协同利用百度百科模块的检索结果和家谱中的相关信息, 充分调动大模型利用预
                 训练知识来回答包含家谱缺失人物的问题. 同时, 当华谱通调用百度百科查询接口后, 前端会展示专有词语的来
                 源, 以此提升问答的可解释性, 从人机交互的角度增强用户对大模型回答正确性的判断.
                    然而, 目前华谱通调用百度百科查询接口的功能还有待完善. 如图                     19(b) 所示, 尽管华谱通根据百度百科检索
                 模块可以获知“十二金钗”指林黛玉、薛宝钗、王熙凤、贾元春等人物, 但无法将这些的人物分别抽取出来, 与家
                 谱中的“贾宝玉”进行基于路径排序的亲属关系推理. 因此, 图                 19(b) 的回答是大模型参考《红楼演示家谱》中贾宝
                 玉的简介和百度百科对“十二金钗”的介绍, 利用预训练的知识所生成的答案, 而并未从家谱中获取“十二金钗”每
                 个人物与“贾宝玉”的准确关系, 这导致华谱通对大模型问答幻觉的约束力度降低, 进而导致大模型生成一些错误
                 的答案, 例如“李纨是贾宝玉的亲嫂子”而非“堂嫂”. 相比之下, 如图                19(c) 所示, 将  3  个错误回答对应的问题单独输
                 入系统后, 华谱通都能正确回答. 这是因为在单独询问这                 3  个问题时, 待查询的人物都包含在《红楼演示家谱》
                 内, 因此华谱通能够通过前文提出的逻辑推理框架和路径排序算法精准定位到人物之间的关系路径, 从而更加有
                 效地提示大模型回答问题. 综上所述, 如何在使用百度百科检索模块的基础上进一步发挥华谱通中亲属关系推理
                 规则的优势是华谱通在未来需要重点研究的方向.
                  3.4   系统时间性能分析
                    本节针对华谱通系统中部署的路径排序算法                 (第  2.3.2  节) 和异步请求响应机制   (第  2.6  节), 展开详细的时间
                 性能分析, 以证明华谱通在实际的问答场景中能够快速响应用户输入的问题.
                  3.4.1    关系路径排序算法时间复杂度有效性实验
                    为验证第    2.3.2  节中基于大根堆的    Dijkstra 算法  (Heap Dijkstra) 在排序时间上的优势, 本文基于《红楼演示家
                 谱》构建了    4  条测试样例, 以测试算法在不同亲疏程度的关系路径上的排序时间. 同时, 本文设置了                        Naïve Dijkstra
                 算法作为对照实验. Naïve Dijkstra 算法不使用任何措施维护路径分数表, 而是通过遍历更新后的无序分数表来获
                 得最高分的路径. 具体实验结果如表           4  所示. 根据表  4  中不同样例所需的响应时间可得, 当待查询两个人物之间的
                 关系强度越弱时      (关系路径越长), Heap Dijkstra 算法的优势越明显.


                                              表 4 路径排序算法响应时间统计 (s)

                          测试样例                             关系路径                    Naïve Dijkstra  Heap Dijkstra
                  样例1: 贾宝玉和贾元春什么关系?                  贾宝玉→(姐妹)→贾元春                    0.087 8     0.092 8
                   样例2: 贾宝玉和贾演什么关系?         贾宝玉→(父亲)→贾政→(爷爷)→贾源→(兄弟)→贾演              6.497 9     5.166 3
                  样例3: 贾宝玉和林黛玉什么关系?        贾宝玉→(父亲)→贾政→(姐妹)→贾敏→(女儿)→林黛玉              11.314 4    7.980 9
                                             贾宝玉→(父亲)→贾政→(爷爷)→贾源→(侄子)→
                   样例4: 贾宝玉和贾珍什么关系?                                                  321.225 6  103.421 2
                                                      贾代化→(孙子)→贾珍
                 注: 响应快的算法在每个样例上的时间用粗体表示

                    根据第   2.3.2  节的描述, 华谱通的路径排序算法需要在动态更新的无序路径分数列表中找到最高分的路径, 因
                 此每一轮的排序都包含插入和查找两个步骤. 假设上一轮排序后, 列表中共存储                          K  条关系路径, 在不考虑用大根
                 堆维护路径分数列表时, Naïve Dijkstra 算法将新增的         26  条关系路径插入列表的时间为         O(1), 但需要遍历所有路
                 径分数才能找到分数最大的路径, 即需要             O(K+26) 的查找时间. 相比之下, Heap Dijkstra 算法将插入      26  条新关系
                 路径后的分数表重新调整为大根堆的时间为               O(log(K+26)), 且仅需将堆顶元素作为分数最大的路径, 因此查找时间
                 为  O(1). 综上所述, Heap Dijkstra 算法  (O(log(K+26))+ O(1)) 的总时间复杂度要优于  Naïve Dijkstra 算法  (O(K+26)+O(1)).
                  3.4.2    异步请求响应机制有效性实验
                    为测试第    2.6  节所提出方法对华谱通问答系统响应时长的优化程度, 本节使用《红楼演示家谱》中的“贾宝
                 玉”“贾代善”“林黛玉”“十二金钗”“绛珠仙子”和“神瑛侍者”构造测试样例进行有效性检验. 由于华谱平台暂未对人
                 物的别称做专门的数据管理, 因此目前无法实现人物别称到具体人物实体的映射. 在这种情况下, “十二金钗”“绛
                 珠仙子”和“神瑛侍者”可以被认为是《红楼演示家谱》中的缺失人物. 考虑到异步请求响应机制中家谱推理模块
   207   208   209   210   211   212   213   214   215   216   217