gpt4 book ai didi

python-3.x - 获取BERT中 '[UNK]'的值

转载 作者:行者123 更新时间:2023-12-03 16:51:32 32 4
gpt4 key购买 nike

我设计了一个基于BERT的模型来解决NER任务。我正在使用 transformers图书馆与 "dccuchile/bert-base-spanish-wwm-cased"预训练模型。当我的模型检测到一个实体但 token 是 '[UNK]' 时,问题就出现了。 .我怎么知道那个 token 后面的字符串是什么?

我知道无法将未知 token 恢复为原始 token ,但我想至少在将输入传递给模型之前捕获该值。

代码非常简单:

    sentenceIds = tokenizer.encode(sentence,add_special_tokens = True)

inputs = pad_sequences([sentenceIds], maxlen=256, dtype="long",
value=0, truncating="post", padding="post")

att_mask = torch.tensor([[int(token_id > 0) for token_id in inputs[0]]]).to(device)
inputs = torch.tensor(inputs).to(device)

with torch.no_grad():
outputs = model(inputs,
token_type_ids=None,
attention_mask=att_mask)

如您所见,非常简单,只需标记、填充或截断,创建 attentionMask 并调用模型。

我试过使用 regex ,试图找到它周围的两个 token 以及类似的东西,但我无法正确解决它。

最佳答案

分词器分两步工作。首先,它进行预标记化,这基本上是在空格上进行拆分并分隔标点符号。让我们看一下随机的捷克语句子:

tokenizer.basic_tokenizer.tokenize("Kočka leze dírou.")

这给你: ['kocka', 'leze', 'dirou', '.']
第二步,应用分词算法,得到:

tokenizer.tokenize("Kočka leze dírou.")

你得到: ['[UNK]', 'le', '##ze', 'di', '##ro', '##u', '.']
如果没有办法如何将token分割成子词,整个词就变成 [UNK] .以 ## 开头的代币附加到前面的,这样你就可以找出 [UNK]的位置。原来来自。

(在我看来,西类牙语 WordPiece 标记器无法解析仅包含拉丁字符的单词似乎很奇怪。)

关于python-3.x - 获取BERT中 '[UNK]'的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60192523/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com