通过拥抱人脸识别拾取的单词

2024-04-24 23:16:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用hugging face的填充掩码管道来猜测一个蒙面标记,然后将猜测的标记提取为一个单词。此代码应执行以下操作:

!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"——有人知道为什么会这样,或者这里会发生什么吗


Tags: 标记tokenmodeliscontainermaskprintskubernetes
2条回答

截至2021-08-14,管道输出包含您请求的所有信息。请注意token_str可能包含空格

from transformers import pipeline

unmasker = pipeline("fill-mask")

s="Excuse me sir, <mask> you speak English?"

unmasker(s,top_k=5)

[{'score': 0.9028477668762207,
  'sequence': 'Excuse me sir, do you speak English?',
  'token': 109,
  'token_str': ' do'},
 {'score': 0.05048234760761261,
  'sequence': 'Excuse me sir, did you speak English?',
  'token': 222,
  'token_str': ' did'},
 {'score': 0.015572326257824898,
  'sequence': 'Excuse me sir, can you speak English?',
  'token': 64,
  'token_str': ' can'},
 {'score': 0.007022920995950699,
  'sequence': 'Excuse me sir, Do you speak English?',
  'token': 1832,
  'token_str': ' Do'},
 {'score': 0.005521782673895359,
  'sequence': 'Excuse me sir, if you speak English?',
  'token': 114,
  'token_str': ' if'}]
  

这只是底层模型的一个特性(请参见here以检查这是否是distilroberta-base
具体来说,提炼模型使用与“教师模型”(本例中为RoBERTa)相同的标记器。反过来,RoBERTa有一个令牌化器,它严格不使用任何形式的空白,另请参见OpenAI的GPT-2模型上的this thread,该模型使用相同的令牌化策略(请参见here

具体地说,您可以注意到,表示新词开头的总是同一个unicode字符\u0120。相比之下,由多个子词组成的词对于后面的子词将没有这样的起始字符

也就是说,complication将被分成两个虚构的子词Ġcompli{}

因此,如果Ġ出现在word中,您可以简单地删除它

相关问题 更多 >