首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HuggingFace BPE训练器错误训练令牌器

HuggingFace BPE训练器错误训练令牌器
EN

Stack Overflow用户
提问于 2021-10-08 14:02:17
回答 1查看 226关注 0票数 1

我正在尝试使用迭代器而不是文件来训练ByteLevelBPETokenizer。当我实例化训练器时,一定是我做错了什么,但我不知道是什么。当我尝试用我的数据集(来自Kaggle的服装数据)+ BpeTrainer训练记号赋予器时,我得到一个错误。

代码语言:javascript
复制
**TypeError**: 'tokenizers.trainers.BpeTrainer' object cannot be interpreted as an integer

我正在使用Colab

第1步:安装令牌化器并下载Kaggle数据

代码语言:javascript
复制
!pip install tokenizers

# Download clothing data from Kaggle
# https://www.kaggle.com/nicapotato/womens-ecommerce-clothing-reviews/version/1?select=Womens+Clothing+E-Commerce+Reviews.csv

第二步:上传文件

代码语言:javascript
复制
# use colab file upload
from google.colab import files
uploaded = files.upload()

步骤3:清理数据(移除浮动)并运行trainer

代码语言:javascript
复制
import io
import pandas as pd  

# convert the csv to a dataframe so it can be parsed
data = io.BytesIO(uploaded['clothing_dataset.csv']) 
df = pd.read_csv(data)

# convert the review text to a list so it can be passed as iterable to tokenizer
clothing_data = df['Review Text'].to_list()

# Remove float values from the data
clean_data =  []    
for item in clothing_data:
  if type(item) != float:
    clean_data.append(item)   


from tokenizers import ByteLevelBPETokenizer
from tokenizers.processors import BertProcessing
from tokenizers import trainers, pre_tokenizers
from tokenizers.trainers import BpeTrainer
from pathlib import Path


# Initialize a tokenizer
tokenizer = ByteLevelBPETokenizer(lowercase=True)

# Intantiate BpeTrainer
trainer = BpeTrainer(
    vocab_size=20000,
    min_frequence = 2,
    show_progress=True,
    special_tokens=["<s>","<pad>","</s>","<unk>","<mask>"],)

# Train the tokenizer
tokenizer.train_from_iterator(clean_data, trainer)

错误-我可以看到培训师是BpeTrainer类型。

代码语言:javascript
复制
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-103-7738a7becb0e> in <module>()
     34 
     35 # Train the tokenizer
---> 36 tokenizer.train_from_iterator(clean_data, trainer)

/usr/local/lib/python3.7/dist-packages/tokenizers/implementations/byte_level_bpe.py in train_from_iterator(self, iterator, vocab_size, min_frequency, show_progress, special_tokens)
    119             show_progress=show_progress,
    120             special_tokens=special_tokens,
--> 121             initial_alphabet=pre_tokenizers.ByteLevel.alphabet(),
    122         )
    123         self._tokenizer.train_from_iterator(iterator, trainer=trainer)

TypeError: 'tokenizers.trainers.BpeTrainer' object cannot be interpreted as an integer

有趣的注意:如果我设置了输入trainer=trainer,我会得到这样的结果

代码语言:javascript
复制
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-104-64737f948e6d> in <module>()
     34 
     35 # Train the tokenizer
---> 36 tokenizer.train_from_iterator(clean_data, trainer=trainer)

TypeError: train_from_iterator() got an unexpected keyword argument 'trainer'
EN

回答 1

Stack Overflow用户

发布于 2021-10-09 08:40:02

我以前没有使用过train_from_iterator,但是看看HF docs,你似乎应该使用一个生成器函数。所以就像这样:

代码语言:javascript
复制
def clothing_generator():
  for item in clothing_data:
    if type(item) != float:
      yield item

然后是:

代码语言:javascript
复制
tokenizer.train_from_iterator(clothing_generator(), trainer)

可能会有帮助?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69497120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档