分词器文档

后处理器

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

后处理器

Python
Rust
Node

BertProcessing

class tokenizers.processors.BertProcessing

( sep cls )

参数

  • sep (Tuple[str, int]) — 一个包含 SEP 词符的字符串表示及其 ID 的元组
  • cls (Tuple[str, int]) — 一个包含 CLS 词符的字符串表示及其 ID 的元组

此后处理器负责添加 Bert 模型所需的特殊词符:

  • 一个 SEP 词符
  • 一个 CLS 词符

ByteLevel

class tokenizers.processors.ByteLevel

( trim_offsets = True )

参数

  • trim_offsets (bool) — 是否从生成的偏移量中修剪空格。

此后处理器负责修剪偏移量。

默认情况下,字节级 BPE(ByteLevel BPE)可能会在生成的词符中包含空格。如果您不希望偏移量包含这些空格,则必须使用此后处理器。

RobertaProcessing

class tokenizers.processors.RobertaProcessing

( sep cls trim_offsets = True add_prefix_space = True )

参数

  • sep (Tuple[str, int]) — 一个包含 SEP 词符的字符串表示及其 ID 的元组
  • cls (Tuple[str, int]) — 一个包含 CLS 词符的字符串表示及其 ID 的元组
  • trim_offsets (bool, 可选, 默认为 True) — 是否从生成的偏移量中修剪空格。
  • add_prefix_space (bool, 可选, 默认为 True) — 在预分词期间是否启用了 add_prefix_space 选项。这很重要,因为它定义了修剪偏移量的方式。

此后处理器负责添加 Roberta 模型所需的特殊词符。

  • 一个 SEP 词符
  • 一个 CLS 词符

它还负责修剪偏移量。默认情况下,字节级 BPE(ByteLevel BPE)可能会在生成的词符中包含空格。如果您不希望偏移量包含这些空格,则应使用 `trim_offsets=True` 初始化此后处理器。

TemplateProcessing

class tokenizers.processors.TemplateProcessing

( single pair special_tokens )

参数

  • single (Template) — 用于单个序列的模板
  • pair (Template) — 当指定了两个序列时使用的模板
  • special_tokens (Tokens) — 每个序列中使用的特殊词符列表

提供一种指定模板的方法,以便为每个输入序列添加相关的特殊词符。

以 `BERT` 分词器为例。它使用两个特殊词符来界定每个序列。`[CLS]` 总是用在第一个序列的开头,而 `[SEP]` 则添加到第一个序列和第二个序列的末尾。最终结果如下:

  • 单个序列: `[CLS] Hello there [SEP]`
  • 序列对: `[CLS] My name is Anthony [SEP] What is my name? [SEP]`

类型 ID 如下:

[CLS]   ...   [SEP]   ...   [SEP]
0      0      0      1      1

您可以使用 TemplateProcessing 实现这种行为:

TemplateProcessing(
    single="[CLS] $0 [SEP]",
    pair="[CLS] $A [SEP] $B:1 [SEP]:1",
    special_tokens=[("[CLS]", 1), ("[SEP]", 0)],
)

在此示例中,每个输入序列都使用 `$` 结构进行标识。此标识符让我们能够指定每个输入序列以及要使用的 type_id。如果未指定任何内容,则使用默认值。以下是指定它的不同方式:

  • 指定序列,默认 `type_id == 0`:`$A` 或 `$B`
  • 指定 *type_id*,默认 `sequence == A`:`$0`、`$1`、`$2`,……
  • 同时指定两者:`$A:0`、`$B:1`,……

特殊词符也使用相同的结构:`<identifier>(:<type_id>)?`。

警告:您必须确保提供正确的词符/ID,因为它们将被添加到编码中而不再进行任何检查。如果给定的 ID 在使用此 *PostProcessor* 的 *Tokenizer* 中对应完全不同的内容,可能会导致意外结果。

类型

Template (`str` 或 `List`)

  • 如果提供的是 `str`,则使用空格作为词符之间的分隔符。
  • 如果提供的是 `List[str]`,则为词符列表。

Tokens (`List[Union[Tuple[int, str], Tuple[str, int], dict]]`)

  • 一个包含词符及其关联 ID 的 `Tuple`,顺序不限。

  • 一个包含以下键的 `dict`:

    • “id”: `str` => 模板中指定的特殊词符 ID
    • “ids”: `List[int]` => 关联的 ID
    • “tokens”: `List[str]` => 关联的词符

    给定的字典要求提供的 `ids` 和 `tokens` 列表长度相同。

< > 在 GitHub 上更新