我想使用hugging face的fill-mask管道来猜测一个掩码标记,然后将猜测的标记提取为一个单词。这段代码应该做到这一点:
!pip install -q transformers
model = pipeline('fill-mask')
outcome = model("Kubernetes is a container orchestration <mask>")[0]
#Prints: "Kubernetes is a container orchestration platform"
print(outcome['sequence'])
token = outcome['token']
#Prints: 1761
print(token)
#Prints: Ġplatform
print(model.tokenizer.convert_ids_to_tokens(token))
但是我发现它给我的是"Ġplatform"
而不是"platform"
-有没有人知道为什么会这样或者这里会发生什么?
2条答案
按热度按时间f87krz0w1#
这只是底层模型的一个特性(请参阅此处以检查这是否为
distilroberta-base
)。具体来说,蒸馏模型使用与其“教师模型”相同的标记器(在本例中为RoBERTa)。反过来,RoBERTa有一个令牌化器,它严格地工作,没有任何形式的空格,另请参阅OpenAI的GPT-2模型上的this thread,它使用相同的令牌化策略(见这里)。
具体来说,您可以注意到始终是相同的unicode字符
\u0120
表示新单词的开始。相比之下,由多个子字组成的单词将不具有用于后面的子字的这样的起始字符。也就是说,
complication
将被分成两个虚构的子字Ġcompli
cation
。因此,如果
Ġ
出现在单词中,您可以简单地删除它。s8vozzvw2#
截至2021-08-14,管道的输出包含您请求的所有信息。请注意,
token_str
可能包含空格。