5

我一直在考虑使用马尔可夫技术将丢失的信息恢复为自然语言文本。

  • 将全大写文本恢复为大小写混合。
  • 将重音/变音符号恢复为应具有但已转换为纯 ASCII 的语言。
  • 将粗略的音标转换回本地字母。

这似乎是从最难到最难的顺序。基本上,问题是根据上下文解决歧义。

我可以将维基词典用作字典,将维基百科用作语料库,使用 n-gram 和隐马尔可夫模型来解决歧义。

我在正确的轨道上吗?是否已经有一些用于此类事情的服务、库或工具?

例子

  • 乔治在灌木丛中丢失了他的 SIM 卡 ⇨ 乔治在灌木丛中丢失了他的 SIM 卡
  • tantot il rit a gorge deployee ⇨ tantôt il rit à gorge déployée
4

2 回答 2

4

我认为您可以将马尔可夫模型 (HMM) 用于所有三个任务,但也可以看看更现代的模型,例如条件随机场 (CRF)。此外,这对您的 google-fu 有一些帮助:

  • 将混合大小写恢复为全部大写的文本

这称为 truecasing。

  • 将重音/变音符号恢复为应该具有但已转换为纯 ASCII 的语言

我怀疑马尔可夫模型在这方面会遇到困难。OTOH,标记的训练数据是免费的,因为您可以使用目标语言中的一堆重音文本并去除重音。另见下一个答案。

  • 将粗略的音标转换回本地字母

这似乎与机器音译密切相关,已尝试使用配对 HMM(来自生物信息学/基因组工作)。

于 2010-12-22T20:54:18.703 回答
2

我将详细说明您将如何完成这些工作。

大写

这与命名实体识别非常接近,并且是“序列标记问题”的一个示例。专有名词最初应大写,作为首字母缩略词的组织名称应全部大写,然后还有其他示例不属于这些类别。在我看来,它因此比 NER 更难,因此基于字典的简单方法可能不是理想的解决方案。

如果您要使用隐马尔可夫模型,这相当于让 HMM 的“隐藏”状态为 [lowerCase, initCaps, allCaps] 并对您认为正确的一些数据进行训练(例如 Wikipedia,但还有许多其他来源也)。然后,您可以推断出您不确定是否正确大写的单词的隐藏状态。那里有很多 HMM 库,我相信您可以找到一个满足您需求的库。我会说尝试 HMM 是一个不错的初始选择。

非 ASCII 字符

如您所料,这是一个更棘手的问题。如果您尝试在单词级别使用 HMM 执行此操作,您将拥有大量隐藏状态,每个重音单词都有一个隐藏状态,这可能无法训练。这个问题在角色层面更容易处理,但如果只考虑前一个角色,就会失去大量的上下文。如果您开始使用 n-gram 而不是字符,您的缩放问题就会再次出现。简而言之,我不认为这个问题和上一个问题一样,因为标签数量太大,不能认为是序列标签问题(我的意思是你可以,只是不实用)。

我还没有听说过这方面的研究,那么我又不是专家。我最好的猜测是对您感兴趣的语言使用通用语言模型。您可以使用它来为您提供该语言中句子的概率。然后,您可以尝试替换可能带有重音的字符以给出这些句子的概率并取最可能的值,或者对差异使用一些阈值,或类似的东西。您可以在某种语言的大型语料库上相当轻松地训练 n-gram 语言模型。

我不知道这是否真的有效,无论是在准确性还是效率方面。我没有这个特殊问题的直接经验。

音译

不知道,说实话。我不知道你会在哪里找到数据来制作你自己的系统。简单搜索后,我找到了Google Transliteration服务(带有 API)。也许它可以满足您的需求。我什至没有足够的语言与其他脚本的经验来真正知道它在做什么。

于 2010-12-21T14:07:41.920 回答