检测动作序列中的模式

人工智能 分类 马尔可夫链 模式识别
2021-11-12 08:19:34

我必须分析看起来或多或少像这个JSON blob 的动作序列。我试图回答的问题是,当被要求执行某个特定任务时,是否存在不同用户采用的重复(子)模式——在这种情况下,任务是使用这个编辑器构建一个数学公式。特别是我想知道人们是否有多种明显不同的方式来构建相同的表达。

我想创建一个马尔可夫模型,但这只会给我最可能的长度为N的动作序列。一个明显的替代方法是构建树并计算某个路径在数据集中出现的次数。然而,表达构建过程的性质意味着序列可能被许多令人困惑的、不重要的动作(如 UNDO-REDO 的条纹、删除符号等)污染。

我可能会走“最长的公共子序列”路线,但我不确定这会告诉我是否有“显着不同”的方式来构建相同的表达式(用引号引起来,因为目前我没有严格的定义“显着不同”,但是,例如,一种方法是以正确的顺序拖放所有符号,另一种方法是将所有符号拖到画布上,然后将它们放入正确的位置)。

我认为这对于某些 AI 算法来说可能是一个不错的挑战,但我对此很陌生,所以我愿意接受建议。

1个回答

该任务属于信息提取和模式挖掘的重叠领域。信息提取涉及从数据中自动提取指定关系的实例。而模式挖掘涉及使用数据挖掘算法来发现数据库中数据之间有趣、意想不到和有用的模式(Philippe F)。

关于您的问题,您曾表示您已经尝试过效果不佳的马尔可夫模型。如果您更喜欢使用马尔可夫模型,更好的方法是使用分层马尔可夫模型。分层马尔可夫模型具有多个“级别”状态,可以描述不同粒度级别的输入序列。分层马尔可夫模型擅长在各种抽象层次上对人类行为进行分类,即可以进一步解释房间中的人位置以确定更复杂的信息,例如人正在执行的活动。

但是我的建议是你为这个问题实现随机森林分类器。随机森林通过相对简单的实现提供了出色的分类精度。此外,随机森林提供了检查树木以调整参数以提高准确性的能力。您还可以使用交叉验证来评估您的模型并计算其准确性。考虑使用 Python 的 Scikit-learn 库实现的随机森林分类器进行此分析。

在您的 json 代码操作包中,您已经声明了 DRAG_START、TRASH_SYMBOL、OPEN 和 CLOSE 等指标。我的建议是,为了使您的模型准确,您还需要声明较低级别的操作,例如:单击之间的时间、鼠标运动方向的变化、屏幕区域悬停计数、任务完成时间以及单击和后续鼠标之间的时间移动。

如需进一步参考,我建议您查看以下我认为对您的问题有用且与您的问题相关的论文。

用于信息提取的分层隐马尔可夫模型https://www.biostat.wisc.edu/~craven/papers/ijcai03.pdf

通过模式挖掘输入设备分析检测异常用户行为https://www.ignacioxd.com/files/bib/Dominguez2015-Concentration.pdf

用于痴呆症研究的可穿戴视频日常生活活动检测中的分层隐马尔可夫模型 https://arxiv.org/ftp/arxiv/papers/1111/1111.1817.pdf