繁体   English   中英

训练新的 AutoTokenizer 拥抱脸

[英]Training New AutoTokenizer Hugging Face

收到此错误:AttributeError: 'GPT2Tokenizer' object 没有属性 'train_new_from_iterator'

非常类似于拥抱面文档。 我改变了输入,就是这样(不应该影响它)。 它工作了一次。 2 小时后回到它,它并没有……什么都没有改变。 文档指出 train_new_from_iterator 仅适用于“快速”分词器,而 AutoTokenizer 应该默认选择“快速”分词器。 我最好的猜测是,它在这方面遇到了一些麻烦。 我也尝试降级变压器并重新安装但没有成功。 df 只是一列文本。

from transformers import AutoTokenizer
import tokenizers

def batch_iterator(batch_size=10, size=5000):
    for i in range(100): #2264
        query = f"select note_text from cmx_uat.note where id > {i * size} limit 50;"
        df = pd.read_sql(sql=query, con=cmx_uat)

        for x in range(0, size, batch_size):
            yield list(df['note_text'].loc[0:5000])[x:x + batch_size]

old_tokenizer = AutoTokenizer.from_pretrained('roberta')
training_corpus = batch_iterator()
new_tokenizer = old_tokenizer.train_new_from_iterator(training_corpus, 32000)

有两点需要牢记:

第一train_new_from_iterator仅适用于快速分词器。 在这里你可以阅读更多

第二:训练语料库。 应该是文本批次的生成器,例如,如果你拥有 memory 中的所有内容,则为文本列表列表。(官方文档

def batch_iterator(batch_size=3, size=8):
        df = pd.DataFrame({"note_text": ['fghijk', 'wxyz']})
        for x in range(0, size, batch_size):
            yield df['note_text'].to_list()

old_tokenizer = AutoTokenizer.from_pretrained('roberta-base')
training_corpus = batch_iterator()
new_tokenizer = old_tokenizer.train_new_from_iterator(training_corpus, 32000)
print(old_tokenizer( ['fghijk', 'wxyz']))
print(new_tokenizer( ['fghijk', 'wxyz']))

output:

{'input_ids': [[0, 506, 4147, 18474, 2], [0, 605, 32027, 329, 2]], 'attention_mask': [[1, 1, 1, 1, 1], [1, 1, 1, 1, 1]]}
{'input_ids': [[0, 22, 2], [0, 21, 2]], 'attention_mask': [[1, 1, 1], [1, 1, 1]]}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM