続 IBM Model 1: null トークンを入れる
先日 IBM Model 1 を実装してみましたが、f 側の各文には null トークンを追加する必要がありました。Kohen 先生のスライドにある "Inserting Words" のところです。
そんなわけで、プログラムを少し修正します。コーパスを読み込んだ後、f 側の文に null トークンを追加するようにします。
def main(): sentence_pairs = load_sentence_pairs(sys.argv[1]) add_null_tokens(sentence_pairs) translation_prob = init_translation_prob(sentence_pairs) for i in range(0, 10): # initialize ...
add_null_tokens 関数はこれだけ。いい加減ですが __null__ という文字列で null トークンを表すことにしました。
def add_null_tokens(sentence_pairs): return [(e, f.append('__null__')) for (e, f) in sentence_pairs]
試してみます。少し数字が変わっているようです。
$ ./model1.py je_corpus.txt が There 0.927606288093 今日 today. 0.926667415895 明日 tomorrow. 0.874001094428 彼ら They 0.84912926054 彼 He 0.815038442431 先生 teacher 0.814664299858 父 father 0.813230475027 と island 0.808127514262 家 house 0.808048519329 日本 Japan 0.804555168981