领域知识图谱-中式菜谱知识图谱:实现知识图谱可视化和知识库智能问答系统(KBQA)

A knowledge graph for Chinese cookbook(中式菜谱知识图谱),可以实现知识图谱可视化和知识库智能问答系统(KBQA)

效果展示:

本项目开发的系统名称为AI Food Time,中文名为爱食光。如需体验可视化功能可直接访问点击可视化功能

通过收集网上完全公开的有关中式菜谱的数据,经过数据清洗和分析,转换为知识图谱的存储结构,并提供可视化展示与搜索智能问答等功能,为热爱美食与烹饪的人们提供方便快捷的中式菜谱服务,并以知识图谱的形式直观显示出不同菜品的关系及所用原料,在生活中具有很大的实际应用需求,包括:

  • 一类菜品的不同具体做法,例如水煮鱼包括麻辣水煮鱼、小清新版水煮鱼和家常版水煮鱼等;
  • 通过菜品与食材的关联关系,可以查询家中现有食材可以烹饪哪些菜品;
  • 可以直接显示出每种菜品所需主料,辅料,配料及其具体数量和烹饪方法,与网上的一些菜谱网页相比更加简单直观;
  • 可视化能够对各种菜品及关联关系有一个全局的认识,并能够显示每种菜品对应的图片;
  • 智能问答系统可采用自然语言进行提问,系统反馈答案结果。

项目码源链接见文末

跳转链接点击

1. 可视化展示及搜索:

同一类实体用相同颜色的节点表示,鼠标位于某个节点上方时显示其相关联的其它实体和之间的关系名称;

具有同一类实体显示开关,节点显示模式转换,并支持搜索功能;

每种菜品的信息栏中显示菜品对应的成品图片,并利用entities_aglin.py进行了实体对齐,消除了食品原料中的冗余信息。

  • mini版:包含10大类,50种菜品之间的关联关系,包括菜品制作的各种食材和制作步骤,轻量级的mini版同时支持电脑和手机浏览器打开,如需体验可直接进入访问入口
  • pro版(开发中):包含362大类,八千多种菜品之间的关联关系,包括菜品制作的各种原料和制作步骤。

2. 智能问答系统(KBQA):

基于构建的中式菜谱知识图谱,设计知识库问答KBQA系统,根据提出的和菜品有关的问题,系统自动给出答案,对于无法给出回答的情况系统也能进行回应。

  • 文件夹结构

    • /data:包含三元组数据aifoodtime_ntriples.nt
    • /external_dict:包含所有菜品和原料的实体列表entities_list.txt
    • query_main.py:KBQA主函数
    • jena_sparql_endpoint.py:启动jena_sparql服务
    • question2sparql.py:自然语言问题到SPARQL查询的转换
    • question_temp.py:自然语言到SPARQL的问题模板
    • vizdata2entities.py:从可视化存储数据到实体列表文件的转换
    • word_tagging.py:中文分词,使用的是jieba

基于构建的中式菜谱知识图谱,针对其中和菜品有关的各类问题,智能问答系统可以给出对应问题的答案。

本项目中的智能问答机器人名为小吃

使用本系统需要预装软件:

  • Apache Jena Fuseki:Jena Fuseki是一个SPARQL服务,通过HTTP提供使用SPARQL协议的REST式SPARQLHTTP更新,SPARQL查询和SPARQL更新。

    官网下载最新版本的fuseki压缩包,并解压到目标文件夹。在apache-jena-fuseki的目标文件夹下用命令行输入命令java -jar fuseki-server.jar,启动Fuseki服务。接着,打开浏览器,访问:http://localhost:3030,创建一个持久化数据库,并上传/data/aifoodtime_ntriples.nt三元组数据集,完成知识库的准备。
  • JAVA:运行fuseki需要java环境,如果没有安装JAVA8.0及以上版本,请前往oracle官网上下载最新版本的JDK然后安装,并配置环境路径。

    系统的流程为:解析输入的自然语言问句生成 SPARQL 查询,进一步请求后台基于 TDB 知识库的 Apache Jena Fuseki 服务, 得到答案。如果知识库中不存在问题的答案或者对于提出的自然语言问题无法理解,系统也会给出相应回复。

2.1可以提问的问题类型:

1.某一类菜包含的具体菜品;

  2.某一个特色菜品的所有原料;

  3.某一个特色菜品的主料,辅料和配料;

  4.某一个特色菜品的特点;

  5.某一个特色菜品的制作步骤。

