如何为翻译记忆库/缓存设计高性能密钥匹配算法?

时间:2014-02-21 09:05:37

标签: java algorithm caching nlp machine-translation

最近我被分配为新项目建立翻译记忆库。想法是TM是RPC层顶部的缓存层,如果TM中没有匹配,它将调用Google Translate API进行转换。我考虑使用源文本作为TM的关键,我需要一个模糊匹配算法来匹配查询文本和TM中的键。如果结果高于某个阈值(如0.85(范围为0到1)),将使用缓存的翻译文本而不是调用Google服务。

我已经阅读了很多文章/博客/论文,但仍然不知道从哪里开始。 TD-IDF +余弦相似性似乎不够好? Levenshtein距离? 语义相似性怎么样?但是如何?

我读到this 在评论中@mbatchkarov似乎提供了正确的方向。

有没有人在这个问题上有类似的经历?欢迎任何建议。

1 个答案:

答案 0 :(得分:1)

很多时候你所接受的问题的接受答案可以让你走得很远。您可以比较查询与缓存中所有查询之间的单词(引理)重叠。为了提高性能,您可以合并单词相似度以帮助您链接语义相似的单词。我链接到的同义词库构建软件是BSD许可的,因此您可以随意使用它。如果您需要使用它的任何帮助,开发人员(免责声明:我是团队的一员)将很乐意提供帮助。事实上,我有一些预先制作的叙词表。这些应该是软件的一部分,但它们太大而无法上传到github。

无论您采用哪种方法,都要注意有很多情况会导致效果不佳。这是因为该问题中讨论的方法是关于语义相似性的,并且您的应用程序可能需要语义等价。例如,“我喜欢大姜猫”和“我们喜欢大姜猫”或“我们喜欢小姜猫”的含义非常相似,但使用一个翻译作为另一个的翻译是错误的。