python - 如何将我的知识图存储在数据库中以回答搜索查询?
问题描述
我是机器学习的新手,我正在尝试实现知识图并将其用于搜索目的(就像 Google 和 Bing 一样)。这是我的方法。我有一些文本文件。我对python很熟悉。
脚步:
- 从文本文档中提取三元组。我正在考虑为此使用斯坦福 OpenIE。(有没有更好的可用于 python 的库?)。
提取三元组并将它们加载到 csv 中后,我的数据如下所示:
Subject relation predicate
New Delhi IS_CAPITAL India
India Gate IS_LOCATED New Delhi
India HAS_STATES 29
Hyderabad IS_CAPITAL Telangana
Charminar IS_LOCATED Telangana
2. 将数据集导入 python 并根据TransH、TransE、ComplEx等任何模型对其进行训练。 3.然后使用Tensorflow和Ampligraph库(Ampligraph 示例)对其进行训练。
现在,一旦我获得了嵌入式模型,我该如何使用它来回答搜索查询?我如何将我的模型存储在数据库中,为此我应该使用什么数据库?
谢谢你。
附言。您可以访问“Ampligraph Example”的链接,了解训练后生成什么样的模型。
解决方案
根据我的经验,人们发现 neo4j 是最容易上手的图形数据库之一。Neo 使用属性图模型,因此您可以向节点和边添加属性。
在 AmpliGraph 示例中,它显示如下输出:
陈述 | 秩 | 分数 | 概率 |
---|---|---|---|
丹妮莉丝·坦格利安配偶卡斯特 | 4090 | -2.750880 | 0.060037 |
对于此数据,Daenerys Targaryen
将连接到Craster
边缘SPOUSE
。Rank、score 和 prob 可以作为边缘属性包含在内。
Neo 有一个使用桌面工具加载 CSV的教程。我还找到了这个python neo 驱动程序,但我不熟悉它的功能。
为了查询数据库,neo 使用了一种称为 cypher 的查询语言。您不会说您是否正在寻找自然语言查询,但如果您可能需要将其构建为系统的一个单独部分——解析自然语言并构建密码查询。
RDF 图是另一种选择,但这些工具有点复杂。特别是,向边添加属性将涉及更复杂的建模。如果您不熟悉图形数据库,Neo 是一个不错的起点。
推荐阅读
- php - 在 Laravel 中不使用表单删除数据
- android - Android Fragment 中函数的空返回值
- go - 在 Go 中收到 SIGINT 时是否调用延迟函数?
- konvajs - 如何在反应中为 KovaJS 实现撤消/重做功能?
- jquery - HTML/PHP 表单 - 更改时不刷新
- javascript - 我们可以使用 javascript 压缩 PDF 文件吗?如果是,怎么做?如果不是,为什么?
- c++-cli - 如何在 CLI-C++ 中访问交错数组的项目
- sql - SQL Select 跳过与前一行重复的行
- bash - 如何在“find (...) -exec (...) {} \;”中替换 {} 中的字符串 bash 命令?
- dart - 飞镖颤动:运行窗口消息“I/zygote”“I/Choreographer”