BertTokenizer的offset_mapping

本文探讨如何利用预训练的BERT tokenizer的`return_offsets_mapping`特性,轻松解决符号token化导致的匹配难题。通过实例展示如何获取offset_mapping并理解token与原文的对应关系,提高编码效率。
摘要由CSDN通过智能技术生成

在以下代码中,当我们把 add_special_tokens设置为True时,会添加[cls] [sep]等标签,有时一个符号会被token化为多个token, 此时我们很难将这些token和原文中的词对上。加入 return_offsets_mapping=True 参数将会在输出中多一个项: offset_mapping, 让我们了解token化后的token 位置和原文的关系,是不是很方便?

经常见到其它程序员自己写很多代码实现这个功能,事实上原始bert中就有实现,是不是很方便?

outputs = tokenizer.encode_plus(text, return_offsets_mapping=True, add_special_tokens=True)

token_span=outputs["offset_mapping"]

import torch
from transformers import BertTokenizerFast


MODELNAME="bert-base-chinese"

tokenizer=BertTokenizerFast.from_pretrained(MODELNAME)
text = "中国人不打中国人,说好的,40%的人死于意外,对不对?"
tokens = tokenizer.tokenize(text,add_special_tokens=True)
outputs = tokenizer.encode_plus(text, return_offsets_mapping=True, add_special_tokens=True)  #add_special_tokens=True 添加 [cls] [sep]等标志
token_span=outputs["offset_mapping"]
print(tokens)
print(token_span)

print("hello")

'''
offset_mapping  记录的是tokenizer后的token与原来的关系
'''

输出结果:

offset-mapping中 [0,0] 表示不在原文中出现的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值