2.2 使用方法:

在已经启动Fuseki服务的情况下,命令行输入python query_main.py,就可以启动问答系统,开始问答过程:

cd KBQA
python query_main.py

问答示例1:

请提问:
水煮鱼类包括哪些菜? 小吃:
家常水煮鱼、小清新版水煮鱼、水煮鱼、香辣水煮鱼、麻辣水煮鱼

问答示例2:

请提问:
如何制作水煮鱼? 小吃:
1: 准备食材。2: 将鱼清洗干净后切片,鱼骨和鱼肉分开放。黄豆芽去掉须根、辣椒剪成段、姜切片。接下来开始腌鱼。鱼骨中放入三四片姜、一勺料酒、半勺盐腌制二十分钟。鱼片中放入半只蛋清、一勺料酒、一勺淀粉、一小勺白胡椒粉后抓匀腌制二十分钟。 3: 锅中加适量清水,水烧开后将黄豆芽放入锅中,再放少许盐。待黄豆芽煮熟捞出放入大碗内。4: 锅中倒入少许油,油热后放入一勺郫县豆瓣酱和姜片煸炒出红油(喜欢更辣一点口感的,可以往锅里再放一些干辣椒煸炒出香味)。5: 往锅里倒入适量的热水。6: 将鱼骨放入锅内,大火烧开后转小火炖10分钟。(这个时候可以尝一下鱼汤的味道,然后根据自己的口味选择要不要放盐)鱼骨炖好后捞到装有黄豆芽的大碗中。7: 将鱼肉一片一片的放入锅中。(千万不要搅动,如需要,只要轻轻晃动几下锅即可)8: 煮开后立即将鱼肉捞出,再盛一些汤到碗中。9: 换一只干净的锅中,锅中倒入40毫升左右的食用油,然后将干辣椒和花椒放入锅中,小火煸炒至辣椒红亮,花椒出香味即可捞出放到鱼肉上。10: 将锅中剩下的油大火烧至稍稍冒烟,然后关火,把油淋在鱼肉上即可。

问答示例3:

请提问:
鱼香肉丝的特点是什么? 小吃:
难度: 简单、耗时: 二十分钟、口味: 鱼香、工艺: 炒

问答示例4:

请提问:
山楂红烧肉的主料具体都是哪些啊? 小吃:
香叶: 3片、五花肉: 400克、八角: 2个、冰糖: 20克、姜: 8克、山楂: 200克、桂皮: 4克、花椒: 20颗

问答示例5:

请提问:
可乐鸡翅需要哪些食材? 小吃:
料酒、姜、葱、八角、可乐、鸡翅中

问答示例6:

请提问:
水煮肉片的辅料是什么? 小吃:
油菜: 适量、绿豆芽: 适量、金针菇: 适量

问答示例7:

请提问:
今天天气如何? 小吃:
这个问题我真是无法回答。

项目码源链接见文末

跳转链接点击

更多优质内容请关注公号&知乎:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。

领域知识图谱-中式菜谱知识图谱:实现知识图谱可视化和知识库智能问答系统(KBQA)的更多相关文章

  1. 科技爱好者周刊(第 175 期):知识广度 vs 知识深度

    这里记录每周值得分享的科技内容,周五发布. 本杂志开源(GitHub: ruanyf/weekly),欢迎提交 issue,投稿或推荐科技内容. 周刊讨论区的帖子<谁在招人?>,提供大量程 ...

  2. 集合框架基础知识-----java基础知识

    Java集合框架 :接口:Collection.List .Set. Map:实现类:ArrayList.LinkedList.Vector.HashSet.TreeSet.HashMap.HashT ...

  3. java基础56 HTML5的标签知识(网页知识)

    本文知识点(目录): 1.html常用标签    2.html实体标签    3.html媒体标签    4.html超链接标签    5.html图片标签    6.html标个标签 7.html框 ...

  4. java线程基础知识----线程基础知识

    不知道从什么时候开始,学习知识变成了一个短期记忆的过程,总是容易忘记自己当初学懂的知识(fuck!),不知道是自己没有经常使用还是当初理解的不够深入.今天准备再对java的线程进行一下系统的学习,希望 ...

  5. es中的相关知识一(基本知识和id的定义)

    一.es中文档的元数据包括: 1._index: 索引(index)类似于关系型数据库里的数据库(database),事实上,我们的数据被存储和索引在分片(shards)中,索引知识把一个或多个分片分 ...

  6. 前端知识扫盲-VUE知识篇一(VUE核心知识)

    最近对整个前端的知识做了一次复盘,总结了一些知识点,分享给大家有助于加深印象. 想要更加理解透彻的同学,还需要大家自己去查阅资料或者翻看源码.后面会陆续的更新一些相关注知识点的文章. 文章只提出问题, ...

  7. 这些C++基础知识的基础知识你都学会了吗?

    一.C++基础知识 新的数据类型 C语言中的数据类型  C++中新的数据类型 思考:新的数据类型有什么好处?请看下面的代码:  可以见得:新的类型使整个程序更加简洁,程序变得易读易懂!这个就是bool ...

  8. 涨知识,涨知识 :ThinkPHP框架下Where条件查询Mysql数据库某字段是否为空

    代码虐我千百遍,我对代码如初恋~ 问题: 查询某字段app_date数据是否为NULL,正常我们实现的办法是: $map['app_data'] = array('eq','null'); $data ...

  9. 一些linux知识和http知识

    1 yum安装比源码编译安装  有的模块不能自定义安装  只能安装默认的模块进行安装 2 关于php的fastcgi 如果使用fastcgi 那么需要启动服务  如果不使用fastcgi 那么不需要启 ...

  10. c++ 基础知识 0001 const 知识2

    1.const修饰函数返回值 (1)指针传递 如果返回const data,non-const pointer,返回值也必须赋给const data,non-const pointer.因为指针指向的 ...

