如何为在线手写识别的HMM模型创建参数?

How to create parameters for HMM model of online handwriting recognition?

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

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

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

HMM 可以很好地处理时态数据,但它可能不是解决这个问题的最佳选择。

如您所见,观察结果 {x, y, timestamp} 本质上是时间性的。因此,最好将其转换为 HMM 的 emissions,同时将数字保留为 HMM 的 states

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

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

  • 您还可以使 10000 种可能的状态与像素对齐,同时具有 10 种发射 (0-9)。
  • 然而,最常用的 HMM 算法有 运行 次与状态数的二次方相关(即最可能有效隐藏状态的维特比算法 运行s O (n_emissions * n_states^2))。你被鼓励保持较低的隐藏状态数量。

不请自来的建议

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

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