从现有的多输入最大熵分类器创建最大熵马尔可夫模型

机器算法验证 机器学习 马尔可夫链蒙特卡罗 最大熵 记忆
2022-03-11 04:32:19

我对最大熵马尔可夫模型 (MEMM) 的概念很感兴趣,我正在考虑将其用于词性 (POS) 标记器。目前,我正在使用传统的最大熵 (ME) 分类器来标记每个单词。这使用了许多功能,包括前面的两个标签。

MEMM 使用 Viterbi 算法通过马尔可夫链找到最佳路径(即为句子找到完整的最佳标签集,而不是为每个单词找到单独的最佳值)。阅读它,这似乎有一种美妙的优雅和简洁。但是,每个阶段仅依赖于前一阶段的“结果”(即根据马尔可夫链)。

但是,我的 ME 模型使用前两个阶段(即前两个单词的标签)。看来我有两种可能的方法:

  • 与传统的维特比实现一样,使用根据一个(前一个)阶段存储的一组路径。我的 ME 分类器将使用这个和之前的“冻结”阶段(冻结到所考虑的路径中)来产生传递函数。

  • 或者我编写算法来跟踪两个阶段。这更加复杂并且不再是真正的马尔可夫模型,因为每个传递函数(即来自 ME 模型)将取决于前两个阶段而不是一个阶段。

我觉得第二个会更准确,尽管它会更复杂。

在我的文献搜索过程中,我还没有找到任何这样的例子。试过了吗?两阶段方法是否提高了整体准确性?

1个回答

(这确实是我面临的一个真实问题,ML StackExchange 网站上线的时机非常完美:我已经完成了几天的书籍阅读和在线研究,并且即将开始实施。这是我的结果。虽然他们不严谨,我认为他们确实回答了我自己的问题。我暂时将这个问题留着,以防有人有任何有用的意见,尝试过类似的东西,或者有一些有用的参考资料。)

好的,在过去的几天里,我已经对此进行了编码。代码效率不高 - 大量的集合创建和复制,但练习的目的是看看它是否可以工作,以及它的工作情况如何。

我将我的数据随机分成两个列表:训练数据和测试数据。我正在通过传统的最大熵 POS 标记器运行测试数据;和我的新 MEMM 标记器。因此他们看到相同的测试数据,允许直接比较 - 由于所选数据的随机性,我看到测试之间存在一些差异(通常约为 0.2-0.4%)。

第一个测试使用具有单个阶段的 MEMM 标记器(即真正的马尔可夫链)。这始终比简单的 ME 标记器好约 0.1-0.25%。

接下来我尝试了两阶段方法,这似乎应该更正确。然而,结果更加微不足道。通常结果是相同的,偶尔会稍差一些,但可能大多数时候会稍微好一些(所以 +/-0.05%)。

MEMM 标记器很慢。好的,我没有应用任何优化,但是第一阶段(真正的马尔可夫链)慢了 N 倍(其中 N = 标签数),因为这是在每个步骤之间传输的路径数。2 阶段的实现速度慢了 N*N(因为传输的路径数量更多)。尽管优化可能会有所改善,但对于大多数实际应用来说,这可能太慢了。

我正在尝试的一件事是对路径应用较低的概率限制。IE。维特比路径在每次迭代期间被修剪,低于特定概率(当前 Log(total path P)<-20.0)的所有路径都被修剪。这确实运行得更快,但问题仍然在于它是否值得。我想可能不是。

为什么我们看不到任何改善?我认为这主要是由于 POS 标签的行为方式和最大熵模型。尽管模型基于前两个标签获取特征,但与前一个标签相比,前一个标签更重要。直观地说,这对英语来说是有意义的(例如,形容词后面通常跟着一个名词或另一个形容词,但这并不真正取决于形容词之前的内容)。