以下问题:我正在使用python,我有两个不同语言的文本(texta和textb),它们都有很多句子。目的是将texta中的每个句子与textb的句子对齐。总长度大致相等,但句子数不大。它大约是1:1.3,所以有时texta的一个句子可能会得到两个textb句子。需要保留两个文本中句子的顺序。 现在我有一个CNN输出所有句子的矩阵,并且它们的可能性得分是彼此的翻译。 这可能以简化的方式看起来像这样:
[0.5,0.2,.0.0]
[0.1,0.6,0.4]
[0.2,0.3,0.8]
这些预测的准确率约为50%。因此,当我只选择每行的最佳结果时,我得到50%的精度。 现在人们会期望理想路径或多或少是对角线的,因为两个文本在同一个地方会包含或多或少相同的信息。但实际情况并非总是如此。句子可以很短,句子可以很长,有时段落丢失(翻译错误)。所以我想知道解决这个问题的好方法是什么。我的第一个想法是仅测量到对角线中心的距离,并给出一个惩罚,当元素离开那个中心时,它会降低可用性得分。然而,在缺少段落并因此更长的句子序列远离中心的情况下,这种方法是弱的。所以我正在寻找一种优化技术,但我不知道从哪里开始。
答案 0 :(得分:1)
我会尝试应用分而治之的策略。
正如您所指出的,由于省略了段落,您无法确定是否通过距离进行测量。所以这打破了你的接近检查。
由于你已经有了一个概率矩阵,我会尝试将那些明显匹配的句子固定。所以现在你有两个新的明显小问题。如果你可以重新运行概率程序,那么在新的小节中你将获得更准确的概率,因为你不会失去远处句子的空间。并且你会得到你刚加入的显着稀疏矩阵。您可以将完整图表矩阵更改为block diagonal matrix.
所以你从这个
开始a b c d e f g h i j k l m n o p q r s t u v w x y z e f .8 h i j k l m n o p q r s t u v w x y z a b c d a b c d .7 f g h i j k l m n o p q r s t u v w x y z e f g h i j k l m n o p q r s t u v w x y z .9 b c d a b c d e f g h i j k l m n o p q r s t u v w x y z e f g h i j k l m n o p q r s t u v w x y z a b c d a b c d e f g h i j k l m
你固定了3个高概率句子,你得到了这个(这是可能的,因为你明确说明了严格的订单保存)
1 0 0 0 0 0 0 0 0 0 0 0 0 0 a 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 y 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 s t u v 0 0 0 0 0 0 0 0 0 j k l m 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 k l 0 0 0 0 0 0 0 0 0 0 0 x y 0 0 0 0 0 0 0 0 0 0 0 o p 0 0 0 0 0 0 0 0 0 0 0 b c 0 0 0 0 0 0 0 0 0 0 0 0 0 1
注意:重新计算后,上面的字母与下面的字母不同。
所以你在对角线上留下了子矩阵,在其他地方留下了零。每个块在第一行和第一列中以1和0开始;并以最后一行和最后一列的1和0结尾。
有了这个,你有效地将缺少的段落装入子矩阵。这种方法在很大程度上取决于高概率匹配的质量。