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

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

因此,我的疑问是:

是否有/在哪里可以找到一个好的算法,用于动态合并或“模式化”这个不断增长的观察字符串中最大的子字符串?例如:如果我迄今为止得到的是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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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