我一直在考虑使用马尔可夫技术将缺失的信息恢复为自然语言文本。
这似乎是最困难的最难的顺序。基本上,问题在于解决基于背景的歧义。
我可以使用维基词典和维基百科作为语料库,使用n-gram和隐马尔可夫模型来解决歧义。
我是否在正确的轨道上?是否已经有一些服务,库或工具用于此类事情?
实施例
答案 0 :(得分:4)
我认为您可以将Markov模型(HMM)用于所有三个任务,但也可以查看更现代的模型,如条件随机场(CRF)。此外,这里有一些你的google-fu的推动力:
这称为truecasing。
我怀疑马尔可夫模型在这方面会遇到困难。 OTOH,标记的训练数据是免费的,因为您可以在目标语言中取出一堆重音文本并去除重音。另见下一个答案。
这似乎与机器音译密切相关,已经使用pair HMMs(来自生物信息学/基因组工作)尝试过。
答案 1 :(得分:2)
我会详细说明如何实现这些目标。
这与Named Entity Recognition非常接近,是“序列标记问题”的一个例子。正确的名词应该首先大写,作为首字母缩略词的组织名称应该全部大写,然后还有其他例子不属于这些类别。在我看来,它比NER更难,所以一个简单的基于字典的方法可能不是一个理想的解决方案。
如果您使用隐马尔可夫模型,这相当于让HMM的“隐藏”状态为[lowerCase,initCaps,allCaps]并对您认为正确的某些数据进行训练(例如维基百科,但有还有许多其他来源)。然后,您可以推断出您不确定正确大写的单词的隐藏状态。那里有一堆HMM库,我相信你可以找到一个满足你需求的库。我想说尝试一个HMM是一个很好的初始选择。
正如您猜测的那样,这是一个更棘手的问题。如果您尝试在单词级别使用HMM执行此操作,您将拥有大量隐藏状态,每个重音单词一个,这可能无法训练。问题在角色级别更易处理,但如果您只考虑前一个角色,则会丢失大量的上下文。如果您开始使用n-gram而不是字符,则会出现缩放问题。简而言之,我不认为这个问题与前一个问题相似,因为标签的数量太大而不能将其视为序列标签问题(我的意思是你可以,它只是不实用)。
我还没有听说过这方面的研究,那我又不是专家。我最好的猜测是使用一般language model来表示您感兴趣的语言。您可以使用它来为您提供语言中句子的概率。然后你可以尝试替换可能重音的字符来给出那些句子的概率并且最有可能,或者在差异上使用某个阈值,或类似的东西。您可以在某种语言的大型语料库中相当容易地训练n-gram语言模型。
我不知道这是否真的有效,无论是在准确性还是效率方面。我没有这个特定问题的直接经验。
老实说,不知道。我不知道你在哪里可以找到自己制作系统的数据。经过简短的搜索,我找到了Google Transliteration服务(使用API)。也许它会照顾你所追求的。我甚至没有足够的其他脚本语言经验来真正了解它在做什么。