在矩阵中查找句子对齐的路径

时间:2018-04-03 15:02:46

标签: python matrix nlp deep-learning

以下问题:我正在使用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%的精度。 现在人们会期望理想路径或多或少是对角线的,因为两个文本在同一个地方会包含或多或少相同的信息。但实际情况并非总是如此。句子可以很短,句子可以很长,有时段落丢失(翻译错误)。所以我想知道解决这个问题的好方法是什么。我的第一个想法是仅测量到对角线中心的距离,并给出一个惩罚,当元素离开那个中心时,它会降低可用性得分。然而,在缺少段落并因此更长的句子序列远离中心的情况下,这种方法是弱的。所以我正在寻找一种优化技术,但我不知道从哪里开始。

1 个答案:

答案 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结尾。

有了这个,你有效地将缺少的段落装入子矩阵。这种方法在很大程度上取决于高概率匹配的质量。