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

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



                 14.    hop ++;
                 15.   end if /*对应步骤  10*/
                 16.   if top_path.len()<max_len
                 17.    path_list = Group_relation(top_path, R); /*扩展堆顶路径*/
                 18.    score_list = Calculate_score(top_ score, H);
                 19.    path_heap.push(path_list, score_list); /*将扩展的路径入堆*/
                 20.   end if /*对应步骤  16*/
                 21.  end if /*对应步骤  7*/
                 22.  top_path, top_score=path_heap.pop(); /*堆顶路径出堆*/
                 23.  result = SPARQL((s*, top_path, t*)); /*查询  s*和  t*之间是否存在路径  top_path */
                 24.  if (result != None) or (path_heap.empty() and top_path.len() == max_len) /*找到最优路径或在最大路径长度内
                 找不到最优路径*/
                 25.   break; /*对应步骤  6*/
                 26.  end if /*对应步骤  24*/
                 27. return top_path
                    因为一跳路径表示的关系最为重要, 因此在实际运行时, 华谱通会首先遍历完所有一跳路径, 再从二跳路径开
                 始实施路径排序算法. 在算法         2  中, Heap()、empty()、push() 和  pop() 分别表示构建大根堆、判断堆是否为空、新
                 路径入堆和堆顶路径出堆; Group_relation(A, B) 表示组合     A  和  B  中的关系路径, Calculate_score(A, B) 表示用公式  (2)
                 计算组合后路径的分数; SPARQL() 函数给功能与算法             1  中的类似, 用于构建对应的       SPARQL  语句并进行逻辑查
                 询. 为便于读者获取华谱通路径排序算法中对不同跳数路径的处理细节, 本文将算法的核心脚本上传至                                 GitHub  代
                 码库, 详见  https://github.com/lazyloafer/Huaputong/tree/ main/qa_demo.py.

                  2.4   基于提示学习的多轮问答框架
                    一般情况下, 用户在与大模型问答界面进行交互时, 很容易使用较为口语化的提问方式. 例如, 在询问完“曾国
                 藩的儿子是谁?”后, 用户很可能会想知道曾国藩的女儿, 但不一定会提问“曾国藩的女儿是谁?”, 而是接着上一轮
                 的问答历史直接询问“他女儿呢?”. 尽管第           2  个问题中的“他”, 在用户看来一定指代的是“曾国藩”, 但对问答系统而
                 言, “他”在文本上与“曾国藩”并不匹配. 因此, 需要利用合适的提示信息, 让大模型能够利用其强大的上下文理解
                 能力, 从历史问答记录中定位这个“他”所指的具体人物.
                    根据上述需求, 华谱通在知识推理逻辑和信息筛选的基础上, 构建了一套基于提示学习的多轮问答机制, 利用
                 大模型强大的上下文理解能力, 从精准的知识库信息中挖掘有利于求解用户问题的依据.
                    如图  8  所示, 与第  2.3.1  节中用于问题信息抽取的提示模板不同, 本节所设计的提示模板包含大模型角色赋
                 予、历史问答记录、用户当前问题和知识推理依据这                   4  个部分. 在实际问答过程中, 该提示模板首先会填入具体
                 的家谱简介信息、用户当前问题和图谱检索信息, 同时动态更新历史问答记录; 之后, 华谱通将更新好的提示模
                 板作为大模型的输入信息, 大模型会根据提示模板的内容来回答用户的问题. 公式                          (3) 展示了华谱通多轮问答的
                 具体过程.

                                         {
                                           ans i = LLM(prompt(role,ques ,retrieval i ,hist i−1 ))
                                                                 i
                                                          i                                           (3)
                                           hist i = {(ques ,ans k )} k=1
                                                    k
                    在公式   (3) 中, prompt(role, ques i , retrieval i , hist i–1 ) 表示构建如图  8  所示的提示模板, role 表示提示模板中的角
                 色赋予信息; ques i 、ans i 和  retrieval i 分别表示第  i 轮问答时用户提出的问题、大模型给出的答案和根据该问题检
                 索到的家谱信息; hist i– 存储前    i–1  轮的问答对, 作为历史信息导入大模型, 以增强问答的上下文情景, 这有助于启
                                  1
                 发大模型回答用户问题.
   197   198   199   200   201   202   203   204   205   206   207