【实验记录】BERT Tips

BERT Tips

今天开始用batch的数据跑了一下Bert的embedding encoding

之前用的直接是Bert for classification。所以就比较的简单了,这边记录一些小坑

注意的第一个点就是tokenizer了

这个倒是非常简单,简单的tokenizer会在句子前面加上[CLS]的,问题不大

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

batch数据的format是Union[text, List[str], List[List[str]]]

那么就是三种输入中的一种,其实也比较好理解,单句,句子集合,以及单词集合的集合。

注意上述代码在encode的时候

tokenizer(batch_input, padding=True, return_tensors='pt')

return_tensors处可以选择三种形式,pytorch, tensorflow以及numpy。这里就选择pt了。但是还有个问题,返回的都是在cpu上的,又需要额外进行处理成cuda格式的。

如下:

def cudafy(module):
    if torch.cuda.is_available():
        return module.cuda()
    else:
        return module.cpu()


def assign_cuda(tokenizer_output):
    tokens_tensor = cudafy(tokenizer_output['input_ids'])
    token_type_ids = cudafy(tokenizer_output['token_type_ids'])
    attention_mask = cudafy(tokenizer_output['attention_mask'])

    return {'input_ids': tokens_tensor,
            'token_type_ids': token_type_ids,
            'attention_mask': attention_mask}

最后值得注意的是,即使到了需要模型forward的时候,需要将输入**input才行,因为输入是一个dict,这样可以将其转换为参数。方便模型调用。

你可能感兴趣的:(实验记录,Python,PyTorch,python,深度学习,人工智能,自然语言处理,pytorch)