`offset

offset_mapping 是什么

offset_mapping是 transformers 库中分词器(tokenizer)在进行分词操作时返回的一个重要信息,它用于建立原始文本中的字符位置和分词后标记(tokens)之间的映射关系。借助 offset_mapping,你能够知晓每个标记在原始文本中对应的字符起始和结束位置,这在很多自然语言处理任务(像问答系统、命名实体识别等)里非常关键。

在这里插入图片描述
具体解释
  • offset_mapping 是一个元组列表:列表里的每个元组都代表一个标记在原始文本中的字符位置范围,元组的第一个元素是起始字符位置,第二个元素是结束字符位置。
  • 特殊标记的映射:特殊标记(例如 [CLS][SEP])的映射通常是 (0, 0),这表明它们在原始文本里没有对应的字符。
示例代码

下面是一个简单的示例,用来展示如何使用 offset_mapping

代码语言:javascript代码运行次数:0运行复制
from transformers import AutoTokenizer

# 加载分词器
tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased')

# 原始文本
text = "Hello, how are you?"

# 进行分词并获取 offset_mapping
encoding = tokenizer.encode_plus(
    text,
    add_special_tokens=True,
    return_offsets_mapping=True
)

# 打印 input_ids 和 offset_mapping
input_ids = encoding['input_ids']
offset_mapping = encoding['offset_mapping']

print("Input IDs:", input_ids)
print("Offset Mapping:", offset_mapping)

# 将 input_ids 转换回 tokens
tokens = tokenizer.convert_ids_to_tokens(input_ids)

# 打印每个 token 及其对应的 offset
for i in range(len(tokens)):
    token = tokens[i]
    start, end = offset_mapping[i]
    print(f"Token: {token}, Offset: ({start}, {end}), Text: {text[start:end]}")
代码解释
  1. 加载分词器:使用 AutoTokenizer.from_pretrained 加载 bert-base-uncased 分词器。
  2. 分词并获取 offset_mapping:调用 tokenizer.encode_plus 方法,设置 return_offsets_mapping=True 以获取 offset_mapping
  3. 打印结果:打印 input_idsoffset_mapping 以及每个标记对应的字符位置和文本。
示例输出
代码语言:javascript代码运行次数:0运行复制
Input IDs: [101, 7592, 1010, 2129, 2024, 2017, 102]
Offset Mapping: [(0, 0), (0, 5), (5, 6), (7, 10), (11, 14), (15, 18), (0, 0)]
Token: [CLS], Offset: (0, 0), Text: 
Token: hello, Offset: (0, 5), Text: Hello
Token: ,, Offset: (5, 6), Text: ,
Token: how, Offset: (7, 10), Text: how
Token: are, Offset: (11, 14), Text: are
Token: you, Offset: (15, 18), Text: you
Token: [SEP], Offset: (0, 0), Text: 

从输出可以看出,offset_mapping 清晰地展示了每个标记在原始文本中的字符位置。特殊标记 [CLS][SEP] 的偏移量为 (0, 0),这意味着它们在原始文本中没有对应的字符。而其他标记则对应着原始文本中的具体字符范围。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-04-12,如有侵权请联系 cloudcommunity@tencent 删除token系统自然语言处理mappingoffset