随机推荐

  1. 测试如何定位判断是前端的bug还是后端bug

    测试如何定位判断是前端的bug还是后端bug 软件测试工程师的职责是发现BUG,此外,如何体现个人价值,只是提出问题而不去解决,问题就永远得不到闭环.所以,一个资深的测试人员的基本功应该是这样的:深挖 ...

  2. Spring 学习笔记(3)控制反转 IoC

    本篇文章主要对 Spring 框架中的核心功能之一控制反转 (IOC,Inversion of Control)进行介绍,采用理论 + 实战的方式给大家阐述其中的原理以及明确需要注意的地方. 控制反转 ...

  3. Codeforces Round #656 (Div. 3)部分题解

    Codeforces Round #656 (Div. 3)题解 A.Three Pairwise Maximums 解题思路: 依照题意和样例,三个整数x,y,z必须有两个相同且都比第三个数大. 如 ...

  4. 3.1 《数据库系统概论》SQL概述及数据定义(模式SCHEMA、表TABLE、索引INDEX)

    前言 本篇文章学习书籍:<数据库系统概论>第5版 王珊 萨师煊编著 视频资源来自:数据库系统概论完整版(基础篇+高级篇+新技术篇) 由于 BitHachi 学长已经系统的整理过本书了,我在 ...

  5. 七、手动制作docker镜像

    系列导航 一.docker入门(概念) 二.docker的安装和镜像管理 三.docker容器的常用命令 四.容器的网络访问 五.容器端口转发 六.docker数据卷 七.手动制作docker镜像 八 ...

  6. vue插件实现循环滚动列表——vue-seamless-scroll

    https://blog.csdn.net/weixin_45389051/article/details/106379832?utm_medium=distribute.pc_relevant.no ...

  7. 项目管理之问,ChatGPT作答

    项目管理 帮我列一份<项目管理>的大纲 当然可以!以下是一个典型的<项目管理>大纲: I. 项目管理概述 A. 项目管理定义和目标 B. 项目管理的重要性和价值 C. 项目管理 ...

  8. FGC频繁导致CPU 飙升定位及JVM配置优化总结

    本文为博主原创,未经允许不得转载: 目录: 1. 定位消耗cpu 的服务进程和线程 2. 定位FGC 的原因 3. 定位jvm 参数是否导致FGC 4. 调试最优解的 jvm 配置 描述:项目中存在一 ...

  9. 03-Tcl数学表达式及expr命令

    3 Tcl书写表达式及expr命令 Tcl提供了有效的数学运算和逻辑运算功能.通过expr可以实现对数学表达式的分析和计算. 3.1 数学与逻辑运算符 运算符 说明 - + ~ ! 一元减(取负).一 ...

  10. [javaee] - tomcat 下载和配置环境变量

    以tomcat9为例 第一步 :下载到本地并解压文件 解压后: 第二步:配置环境变量,在系统变量中添加  CATALINE_HOME  ,路径为tomcat的目录 启动tomcat , 启动之后不要关 ...