我想请您提供一种方法,而不是一个具体的解决方案。我将首先描述我所面临的挑战情况,然后再提出问题。希望这样做更有意义。
我正在处理从自然语言中提取出来的数据。稍后,这些数据必须与某种“知识库”进行分析(它被引用是因为它不是真正的知识库,稍后我会详细介绍)。这个知识库非常大,目前只是理论上的,但很快就会超过可以存储在内存中的容量。我的两个问题是:
1. 将数据移动到数据库服务器上将意味着速度降低了...好吧,我不知道降低了多少倍,但它可能会轻松地降低几个数量级。也就是说,在运行时本地对象中查找数据的任务比在查询数据库中要快得多。 2. 所有庞大的数据并不是同时需要的。 实际上,只使用了很小一部分,因此,可能一些缓存可以解决这个问题。 我实际上希望已经有人面对过这个问题,缓存是正确的答案。
这个“知识库”目前只是一个复杂的数据结构,可以通过使用一些查询语言类似于查询数据库来查询它。也就是说,它不是一个简单的按键操作查找值,它需要多个子查询来识别匹配给定条件的对象。
只是为了给您更具体的例子,我正在尝试开发一个解析器(我称其为“预测性解析器”,如果这个术语已经被使用并且有其他含义,请原谅: )。主要思想是,不像langutils,我试图以一种方式来分配POS标记到单词,并通过应用一组规则来迭代地校正原始假设,而是在给定某个前缀的情况下,引擎将基于其“学习的知识”生成一个延续。也就是说,假设知识库学习到前缀“I could”几乎肯定后跟动词短语,因此解析器将假定动词短语并进行解析,除非出现错误。困难的部分是找到适当的前缀。糟糕的是,“I will”和“Thou shalt”等前缀会获得相同的优先级,也就是说,它们将按照随机、字母表顺序等相同的顺序检查是否匹配。然而,想法是在知识获取过程中,知识库将学习以这种方式存储和查找信息,以便首先查找最有可能的前缀,并且最不可能的前缀甚至不会最初加载。这个概念与CPU高速缓存的工作方式有些相似。因此,如果我写得太长了:我正在寻找一种数据结构,它的功能类似于CPU高速缓存,当前缓存的内容驻留在内存中,而未缓存的内容则存储在数据库或文件等中。
我正在处理从自然语言中提取出来的数据。稍后,这些数据必须与某种“知识库”进行分析(它被引用是因为它不是真正的知识库,稍后我会详细介绍)。这个知识库非常大,目前只是理论上的,但很快就会超过可以存储在内存中的容量。我的两个问题是:
1. 将数据移动到数据库服务器上将意味着速度降低了...好吧,我不知道降低了多少倍,但它可能会轻松地降低几个数量级。也就是说,在运行时本地对象中查找数据的任务比在查询数据库中要快得多。 2. 所有庞大的数据并不是同时需要的。 实际上,只使用了很小一部分,因此,可能一些缓存可以解决这个问题。 我实际上希望已经有人面对过这个问题,缓存是正确的答案。
这个“知识库”目前只是一个复杂的数据结构,可以通过使用一些查询语言类似于查询数据库来查询它。也就是说,它不是一个简单的按键操作查找值,它需要多个子查询来识别匹配给定条件的对象。
只是为了给您更具体的例子,我正在尝试开发一个解析器(我称其为“预测性解析器”,如果这个术语已经被使用并且有其他含义,请原谅: )。主要思想是,不像langutils,我试图以一种方式来分配POS标记到单词,并通过应用一组规则来迭代地校正原始假设,而是在给定某个前缀的情况下,引擎将基于其“学习的知识”生成一个延续。也就是说,假设知识库学习到前缀“I could”几乎肯定后跟动词短语,因此解析器将假定动词短语并进行解析,除非出现错误。困难的部分是找到适当的前缀。糟糕的是,“I will”和“Thou shalt”等前缀会获得相同的优先级,也就是说,它们将按照随机、字母表顺序等相同的顺序检查是否匹配。然而,想法是在知识获取过程中,知识库将学习以这种方式存储和查找信息,以便首先查找最有可能的前缀,并且最不可能的前缀甚至不会最初加载。这个概念与CPU高速缓存的工作方式有些相似。因此,如果我写得太长了:我正在寻找一种数据结构,它的功能类似于CPU高速缓存,当前缓存的内容驻留在内存中,而未缓存的内容则存储在数据库或文件等中。
抱歉我的标签可能不太清晰,无法准确描述我的问题。如果您知道问题所属的领域,请随意调整标签。
PS. 抱歉我的标签可能不太清晰,无法准确描述我的问题。如果您知道问题所属的领域,请随意调整标签。