" /> " />

目 录CONTENT

文章目录

大模型的Tokenizers

听故事的人别流泪
2024-09-25 / 0 评论 / 0 点赞 / 15 阅读 / 6126 字

标记器是 NLP 管道的核心组件之一。它们的作用是:将文本转换为模型可以处理的数据模型只能处理数字,因此标记器需要将我们的文本输入转换为数字数据

模型只能处理数字,所以我们需要找到一种方法将原始文本转换为数字。这就是标记器的作用,有很多方法可以实现这一点。目标是找到最有意义的表示形式(即对模型最有意义的表示形式),并且如果可能的话,找到最小的表示形式。

tokenizers

比如:词、字符、字词分词等技术

An example of word-based tokenization.

An example of character-based tokenization.

A subword tokenization algorithm.

Using Tokenizers

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")


tokenizer("Using a Transformer network is simple")

tokenizer.save_pretrained("directory_on_my_computer")

Encoding

Translating text to numbers is known as encoding. Encoding is done in a two-step process: the tokenization, followed by the conversion to input IDs.

As we’ve seen, the first step is to split the text into words (or parts of words, punctuation symbols, etc.), usually called tokens. There are multiple rules that can govern that process, which is why we need to instantiate the tokenizer using the name of the model, to make sure we use the same rules that were used when the model was pretrained.

tokenization

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")

sequence = "Using a Transformer network is simple"
tokens = tokenizer.tokenize(sequence)

print(tokens)
['Using', 'a', 'transform', '##er', 'network', 'is', 'simple']

input ids

once converted to the appropriate framework tensor, can then be used as inputs to a model

ids = tokenizer.convert_tokens_to_ids(tokens)

print(ids)

说明:tokenizer.tokenize和tokenizer

在处理自然语言处理(NLP)任务时,`tokenizer` 是一个非常重要的工具,用于将文本序列转换为模型可以理解的标记(tokens)。你提到的两个表达式 `tokenizer.tokenize(sequence)` 和 `tokenizer("Using a Transformer network is simple")` 都用于将文本序列转换为标记,但它们的使用方式和返回结果可能有所不同,具体取决于 `tokenizer` 的实现。

### 1. `tokenizer.tokenize(sequence)`
- **调用方式**: 这种方式直接调用 `tokenizer` 对象的 `tokenize` 方法。
- **返回值**: 通常返回一个列表(list),其中包含文本序列中的所有标记(tokens)。
- **适用场景**: 这种方式适用于那些将 `tokenize` 方法作为其接口一部分的 `tokenizer` 实现。例如,一些早期的 NLP 库或自定义的 `tokenizer` 可能会使用这种方式。

### 2. `tokenizer("Using a Transformer network is simple")`
- **调用方式**: 这种方式将 `tokenizer` 对象本身作为函数调用,并传入文本序列作为参数。
- **返回值**: 返回的结果可能是一个字典(dict)或一个包含多个字段的复杂对象,具体取决于 `tokenizer` 的实现。例如,Hugging Face 的 `transformers` 库中的 `tokenizer` 通常会返回一个包含 `input_ids`、`attention_mask` 等字段的字典。
- **适用场景**: 这种方式适用于那些将 `tokenizer` 设计为可调用对象的实现。例如,Hugging Face 的 `transformers` 库中的 `tokenizer` 就是通过这种方式调用的。

### 示例
假设你使用的是 Hugging Face 的 `transformers` 库中的 `tokenizer`,那么这两种调用方式的结果可能如下:

```python
from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

# 使用 tokenizer.tokenize
tokens = tokenizer.tokenize("Using a Transformer network is simple")
print(tokens)
# 输出: ['using', 'a', 'transformer', 'network', 'is', 'simple']

# 使用 tokenizer 作为函数调用
result = tokenizer("Using a Transformer network is simple")
print(result)
# 输出: {'input_ids': [101, 2222, 1037, 5811, 2122, 2003, 3722, 1012, 102], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1]}
```

### 总结
- **`tokenizer.tokenize(sequence)`**: 返回一个简单的标记列表。
- **`tokenizer("Using a Transformer network is simple")`**: 返回一个包含多个字段的复杂对象,通常用于模型输入。

选择哪种方式取决于你使用的 `tokenizer` 的具体实现以及你希望得到的结果类型。

Decoding

将encoding里的input ids作为输入,解码出:"Using a Transformer network is simple"

decoded_string = tokenizer.decode([7993, 170, 11303, 1200, 2443, 1110, 3014])
print(decoded_string)

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区