1.加載
tokenizer是進行語言處理的基礎,transformer實現分詞器的基類是
tokenizer = AutoTokenizer.from_pretrained(tokenizer_type)
后面可以通過from_pretrained函數中的retrained_model_name_or_path()方法,指定路徑或者模型名稱來加載對應的分詞器。
文檔給的實例
tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased') # Download vocabulary from S3 and cache.
tokenizer = AutoTokenizer.from_pretrained('./test/bert_saved_model/') # E.g. tokenizer was saved using `save_pretrained('./test/saved_model/')`
分別從Amazon的s3里直接下載以及從本地路徑讀取。
2.分詞器的核心函數
2.1 tokenize
作為分詞器,首先一定是進行分詞操作。
from transformers.tokenization_bert import BertTokenizer
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased") print("詞典大小:",tokenizer.vocab_size) text = "hello world!I am Lisa." tokens = tokenizer.tokenize(text) print("分詞結果:",tokens)
詞典大小: 30522
分詞結果: ['hello', 'world', '!', 'I', 'am', 'Lisa', '.']
這里使用了Bert的分詞器,注意Bert會將不常用的詞匯進行細分,比如fearless,經過分詞會給出 'fear','##less'。使用雙#號表示連續詞匯的分詞。
2.2 Encode
編碼操作,實現了分詞tokenize和詞匯的編碼convert_tokens_to_ids。首先將會對輸入序列進行分詞操作,之后將分詞的結果進行編碼,將詞匯轉換為詞典中的id返回。
self.convert_tokens_to_ids(self.tokenize(text))
這里的結果是一個列表,包含多個id,如
[24,64,8636,414,125,23,982]
2.3 Decode
解碼操作,實現了詞匯的解碼convert_ids_to_tokens和轉換convert_tokens_to_string。首先會將給出的編碼輸入,如上面的id列表,轉換成相應的分詞結果,再轉換成相應的輸入序列。
self.convert_tokens_to_string(self.convert_ids_to_tokens(token_ids))