数据挖掘算法用于动态合并重复子字符串?

我正在尝试构建一个人工智能单元。我计划首先收集感官输入(“观察”)到一个短期工作记忆列表中,不断地从这个列表中形成模式(“想法”),并当这些想法达到一定规模时(例如七个连锁观察),将它们提交到长期存储记忆中。对于哲学爱好者来说,这类似于洛克的《人类理解论》,但这不会是《白板》。需要有一个编码的底层结构。

因此,我的疑问是:

是否有/在哪里可以找到一个好的算法,用于动态合并或“模式化”这个不断增长的观察字符串中最大的子字符串?例如:如果我迄今为止得到的是ABCDABCABC,我想要一个ABC想法,一个D,以及另外两个ABC想法;然后,如果在短期记忆中观察到并添加另一个D,我想要一个ABCD标记,一个ABC标记,以及另一个ABCD标记。我不想使用最短公共子字符串,因为我需要在任意数量的字符添加后重新运行它。我认为我更倾向于某种易于搜索/修改的树结构。

这看起来是一个足够好的解决方案吗? http://www.cs.ucsb.edu/~foschini/files/licenza_spec_thesis.pdf。如果没有其他选择,我认为其他数据挖掘者可能会喜欢这个。


回答:

第一步:分词器。定义你认为{A,B,C,D}是什么以及什么不是。

  • 你需要至少一个额外的标记用于处理垃圾/杂项内容(好消息是,如果这个标记出现,后续的状态机将总是重置到其初始状态)
  • 你可能需要保留空白(这将再次导致一个额外的标记,以及在DFA或NFA识别器中更多的额外状态)
  • 也许你需要某种等价类:例如,将所有数字字符串包装成一种标记类型;折叠大小写;接受一定程度的拼写错误(这很难!)
  • 你可能需要一些特殊的虚拟标记类型,用于行首/行尾等情况。
  • 你必须在允许的误报漏报数量上做出一些选择。
  • 如果涉及文本,确保所有来源都使用相同的规范编码,或者预处理它们以使它们具有相同的编码。

构建分词器是调查你的语料库的绝佳方式:如果这是来自外部世界的真实数据,你会对你开始时不知道存在的奇怪情况感到惊讶!

第二步(识别器)在正确的分词下可能会容易得多。对于一个正常的确定性状态机(具有预定义的序列识别),你可以使用《龙书》或Crochemore中的标准算法。

对于模糊的自学习匹配器,我会从构建马尔可夫链或树开始。(也许是贝叶斯树,我不是这方面的专家)。我认为从一个标准状态机开始,并在节点和边上添加一些权重和计数不会很难。并动态地向图中添加边。或者删除它们。(我预计这将开始变得困难)

一个战略决策:你需要数据库吗?如果你的模型能装入内存,你就不需要,也不应该使用。(数据库不是为了获取一行并处理它,然后存储它,然后获取下一行,等等而设计的)如果你的数据无法装入内存,你将面临的不仅仅是数据建模问题。顺便说一下:我所知道的所有DNA组装器/匹配器,都是在内存中工作的,并且使用平面文件。(可能由数据库支持,以便于管理和检查)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注