分散表現の事前学習済みモデル(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番目の単語が無視されてしまう)
参考