首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Roberta模型预处理文本中的混淆

Roberta模型预处理文本中的混淆
EN

Stack Overflow用户
提问于 2020-04-15 05:17:51
回答 1查看 1.3K关注 0票数 1

我想把Roberta模型应用到文本相似性上。给定一对句子,输入应采用<s> A </s></s> B </s>格式。我想出了两种可能的方法来生成输入ids,即

a)

代码语言:javascript
复制
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)

代码语言:javascript
复制
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模型对给定的两句话进行编码以计算句子相似度的正确方法是哪种。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-15 09:26:37

最简单的方法可能是直接使用HuggingFace的托卡器本身提供的函数,即encode函数中的encode参数,参见这里。这允许您直接输入两个句子,这将为您提供所需的输出:

代码语言:javascript
复制
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函数,具体来说,可以将其添加到示例中,如下所示:

代码语言:javascript
复制
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)

注意,在这种情况下,您必须生成没有任何特殊标记的序列list1list2,就像您已经正确地做过的那样。

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

https://stackoverflow.com/questions/61221810

复制
相关文章

相似问题

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