我们是不是应该小写输入数据以(预)使用拥抱脸训练 BERT 无大小写模型?
Posted
技术标签:
【中文标题】我们是不是应该小写输入数据以(预)使用拥抱脸训练 BERT 无大小写模型?【英文标题】:Shall we lower case input data for (pre) training a BERT uncased model using huggingface?我们是否应该小写输入数据以(预)使用拥抱脸训练 BERT 无大小写模型? 【发布时间】:2020-10-09 11:40:29 【问题描述】:我们是否应该小写输入数据以(预)使用拥抱脸训练 BERT 无大小写模型?我查看了 Thomas Wolf (https://github.com/huggingface/transformers/issues/92#issuecomment-444677920) 的回复,但不完全确定他是否是这个意思。
如果我们将文本小写会发生什么?
【问题讨论】:
分词器应该为你做这件事。 【参考方案1】:Tokenizer 会处理这个问题。
一个简单的例子:
import torch
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', max_length = 10, padding_side = 'right')
input_ids = torch.tensor(tokenizer.encode('this is a cat', add_special_tokens=True, max_length = 10, pad_to_max_length = True)).unsqueeze(0)
print(input_ids)
input_ids = torch.tensor(tokenizer.encode('This is a Cat', add_special_tokens=True, max_length = 10, pad_to_max_length = True)).unsqueeze(0)
print(input_ids)
输出:
tensor([[ 101, 2023, 2003, 1037, 4937, 102, 0, 0, 0, 0]])
tensor([[ 101, 2023, 2003, 1037, 4937, 102, 0, 0, 0, 0]])
但如果是装箱的,
tokenizer = BertTokenizer.from_pretrained('bert-base-cased', max_length = 10, padding_side = 'right')
input_ids = torch.tensor(tokenizer.encode('this is a cat', add_special_tokens=True, max_length = 10, pad_to_max_length = True)).unsqueeze(0)
print(input_ids)
input_ids = torch.tensor(tokenizer.encode('This is a Cat', add_special_tokens=True, max_length = 10, pad_to_max_length = True)).unsqueeze(0)
print(input_ids)
tensor([[ 101, 1142, 1110, 170, 5855, 102, 0, 0, 0, 0]])
tensor([[ 101, 1188, 1110, 170, 8572, 102, 0, 0, 0, 0]])
【讨论】:
谢谢,我也是这么想的! 一般来说,在模型的 tokenizer_config.json 属性 do_lower_case 中指定了对大小写处理的分词器行为。【参考方案2】:我认为 bert-base-uncased 模型会将文本小写,而不管您传递给模型的内容如何。您还可以尝试使用玩具数据集并使用 BERT 标记器打印标记以便确认。
【讨论】:
以上是关于我们是不是应该小写输入数据以(预)使用拥抱脸训练 BERT 无大小写模型?的主要内容,如果未能解决你的问题,请参考以下文章
训练使用 AutoConfig 定义的拥抱脸 AutoModel
Huggingface 微调 - 如何在预训练的基础上构建自定义模型