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

5580                                                      软件学报  2025  年第  36  卷第  12  期



                 算法  1. 华谱通同名人物筛选算法.
                 输入: 问题三元组     (s*, r*, t*), 其中  s*是同名人物姓名; 条件三元组集合     P={(s 1 , r 1 , t 1 ), (s 2 , r 2 , t 2 ),…,(s n , r n , t n )}; 关系
                 类型集合   R; 属性类型集合     A;
                 输出: 最符合条件的同名人物         max_URI.
                 1.  new List same_people_uri_list=SPARQL((s*, 简介, ?)); /*保存所有候选同名人物  URI*/
                 2.  new Dict same_people_dict; /*用于保存同名人物的信息, 包括属性和人物关系*/
                 3.  for URI in same_people_uri_list
                 4.   for r in R∪A
                 5.    same_people_dict[URI]=SPARQL((URI, r, ?)); /*获取每个同名人物的所有信息*/
                 6.   end for /*对应步骤  4*/
                 7.  end for /*对应步骤  3*/
                 8.  new List same_people_match_score; /*用于保存同名人物信息与条件信息的匹配度*/
                 9.  for URI in same_people_uri_list
                 10. new List candidate_information_list;
                 11. for (s i , r i , t i ) in P
                 12.  if equal(URI, s i .uri)
                 13.   candidate_information_list.append(t i ); /*获取每个同名人物的查询条件*/
                 14.  end if /*对应步骤  12*/
                 15. end for /*对应步骤  11*/
                 16. score=TextMatch(same_people_dict[URI], candidate_information_list); /*匹配用户提供的条件和同名人物的知
                 识库信息*/
                 17. same_people_match_score.append((URI, score)); /*存储所有同名人物与查询条件的匹配度*/
                 18. end for /*对应步骤  9*/
                 19. max_URI =max(same_people_match_score); /*选择最大  score 对应的  URI */
                 20. return max_URI
                    在算法   1  中, 步骤  1  的  SPARQL() 函数表示根据输入的三元组构造       SPARQL  查询语句并返回查询结果, 查询
                 语句的构造过程参考表        1. 此外, 步骤  16  的  TextMatch(A, B) 函数被定义为公式  (1):

                                                            | jieba(A)∩ jieba(B)|
                                              TextMatch(A,B) =                                        (1)
                                                                | jieba(B)|
                 其中, A  是华谱通查询到的同名人物信息, B          是用户提供的同名人物查询条件. 为了便于进行词频匹配, 本文使用
                 jieba 分词软件对  A  和  B  中的文本进行分词, 并将    A  和  B  中共同存在的语段占    B  中语段的比重作为用户需要查询
                 某个同名人物的概率, 最后选择概率最高的同名人物                  URI 作为查询目标. 若无法匹配出最符合条件的同名人物,
                 华谱通会从候选的同名人物中随机选择一个进行查询和大模型问答; 之后, 在大模型生成答案的末端增加对其余
                 同名人物的简介      (参考第   3.3.1  节中内容), 以方便用户做进一步选择. 为帮助读者更直观地了解算法中功能函数
                 (SPARQL() 和  TextMatch(A, B)) 的具体设计细节, 本文将华谱通同名人物多条件匹配机制的核心脚本上传至
                 GitHub  代码库, 详见  https://github.com/lazyloafer/Huaputong/tree/main/qa_demo.py.
                  2.3.2    关系路径排序
                    当进行人物关系查询时, SPARQL         可能会检索到多条关系路径来提示大模型生成答案. 然而, 大多数关系路径
                 所表达的人物关系都不够直观, 且大模型对复杂关系的总结能力偏弱. 因此, 大量冗余的路径可能会干扰大模型对
                 人物关系的总结, 图      6  展示了  ChatGPT  在多关系路径下错误总结人物关系的案例.
   194   195   196   197   198   199   200   201   202   203   204