首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tokenizer.encode和tokenizer.encode_plus在拥抱脸上有什么不同

tokenizer.encode和tokenizer.encode_plus在拥抱脸上有什么不同
EN

Stack Overflow用户
提问于 2020-05-10 15:16:33
回答 1查看 16.6K关注 0票数 19

这是一个使用模型进行序列分类的示例,以确定两个序列是否是彼此的意译。这两个例子给出了两个不同的结果。你能帮我解释一下为什么tokenizer.encodetokenizer.encode_plus给出不同的结果吗?

示例1(使用.encode_plus()):

代码语言:javascript
复制
paraphrase = tokenizer.encode_plus(sequence_0, sequence_2, return_tensors="pt")
not_paraphrase = tokenizer.encode_plus(sequence_0, sequence_1, return_tensors="pt")

paraphrase_classification_logits = model(**paraphrase)[0]
not_paraphrase_classification_logits = model(**not_paraphrase)[0]

示例2(使用.encode()):

代码语言:javascript
复制
paraphrase = tokenizer.encode(sequence_0, sequence_2, return_tensors="pt")
not_paraphrase = tokenizer.encode(sequence_0, sequence_1, return_tensors="pt")

paraphrase_classification_logits = model(paraphrase)[0]
not_paraphrase_classification_logits = model(not_paraphrase)[0]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-11 22:33:04

主要区别在于encode_plus提供的附加信息。如果您阅读了关于各个函数的文档,那么对于encode()来说会有一些细微的不同

使用记号赋予器和词汇表转换in序列(整数)中的字符串。与执行self.convert_tokens_to_ids(self.tokenize(text))相同。

以及对encode_plus()的描述

返回一个字典,其中包含已编码的序列或序列对和附加信息:用于序列分类的掩码和溢出元素(如果指定了max_length )。

根据您指定的模型和输入句子,不同之处在于额外编码的信息,特别是输入掩码。由于您一次输入两个句子,BERT (以及可能的其他模型变体),预计会有某种形式的掩蔽,这允许模型区分两个序列,请参见here。因为encode_plus 提供此信息,而encode 不是,所以您会得到不同的输出结果。

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

https://stackoverflow.com/questions/61708486

复制
相关文章

相似问题

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