当前位置:   article > 正文

Tokenizer使用(以BertTokenizer为例)

Tokenizer使用(以BertTokenizer为例)
'''
Tokenizer快速使用
在使用神经网络处理自然语言处理任务时, 我们首先需要对数据进行预处理, 将数据从字符串转换为神经网络可以接受的格式, 一般会分为如下几步: 

1、分词: 使用分词器对文本数据进行分词(字、字词);

2、构建词典: 根据数据集分词的结果, 构建词典映射(这一步并不绝对, 如果采用预训练词向量, 词典映射要根据词向量文件进行处理);

3、数据转换: 根据构建好的词典, 将分词处理后的数据做映射, 将文本序列转换为数字序列;

4、数据填充与截断: 在以batch输入到模型的方式中, 需要对过短的数据进行填充, 过长的数据进行截断, 保证数据长度符合模型能接受的范围, 同时batch内的数据维度大小一致。

如果分词后的结果如下,则说明引用的此表中无对应的汉字,[UNK] 表示占位符进行占位
原句:我爱中华大地
分词后:我 [UNK] 中 [UNK] 大 地  
'''

# 单条数据处理
from transformers import BertTokenizer
# 此处在bert-base-uncased文件夹下添加config.json和vocab.txt文件
tokenizer = BertTokenizer.from_pretrained(r"/bert-base-uncased")

# ====================针对于单句处理==========================
# 句子内容
sentence = '我爱中华大地'

# 句子分词
tokens_one = tokenizer.tokenize(sentence)
print(tokens_one)
# ['我', '爱', '中', '华', '大', '地']

# 词序列转数字序列 ( 获取对应此表ids )
ids = tokenizer.convert_tokens_to_ids(tokens_one)
print(ids)
# [2769, 4263, 704, 1290, 1920, 1765]

# 数字序列转词序列 ( 将ids转换为原文 )
sentence_one = tokenizer.decode(ids)
print(sentence_one)
# 我 爱 中 华 大 地

# 填充
ids_ids = tokenizer.encode(sentence, padding='max_length', max_length=15)
print('ids_ids', ids_ids)
# ids_ids [101, 2769, 4263, 704, 1290, 1920, 1765, 102, 0, 0, 0, 0, 0, 0, 0]

# 截断,需要添加 truncation=True
ids_ids2 = tokenizer.encode(sentence, max_length=3, truncation=True)
print('ids_ids2', ids_ids2)
# ids_ids2 [101, 2769, 102]

# 输出格式
tokenizer_one = tokenizer('我爱中华大地')
print(tokenizer_one)
# {'input_ids': [101, 2769, 4263, 704, 1290, 1920, 1765, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1]}

# 获取attention_mask 与 token_type_id
ids = tokenizer.encode(sentence, padding="max_length", max_length=15)
attention_mask = [1 if idx != 0 else 0 for idx in ids]
token_type_ids = [0] * len(ids)
print('attention_mask', attention_mask, '\ntoken_type_ids', token_type_ids)
# attention_mask [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0] 
# token_type_ids [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]


# 快速调用方法attention_mask 与 token_type_id, 其实tokenizer()也可以直接获得
inputs = tokenizer.encode_plus(sentence, padding="max_length", max_length=15)
print(inputs)
# {'input_ids': [101, 2769, 4263, 704, 1290, 1920, 1765, 102, 0, 0, 0, 0, 0, 0, 0], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]}


# ====================多句处理==========================
sentences = ["我爱中华大地", "我是中国人"]

tokens_many = tokenizer(sentences)
print(tokens_many)
# {'input_ids': [[101, 2769, 4263, 704, 1290, 1920, 1765, 102], [101, 2769, 3221, 704, 1744, 782, 102]], 'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]], 'attention_mask': [[1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1]]}

# 长度填充
tokens_many_new = tokenizer(sentences, padding='max_length', max_length=12)
print(tokens_many_new)
# {'input_ids': [[101, 2769, 4263, 704, 1290, 1920, 1765, 102, 0, 0, 0, 0], [101, 2769, 3221, 704, 1744, 782, 102, 0, 0, 0, 0, 0]], 'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], 'attention_mask': [[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]]}

# 单独获取长句ids
tokens_many_ids = tokenizer(sentences)
ids = tokens_many_ids['input_ids']
print(ids)
# [[101, 2769, 4263, 704, 1290, 1920, 1765, 102], [101, 2769, 3221, 704, 1744, 782, 102]]


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/607566
推荐阅读
相关标签
  

闽ICP备14008679号