这部分是开始计算主题映射的概率,之前由于对这个过程比较模糊,因此浪费了许多时间,当后来对整个计算过程思路清晰时,整个代码写出来也就水到渠成了。
所以首先要解释如何计算主题映射概率,设源端为e,目标端为f。拿一个例子来说明(为了简化计算,这里假设每个句子源端和目标端各有三个主题分布,实际是各有100个主题分布)。
上面的e1,e2,e3表示的源端的语言的词,而对应的数字表示的是对应的主题分布。下面的f1,f2,f3表示的目标端的语言的词,对应的数字表示的是对应的主题分布。
首先要计算源端跟目标端所有词的共现频次,即P(e1,f1), P(e1,f2), P(e1,f3), P(e2,f1), P(e2,f2), P(e2,f3), P(e3,f1), P(e3,f2), P(e3,f3)。得到这样的9个共现频次。计算方法以P(e1,f1)为例。P(e1,f1)=e1*f1*对齐连线个数=0.2*0.1*3。
然后计算出所有n个句子中的这9个共现频次,并将所有的9个共现频次分别相加,得到e和f总的共现频次:P(e1,f1), P(e1,f2), P(e1,f3), P(e2,f1), P(e2,f2), P(e2,f3), P(e3,f1), P(e3,f2), P(e3,f3)。
之后再根据这9个共现频次计算出e1,e2,e3,f1,f2,f3出现的总的频次,以P(e1)为例,即P(e1)=P(e1,f1)+P(e1,f2)+P(e1,f3),类似的P(f2)=P(e1,f2)+P(e2,f2)+P(e3,f2)。
接下去就可以计算映射概率了,得到的映射概率为P(e1/f1), P(e1/f2), P(e1/f3), P(e2/f1), P(e2/f2), P(e2/f3), P(e3/f1), P(e3/f2), P(e3/f3)。计算方法是根据条件概率公式得来的,具体的计算方法以P(e1/f1)为例, P(e1/f1)= P(e1,f1)/P(f1)。
我们可以将这9个映射概率构成一个源端映射的矩阵和一个目标端映射的矩阵,即:
之后将每个句子的源端主题分布视为一个向量{P(f1),P(f2),P(f3)},与源端映射矩阵相乘得到直积,得到源端映射到目标端的主题分布P(e1),P(e2),P(e3)。同理可得目标端映射到源端的主题分布。
最后再将得到的映射主题分布插入进原始语料库中即可。
上图中第9行即是计算出的源端映射到目标端的主题分布,第11行是目标端映射到源端的主题分布。