1. 程式人生 > 其它 >torchtext.vocab.build_vocab_from_iterator的引數介紹以及使用

torchtext.vocab.build_vocab_from_iterator的引數介紹以及使用

build_vocab_from_iterator的引數介紹以及使用

因為使用的時候不知道specials引數是什麼意思,網上也沒找到一個比較好的解釋,所以記錄一下


這個函式的作用是從一個可迭代物件中統計token的頻次,並返回一個vocab(詞彙字典)

torchtext.vocab.build_vocab_from_iterator(iterator: Iterable, min_freq: int = 1, 
        specials: Optional[List[str]] = None, special_first: bool = True, 
        max_tokens: Optional[int] = None) → torchtext.vocab.vocab.Vocab

上述是官網API介面的定義形式,引數有五個,返回值是Vocab型別例項,五個引數分別是:

  • iterator:一個用於建立vocab(詞彙字典)的可迭代物件
  • min_freq:最小頻數。只有在文字中出現頻率大於等於min_freq的token才會被保留下來
  • specials:特殊標誌,字串列表。用於在詞彙字典中新增一些特殊的token/標記,比如最常用的'<unk>',用於代表詞彙字典中未存在的token,當然也可以用自己喜歡的符號來代替(PS:用"雞你太美"也行),具體的意義也取決於用的人。(PS:'<unk>'一般用於表示未知token,也可以用"雞你太美"表示未知token)
  • special_first:表示是否將specials放到字典的最前面,預設是True
  • max_tokens:即限制一下這個詞彙字典的最大長度。且這個長度包含的specials列表的長度

以上需要注意的幾點:

  • 若是specials設定為了False,則直接預設加在末尾
  • 通過該方法建立的vocab預設按照頻次從大到小的順序排列,若specials_firstTrue,則specials在最前面
  • max_tokens也是按照vocab的順序,從前往後的儲存\
  • 一般使用\<unk\>時,通常配合set_default_index()一起使用

舉例:

import torchtext

sentences = [["The", "cat", "sat", "on", "the", "mat"], ["The", "dog", "played", "with", "cat", "ball"], ['cat', 'like', 'dog', 'kidding']]
# min_feq設定最小頻率為1,即只要出現過的都不會在這裡被篩掉
# max_tokens設定為10,表示詞典的長度為10,但是因為有了specials,所以真正的詞典中有效token為9個
vocab = torchtext.vocab.build_vocab_from_iterator(sentences, min_freq=1, max_tokens=10, specials=['<unk>'])
# 設定預設索引,若是索引的單詞不在詞典內,則返回0,此例中0與<unk>對應
vocab.set_default_index(0)

# 檢視詞典(字典形式)
vocab.get_stoi()
# {'dog': 3,'<unk>': 0, 'kidding': 5, 'cat': 1, 'ball': 4, 'The': 2, 'like': 6, 'mat': 7, 'on': 8, 'played': 9}

# 檢視字典(列表形式)
vocab.get_itos()
# ['<unk>', 'cat', 'The', 'dog', 'ball', 'kidding', 'like', 'mat', 'on', 'played']

剛剛接觸這個領域,有什麼錯誤大佬們隨時指出