从两个对齐的文本构建字典?

时间:2012-09-03 13:46:58

标签: nlp machine-translation

我有一个文本语料库,它已经通过构造在句子级别对齐 - 它是一对英语字符串列表及其他语言的翻译。我有大约10 000个字符串,每个字符串5到20个单词及其翻译。我的目标是尝试建立一个翻译质量的度量标准 - 当然是自动的,因为我正在处理我一无所知的语言:)

我想从这个翻译列表中建立一个字典,它可以让源英语字符串中每个单词的(最可能的)翻译成另一种语言。我知道字典将远非完美,但我希望我可以有一些足够好的东西来标记一个单词没有被一致翻译,例如,如果我的字典说“Store”将由“Magasin”翻译成法语然后,如果我发现某个地方“商店”被翻译为“精品店”,我可以怀疑有些事情是错误的。

所以我需要:

  1. 从我的语料库
  2. 建立一个字典
  3. 对齐字符串/翻译对中的单词
  4. 你对如何做到这一点有很好的参考吗?已知的算法?我找到了许多关于文本对齐的链接,但它们似乎在句子级别比在单词级别更多...

    关于如何自动检查翻译是否一致的任何其他建议将非常感谢!

    提前致谢。

3 个答案:

答案 0 :(得分:3)

免费提供(特别是GPL许可的)用于字对齐的工具是 GIZA ++ 。我培训其他答案中提到的着名IBM模型,以及其他统计模型。

您可以从GIZA++ site at Google Code下载它,并在GIZA++ Apertium上简要介绍其用法。归结为程序

  1. 创建你的平行语料库,句子对齐(你似乎已经有了这个)
  2. 应用GIZA ++中包含的plain2snt工具,以GIZA ++格式提取单词列表和句子列表
  3. (可选 - 仅用于某些型号:)使用mkcls工具生成单词类(也包括在内)
  4. 运行实际的单词对齐工具GIZA++。您可以使用各种可选配置设置来确定生成的模型类型。
  5. 在执行此操作之前,您必须通过运行make从源代码构建工具。代码是用C ++编写的,并且与最近的GCC版本编译得很好。

    最后一些注意事项:

    • 每个单词都有多个可能的翻译;你不应该依赖于在一个文本中找到的特定翻译必然是错误的假设,因为同一个词在另一个文本中的翻译方式不同;

    • 可以将一个单词翻译成几个单词的(不一定是连续的)序列,反之亦然。有些词根本没有翻译;

    • GIZA ++是一种统计工具,可以近似正确的单词对齐;它产生的许多路线都有问题或不正确。

答案 1 :(得分:2)

这是一个非常标准的统计机器翻译问题,称为“单词对齐” IBM的研究人员开发了大量基于EM集群的模型,我认为它是当今开发的大多数其他冷却器模型的基础。 谷歌为'ibm词对齐模型'找到有关IBM模型1到5的信息 这个演示文稿 - http://www.stanford.edu/class/cs224n/handouts/cs224n-lecture-05-2011-MT.pdf似乎是一个很好的起点。

答案 2 :(得分:0)

你在单词之间使用空格吗?无论您使用什么字符,都可以在Linux中查看slice命令。它使您能够过滤空格和其他字符之间的单词。