tokenizer和tokenizer.tokenize的区别

在大模型使用的过程中,经常会用到token。对于token的过程,有2种方法:tokenizer和tokenizer.tokenize。那么这2种方法之间有什么区别呢?示例代码如下所示。

current_prefix = "输入文本"

# 代码方式1
encoded_input = tokenizer(current_prefix, return_tensors="pt")

# 代码方式2
encoded_input = tokenizer.tokenize(current_prefix, return_tensors="pt")

具体来说,它们分别使用了不同的方法来处理输入文本,并且返回的结果格式也不同。下面详细解释两者的区别:

1. encoded_input = tokenizer(current_prefix, return_tensors="pt")

方法:
  • tokenizer():这是分词器的默认调用方法,它会执行完整的编码过程,包括分词、转换为 token ID、添加特殊标记(如 <s></s>)、以及根据需要填充或截断序列。
参数:
  • return_tensors="pt":指示分词器返回 PyTorch 张量(tensor)。这通常用于直接传递给模型进行推理或训练。
返回值:
  • 返回一个字典,包含以下键(取决于具体的分词器和配置):
    • input_ids:表示 token ID 的张量。
    • attention_mask:可选,表示注意力掩码的张量,用于区分有效 token 和填充 token。
    • token_type_ids:可选,用于区分不同句子类型的 token。
示例输出:
{
    'input_ids': tensor([[ 101, 7592,  102]]),        # Token IDs
    'attention_mask': tensor([[1, 1, 1]])            # Attention mask
}

2. encoded_input = tokenizer.tokenize(current_prefix, return_tensors="pt")

方法:
  • tokenizer.tokenize():这个方法仅执行分词操作,将输入文本拆分为 token 字符串列表。它不会直接生成 token ID 或其他编码后的结构。
参数:
  • current_prefix:输入文本字符串。
  • return_tensors="pt":这个参数实际上在这里是无效的,因为 tokenize 方法不支持此参数。tokenize 只返回 token 字符串列表。
返回值:
  • 返回一个由 token 字符串组成的列表,每个元素是一个 token。
示例输出:
['[CLS]', '你', '好', '[SEP]']

关键区别

  1. 功能不同

    • tokenizer() 执行完整的编码过程,返回的是可以传递给模型的张量。
    • tokenizer.tokenize() 仅执行分词操作,返回的是 token 字符串列表。
  2. 参数支持不同

    • tokenizer() 支持 return_tensors 参数,可以指定返回张量的类型(如 "pt" 表示 PyTorch 张量)。
    • tokenizer.tokenize() 不支持 return_tensors 参数,因为它只返回 token 字符串列表。
  3. 返回结果不同

    • tokenizer() 返回一个包含 input_ids 等信息的字典。
    • tokenizer.tokenize() 返回一个 token 字符串列表。
  4. 应用场景不同

    • 使用 tokenizer() 适用于准备模型输入,因为它提供了完整的编码信息。
    • 使用 tokenizer.tokenize() 适用于需要查看或调试分词结果的情况,但不适合直接传递给模型。

正确的使用方式

如果你的目标是准备输入数据并直接传递给模型进行推理或训练,应该使用第一种方式:

from transformers import AutoTokenizer

# 加载预训练的分词器
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")

# 示例前缀文本
current_prefix = "你好世界"

# 使用分词器对文本进行完整编码
encoded_input = tokenizer(current_prefix, return_tensors="pt")

print(encoded_input)

如果你想查看分词后的 token 字符串,应该使用第二种方式,但要注意 return_tensors 参数在这种情况下是无效的:

from transformers import AutoTokenizer

# 加载预训练的分词器
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")

# 示例前缀文本
current_prefix = "你好世界"

# 使用分词器仅进行分词
tokens = tokenizer.tokenize(current_prefix)

print(tokens)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值