首页 > 解决方案 > 如何为在线手写识别的HMM模型创建参数?

问题描述

我对隐马尔可夫模型有点缺乏经验。如果我想制作一个用于在线手写识别的 HMM 模型(这意味着用户在设备上实时绘制的字母的手写识别,而不是识别字母的图像),参数模型如何?比如有哪些:

我现在所拥有的可能是观察结果,即 { x, y, timestamp } 的数组,这是我从用户在平板电脑上的手指移动记录的每个点。

系统一次只能记录/训练/识别一个号码。这意味着我有 10 个(0 到 9)个州????还是10个分类结果??从这样的各种网站,我发现隐藏状态通常以“序列”的形式出现,而不是像这样的单一状态。那么在这种情况下,状态是什么?

标签: hidden-markov-models

解决方案


HMM 可以很好地处理时间数据,但它可能不是最适合这个问题的。

正如您所确定的,观察{x, y, timestamp} 本质上是时间性的。因此,最好将其转换为 HMM 的发射,同时保留数字作为 HMM 的状态

  • 明确地说,如果数字(0 到 9)被编码为隐藏状态,那么对于 100 x 100 的“图像”,发射可以是 10000 个可能的像素坐标之一。
  • 该模型预测每个时间戳(在线)的数字状态。输出是一个非唯一的像素位置。这很麻烦,但并非不可能编码(你只会有一个巨大的发射矩阵)。
  • 从哪个数字开始的初始状态概率可以是均匀分布(1/10)。更巧妙的是,您可以调用本福德定律来估算文本中出现数字的频率,并相应地分配您的起始概率。
  • 状态转换和排放概率是棘手的。一种策略是使用Baum-Welch(期望最大化的一种变体)算法训练您的 HMM,以迭代和不可知地估计您的过渡和排放矩阵的参数。训练数据将是具有随时间注册的像素位置的已知数字。

由于缺乏时间拟合,以另一种方式解决问题不太自然,但并非不可能。

  • 您还可以使 10000 个可能的状态与像素对齐,同时具有 10 个发射 (0-9)。
  • 然而,最常用的 HMM 算法的运行时间与状态数成二次相关(即,最可能有效隐藏状态的 Viterbi 算法运行O(n_emissions * n_states^2))。您被激励将隐藏状态的数量保持在较低水平。

不请自来的建议

也许您正在寻找的是卡尔曼滤波器,这可能是使用这种时间序列格式开发这种在线数字识别(在 CNN 之外似乎最有效)的一种更优雅的方式。

如果您的发射是多变量(即 x、y)且独立的,您可能还想查看结构化感知器。在这里,我相信 x、y 坐标应该是相关的,并且应该被尊重。


推荐阅读