y_uti のブログ

統計、機械学習、自然言語処理などに興味を持つエンジニアの技術ブログです

続 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