chisataki’s blog

リコリス・リコイルじゃありません

分散表現の事前学習済みモデル(fastText等)からボキャブラリーを作成する(pytorch)

古いバージョンのtorchtext(~0.12)ではtorchtext.data.Field.build_vocab(vectors = ...) でベクトル化したボキャブラリーが簡単に作れましたが、新しいバージョンではこの機能がなくなってしまい、Gloveやword2vec, fastTextなど単語分散表現の学習済みモデルからどのようにボキャブラリーを構築すればいいのかわかりづらかったので、以下にまとめ

環境
torchtext : 0.16

from torchtext.vocab import FastText,vocab
# FastText単語ベクトル読み込み
myvec = FastText()
# ボキャブラリー作成
myvocab = vocab(ordered_dict = myvec.stoi, min_freq = 0, specials = ('<unk>',), special_first = True)

# 出力
myvocab.get_itos()
> ['<unk>, ',', 'the', '.', 'and', 'of',...]
len(myvocab)
> 999995

備考:

  • vocab()引数のordered_dict に myvec.stoi (単語:インデックス にマッピングされた辞書) を渡す
  • min_freq(ボキャブラリーに含める最小出現数) はデフォルトで1になっているため、0を指定する。(fastTextやGloVeから辞書を作る場合、myvec.stoi = {',': 0, 'the': 1, '.': 2, 'and': 3, 'of': 4,...}となり、0番目の単語が無視されてしまう)


参考

pytorch.org