首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将SQuAD数据中的标记索引映射到BERT标记器中的标记?

如何将SQuAD数据中的标记索引映射到BERT标记器中的标记?
EN

Stack Overflow用户
提问于 2021-03-17 11:21:43
回答 1查看 615关注 0票数 1

我使用SQuaD数据集来选择答案范围。在使用BertTokenizer对段落进行标记化之后,对于某些样本,答案的开始和结束索引不再与段落标记中的实际答案跨度位置匹配。如何解决这个问题?一种方法是相应地修改答案索引(以及训练目标)?但是该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2021-03-17 16:26:26

原始数据集中的标记化与BERT对输入进行标记化的方式不同。在BERT中,频率较低的单词被拆分为子词单元。您可以很容易地找到原始数据集中标记的字符偏移量。

在较新版本的Transformers中,标记器具有return_offsets_mapping选项。如果设置为True,则返回字符偏移量(元组(char_start, char_end))。如果在原始文本中有字符偏移量,则可以将它们映射到标记器的输出。

代码语言:javascript
复制
from transformers import BertTokenizerFast
tok = BertTokenizerFast.from_pretrained("bert-base-cased")
tok("I am a tokenizer.", return_offsets_mapping=True)

输出:

代码语言:javascript
复制
{'input_ids': [101, 146, 1821, 170, 22559, 17260, 119, 102],
 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0],
 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1],
 'offset_mapping': [(0, 0),  (0, 1), (2, 4), (5, 6), (7, 12), (12, 16), (16, 17), (0, 0)]}

在BERT [CLS][SEP]的情况下,(0, 0)跨度对应于技术标记。

当您使用原始标记化和BERT标记化获得偏移量时,您可以找出重新标记化字符串中的索引是什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66666525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档