IBM Model I算法不同迭代次数输出概率无变化问题求助
IBM Model I算法不同迭代次数输出概率无变化问题求助
各位大佬好!我最近在照着伪代码实现IBM Model I,本来觉得逻辑没问题,但运行时碰到了一个奇怪的问题——不管我设置多少迭代次数(比如传10次和100次进去),输出的翻译概率矩阵t都是完全一样的,而且我感觉这个结果本身也不太合理,实在摸不着头脑,想请大家帮我看看哪里出问题了😭
先给大家贴一下我的代码:
sentence_pairs = [ (["Bugün", "dersimiz", "var"], ["Today","we","have","lecture"]), (["Yarın", "dersimiz", "yok"], ["Tomarrow","we","dont","have","lecture"]) ] e_vocab = [] f_vocab = [] for e_sentence, f_sentence in sentence_pairs: for e_token in e_sentence: if e_token not in e_vocab: e_vocab.append(e_token) for f_token in f_sentence: if f_token not in f_vocab: f_vocab.append(f_token) def IBM_Model(num_iterations): t = {} for e in e_vocab: t[e] = {} for f in f_vocab: t[e][f] = 1.0 / len(f_vocab) while(num_iterations > 0): num_iterations -= 1 count = {} total = {} for e in e_vocab: count[e] = {} for f in f_vocab: count[e][f] = 0.0 #for all e,f total[f] = 0.0 #for all f for (e_sentence, f_sentence) in sentence_pairs: s_total = {} for e in e_sentence: s_total[e] = 0 for f in f_sentence: s_total[e] += t[e][f] for e in e_sentence: for f in f_sentence: count[e][f] += ( t[e][f] / s_total[e] ) total[f] += ( t[e][f] / s_total[e] ) for f in f_vocab: for e in e_vocab: t[e][f] = count[e][f] / total[f] print(t) IBM_Model(10)
我明明在循环里做了EM步骤:先初始化count和total,然后计算每个词对的期望计数,最后更新t矩阵,但为什么迭代10次和100次的输出完全一样呢?而且这个概率结果看起来也不符合预期,比如同一个目标语词汇对应的源语词汇概率分布好像不太对。
麻烦各位帮我排查下问题,谢谢啦!
备注:内容来源于stack exchange,提问作者Emin-35
相关产品推荐
相关产品推荐

