我想把Roberta模型应用到文本相似性上。给定一对句子,输入应采用<s> A </s></s> B </s>格式。我想出了两种可能的方法来生成输入ids,即
a)
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained('roberta-base')
list1 = tokenizer.encode('Very severe pain in hands')
list2 = tokenizer.encode('Numbness of upper limb')
sequence = list1+[2]+list2[1:]在这种情况下,序列是[0, 12178, 3814, 2400, 11, 1420, 2, 2, 234, 4179, 1825, 9, 2853, 29654, 2]
b)
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained('roberta-base')
list1 = tokenizer.encode('Very severe pain in hands', add_special_tokens=False)
list2 = tokenizer.encode('Numbness of upper limb', add_special_tokens=False)
sequence = [0]+list1+[2,2]+list2+[2]在这种情况下,序列是[0, 25101, 3814, 2400, 11, 1420, 2, 2, 487, 4179, 1825, 9, 2853, 29654, 2]
在这里,0表示<s>令牌,2表示</s>令牌。我不确定用Roberta模型对给定的两句话进行编码以计算句子相似度的正确方法是哪种。
发布于 2020-04-15 09:26:37
最简单的方法可能是直接使用HuggingFace的托卡器本身提供的函数,即encode函数中的encode参数,参见这里。这允许您直接输入两个句子,这将为您提供所需的输出:
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained('roberta-base')
sequence = tokenizer.encode(text='Very severe pain in hands',
text_pair='Numbness of upper limb',
add_special_tokens=True)当您处理非常长的序列时,这特别方便,因为encode函数会根据truncaction_strategy参数自动减少长度。很明显,如果只是短序列,你就不用担心这个了。
或者,您也可以使用更显式的build_inputs_with_special_tokens() RobertaTokenizer函数,具体来说,可以将其添加到示例中,如下所示:
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained('roberta-base')
list1 = tokenizer.encode('Very severe pain in hands', add_special_tokens=False)
list2 = tokenizer.encode('Numbness of upper limb', add_special_tokens=False)
sequence = tokenizer.build_inputs_with_special_tokens(list1, list2)注意,在这种情况下,您必须生成没有任何特殊标记的序列list1和list2,就像您已经正确地做过的那样。
https://stackoverflow.com/questions/61221810
复制相似问题