专栏名称: GitHubStore
分享有意思的开源项目
目录
相关文章推荐
丁香园临床用药指南  ·  雾化吸入布地奈德:这个顺序错了等于白用! ·  3 天前  
医药经济报  ·  徐景和在广东调研化妆品监管工作 ·  2 天前  
GSP办公室  ·  这种情况,可以共用上次的随货单吗? ·  2 天前  
药明康德  ·  渤健超5亿美元囊获潜在“first-in-c ... ·  5 天前  
51好读  ›  专栏  ›  GitHubStore

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

GitHubStore  · 公众号  ·  · 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 查询、图中的答案和使用的提示一起显示为证据。







    请到「今天看啥」查看全文