Last Updated on 2022-07-01 by Clay
今天我在離線環境中要使用 transformers 套件建立 ALBERT 模型時來處理 NLP 任務,當我透過 transformers 提供的 AutoTokenizer 讀取 ALBERT 模型的斷詞器:
tokenizer = AutoTokenizer.from_pretrained("/home/clay/transformers_model/albert_chinese_tiny")
我卻得到了以下錯誤:
TypeError: not a string
錯誤似乎是在告訴我,我所傳遞的並不是字串。然而這並不是問題發生的真正原因(我所傳遞的當然是字串)。
解決方法
目前我所看過的解決方法一共有三種,實際上哪種能解決我們的問題當然需要依據當前所遭遇的問題種類不同而定。
- 修正路徑錯誤(當你有網路環境的時候,直接打模型名稱即可下載。Ex. voidful/albert_chinese_tiny。無網路環境則不可用)
- 更新 transformers(2020 年時曾經有這個錯誤的 BUG,在更新後似乎可以解決)
- 使用 BertTokenizer(我的情況)
如果你跟我一樣是在使用 ALBERT 時遇到這個問題,可以考慮將斷詞器使用 BertTokenizer 來讀取。
參考以下說明:https://huggingface.co/voidful/albert_chinese_tiny
而這也正是我所遇到的問題。直接使用 AutoTokenizer 讀取模型時,似乎自動取用了 AlbertTokenizer,自然就發生了問題。
所以將程式修改成:
tokenizer = BertTokenizer.from_pretrained("/home/clay/transformers_model/albert_chinese_tiny")
這樣一來問題就迎刃而解了。
References
- https://stackoverflow.com/questions/70709572/typeerror-not-a-string-parameters-in-autotokenizer-from-pretrained
- https://github.com/huggingface/transformers/issues/5040
- https://github.com/huggingface/transformers/issues/3673