我正在努力实现IBM模型1。我有一个平行的语料库,大约有2,000,000个句子(英语到荷兰语)。而且,两个文档的句子已经对齐了。其目的是将荷兰语句子翻译成英语,反之亦然。
我用来生成比对的代码是:
A = pair_sent[0].split() # To split English sentence
B = pair_sent[1].split() # To split Dutch sentence
trips.append([zip(A, p) for p in product(B, repeat=len(A))])现在,出现了单词数量不相等的配对句子(如英语中的10个,荷兰语翻译中的14个)。我们的教授告诉我们,我们应该使用NULLs或丢弃一个单词。但我不明白该怎么做?在哪里插入NULL,以及如何选择要删除的单词。
最后,我要求这对句子的词数相等。
发布于 2019-11-11 17:24:38
问题不在于句子的词数不同。毕竟,IBM模型为源句子中的每个单词计算目标句子中所有单词的概率分布,而不关心目标句子中有多少个单词。问题是,目标句子中可能存在没有对应物的单词。
如果您将一个空词附加到目标句子中(无论在哪里,因为IBM Model 1没有考虑重新排序),您还可以对一个单词在目标句子中没有对应词的概率进行建模。
然后,使用来自两边的一对IBM模型的对称化启发式完成实际的双语对齐。
https://stackoverflow.com/questions/58700304
复制相似问题