Database 可调整的、版本化的图形数据库

Database 可调整的、版本化的图形数据库,database,data-structures,graph-databases,event-sourcing,Database,Data Structures,Graph Databases,Event Sourcing,我目前正在从事一个项目,我使用自然语言处理从文本中提取情感,将它们与上下文信息关联起来 上下文信息的定义:与描述实体在时间和空间中的情况相关的所有信息 我正在寻找的数据结构的描述: 有任意数量的实体(一个实体可以是个人,也可以是组,例如twitter哈希标签),我希望跟踪其中的上下文信息及其与其他实体的对话。对实体之间的对话进行处理,以便对其情感特征进行分类。基本情绪特征由一个向量组成,该向量按百分比指定其发生率:{恐惧:0.1,快乐:0.4,快乐:0.1,惊讶:0.9,愤怒:0} 实体还可以提

我目前正在从事一个项目,我使用自然语言处理从文本中提取情感,将它们与上下文信息关联起来

上下文信息的定义:与描述实体在时间和空间中的情况相关的所有信息

我正在寻找的数据结构的描述:

有任意数量的实体(一个实体可以是个人,也可以是组,例如twitter哈希标签),我希望跟踪其中的上下文信息及其与其他实体的对话。对实体之间的对话进行处理,以便对其情感特征进行分类。基本情绪特征由一个向量组成,该向量按百分比指定其发生率:
{恐惧:0.1,快乐:0.4,快乐:0.1,惊讶:0.9,愤怒:0}
实体还可以提交他们想要共享的任何上下文信息,例如:位置、室温、血压。。。等等(将其称为上下文变量)。 因为无论是实体的对话数量,还是他们想要共享的上下文变量数量,在任何时候都不清楚,所以数据结构需要能够相应地调整

重要:数据中的每一个更改也必须表示自己的状态,因为我期待着将状态中的某些更改相互关联起来

示例:鲍勃和爱丽丝的谈话显示出高度的恐惧。几个小时后,他们又进行了另一次对话,对话中不再表现出恐惧,而是快乐。 现在,有人可能会说,高强度的恐惧,然后是幸福,实际上可以被解释为情绪缓解

然而,为了能够提取这些信息,我需要能够将不同的状态相互关联起来。 使用上下文信息将它们和对话中跟踪的情绪关联起来也是如此。 这就是为什么每个状态更改都必须记录并可用的原因

为了让大家更清楚,我创建了一个新的示例,并将其附加到问题中

现在,我的实际问题是:我可以使用哪个数据库/数据结构来解决这个问题? 我研究过事件源数据库,但不太确信是否可以轻松地用它们重新创建图形结构。我还查看了图形数据库,但没有找到我要查找的内容


因此,如果这里有人至少能给我指出正确的方向,或者帮助我调整结构,从而解决问题,那就太好了。然而,如果有数据结构支持,我称之为带快照的图形数据库,那么易用性可能是最重要的过滤功能。

你有一个有趣的项目,我不直接处理类似的事情,但我只花2美分-

我觉得你的照片有点瑕疵。您正试图表示一个图形数据库超时,但实际上没有一种方法可以这样表示时间。 如果我们检查图像,您的对话和上下文数据会随着时间的推移而变化,但是“Bob”、“Alice”和“Malory”的事实实际上不会随着时间的推移而变化。让我们把它们从方程中去掉

相反,关注你可以随时间建模的东西,一段对话,一个上下文,一个位置。随着新数据的到来,这些情况将发生变化。这些对象是事件源模型的最佳候选对象。在您的应用程序中,对话将被建模为一系列单独的事件,您的聚合将使用这些事件,并将其组合和因子生成最终状态,这将是您的“缓解”决定

例如,你可以写一个逻辑,如果一个对话是愤怒的,那么一个非常愉快的事件发生了,然后主体现在感到解脱

我要做的是在连接到“事实”对象“Bob”、“Alice”等的graph db中对这些对话状态进行建模,而诸如“Alice现在感觉如何?”之类的查询将是通过对话状态的图形遍历,并在连接到Alice的上下文数据中进行分解

要回答诸如“5分钟前alice感觉如何?”之类的问题,您需要获取对话的所有事件流,并将它们回放到适当的点,然后检查对话的状态

TLDR:
将时间相关变量与时间独立变量分开,并使用事件源来建模时间。

有一个由Rich Hickey(Clojure名人)创建的名为Datomic的数据库,它存储随时间变化的事实。数据库中的每个条目都是一个带有时间戳的事实,仅在事件源中追加

这些事实可以用关系/逻辑语言ala Datalog(Prolog的再混合)查询。请参阅以获取快速概述。过去,它曾用于查询图形,并取得了一些成功:


虽然我没有使用Datomic的经验,但它似乎确实非常适合您的特定问题。

在给定时间的状态与具有给定模式的关系数据库之间存在明显的1:1对应关系。因此,随着时间的推移,您的状态集与不断变化的模式数据库之间存在着明显的1:1对应关系,即一个值为数据库加元数据的变量,由DDL和DML update命令操作。因此,没有证据表明您不应该只使用关系型DBMS

关系数据库管理系统允许在一定的计算复杂度下自动实现通用查询,并提供一定的优化机会。任何应用程序都可以有专门的查询,使专门的数据结构和运算符成为更好的选择。但您必须设计应用程序并了解这些特殊方面才能证明这一点。事实上,由于您的状态和关系状态之间存在明显的对应关系,这是不合理的

EAV经常被用来代替DDL和不断变化的模式。但是在EAV下,DBMS不知道您所关心的真正的表