基于知识图谱的智能问答系统:fact-finder

文摘   2024-10-22 07:49   湖北  

项目简介

利用LLM和 Neo4j 数据库实现自动化查询与回答,实现了从用户问题到自然语言答案的自动化转换过程


特点

1、基于知识图谱:使用Neo4j 数据库存储和管理知识图谱,并利用它来回答问题

2、利用语言模型:使用语言模型将问题转化为Cypher查询语句,并根据查询结果生成自然语言答案

3、自动化查询与回答:将问题到自然语言答案的整个过程自动化,无需手动编写查询语句

入门

设置 PrimeKG Neo4j 实例,请参见此处

安装依赖项:

pip install -e .

FactFinder 的某些功能基于外部 API。虽然运行 FactFinder 需要 openai api 密钥,但语义学者以及拜耳的 linnaeusannotate 实体检测是可选的。设置环境变量:

export LLM="gpt-4o"                 # "gpt-4-turbo" as an alternativeexport SEMANTIC_SCHOLAR_KEY=""      # fill API key for semantic scholarexport OPENAI_API_KEY=""            # fill opanAI api keyexport SYNONYM_API_KEY=""           # Bayer internal linnaeusannotate synonym API keyexport SYNONYM_API_URL=""           # Bayer internal linnaeusannotate synonym API url

运行用户界面:

streamlit run src/fact_finder/app.py --browser.serverAddress localhost

使用附加参数运行(例如激活标准化图形同义词):

streamlit run src/fact_finder/app.py --browser.serverAddress localhost -- [args]streamlit run src/fact_finder/app.py --browser.serverAddress localhost -- --normalized_graph --use_entity_detection_preprocessing

以下标志可用:

--normalized_graph  =  Apply synonym replacement based on the normalized graph to the cypher queries before applying them to the graph.--use_entity_detection_preprocessing  =  Apply entity detection to the user question before generating the cypher query. The found entities will be replaced by their preferred terms and a string describing their category (e.g. "Psoriasis is a disease.") will be added to the query. This requires the corresponding api key ($SYNONYM_API_KEY) to be set. Also, the normalized graph should be used.--use_subgraph_expansion  =  The evidence graph gets expanded through the surrounding neighborhoods.


流程说明

采取以下步骤从用户问题得到自然语言答案和提供的证据:

  1. 第一步,使用语言模型调用生成对知识图谱的cypher 查询。为了实现这一点,提示模板包含图形的模式,即有关所有节点及其属性的信息。此外,提示模板可以通过对图中(某些)关系的自然语言描述来丰富,从而可以更好地理解它们对语言模型的含义。如果模型确定用户问题无法通过具有给定架构的图形来回答,则指示模型返回以标记字符串“SCHEMA_ERROR”开头的错误消息。然后检测到这一点并将错误消息直接转发给用户。

  2. 在第二步中,使用正则表达式对生成的cypher 查询进行预处理。

  • 首先,应用格式化以使后续正则表达式更易于设计。例如,这包括删除不必要的空格以及对所有字符串使用双引号。

  • 接下来,所有属性值都转换为小写。这假设已对图中的属性值进行了类似的预处理,并使查询能够防止大小写不匹配。

  • 最后,对于某些节点类型,查询中使用的任何名称都将替换为图中实际使用的同义词。例如,这是通过查找名称的同义词并检查图中实际存在的同义词来完成的。

  • 第三步,使用密码预处理的最终结果查询图。图形答案和密码查询是界面中呈现的证据的一部分,为用户提供了透明度。

  • 通过另一个语言模型调用,最终的自然语言答案是根据查询图的结果生成的。

  • 此外,还会根据图查询和结果生成子图。这作为用户的视觉证据。子图可以通过基于规则的方法生成,也可以在语言模型的帮助下生成。


  • 用户界面

    下图显示了“哪些药物用于治疗高眼压?”问题的应用程序的用户界面。。独立LLM和我们基于图形的混合系统的答案作为输出进行比较。此外,相关子图与生成的 Cypher 查询、图中的答案和使用的提示一起显示为证据。



    项目链接

    https://github.com/chrschy/fact-finder

    扫码加入技术交流群,备注开发语言-城市-昵称

    合作请注明


     

    关注「GitHubStore」公众号


    GitHubStore
    分享有意思的开源项目
     最新文章