此页面介绍了 Whisper 自动语音识别模型中使用的分词系统。分词是将文本转换为模型可处理的整数标记序列的过程。Whisper 的分词器既可以处理将文本编码为用于模型训练的标记,也可以处理将标记解码为用于生成转录文本。它还为时间戳、多语言支持和词级分词提供了特殊处理。
有关分词前音频处理的信息,请参阅 音频处理。有关分词在解码系统中如何使用的详细信息,请参阅 解码系统。
Whisper 分词器实现了 tiktoken 库的封装,提供了高效的分词功能,并对时间戳、语言标识符和控制标记进行了特殊处理。该分词器支持多语言和纯英语模式,每种模式都有不同的词汇表。
图示:分词器组件概述
来源: whisper/tokenizer.py131-327 whisper/tokenizer.py366-395
分词的主要类是 Tokenizer 类,它封装了底层的 tiktoken 编码功能,并加入了 Whisper 特有的功能。
encoding:tiktoken 编码对象num_languages:支持的语言数量language:当前语言(可选)task:当前任务(“转录”或“翻译”)sot_sequence:开始转录标记序列special_tokens:将特殊标记字符串映射到其 ID 的字典encode(text):将文本转换为标记 IDdecode(token_ids):将标记 ID 解码回文本(忽略时间戳标记)decode_with_timestamps(token_ids):解码带有时间戳注释的标记split_to_word_tokens(tokens):将标记序列分割为词级标记图示:分词器类结构
来源: whisper/tokenizer.py131-327
Whisper 使用几种特殊标记类别来控制模型的行为并促进多语言转录。
控制标记
<|startoftranscript|> (SOT):标记转录的开始<|endoftext|> (EOT):标记转录的结束<|transcribe|>:指示转录任务<|translate|>:指示翻译任务<|notimestamps|>:禁用时间戳预测语言标记
<|en|>,中文为 <|zh|>时间戳标记
<|t.tt|> 表示秒为单位的时间戳<|0.00|>、<|1.28|>、<|30.00|> 等图示:特殊标记类别
来源: whisper/tokenizer.py10-111 whisper/tokenizer.py340-356
开始转录 (SOT) 序列是 Whisper 提示机制的关键组成部分。它结合了多个特殊标记来控制模型的行为。
图示:SOT 序列构建
来源: whisper/tokenizer.py142-159 whisper/tokenizer.py239-240
get_tokenizer() 函数作为工厂,根据是否需要多语言功能来创建配置适当的分词器实例。
图示:分词器创建流程
来源: whisper/tokenizer.py366-395 whisper/tokenizer.py330-363
Whisper 使用两个不同的词汇表
词汇表以 tiktoken 兼容文件的形式存储,并由 get_encoding() 函数加载。
| 词汇表 | 基础标记 | 特殊标记 | 总大小 |
|---|---|---|---|
| GPT-2 | ~50,000 | ~1,600 | ~51,600 |
| 多语言 | ~50,000 | ~1,600 | ~51,600 |
注意:确切的词汇表大小取决于配置参数,例如 num_languages。
来源: whisper/tokenizer.py330-363 whisper/assets/gpt2.tiktoken
该分词器支持 99 种以上语言,并提供特定语言的标记。每种语言都有相应的语言代码,并被分配一个唯一的标记 ID。
图示:语言解析流程
来源: whisper/tokenizer.py10-128 whisper/tokenizer.py374-380 whisper/tokenizer.py219-223
对于需要词级处理(如词级时间戳)的应用,分词器提供了将标记序列分割为词级标记的方法。
分词器对不同语言类型使用不同的策略
图示:词级分词过程
来源: whisper/tokenizer.py277-327
编码过程相对直接,因为它委托给底层的 tiktoken 编码器。
解码过程有两种变体
timestamp_begin 的标记)分词器提供了一份非语音标记列表,这些标记可以在生成过程中被抑制,以防止采样实际音频中未说出的文本。
来源: whisper/tokenizer.py161-174 whisper/tokenizer.py242-276
来源: whisper/tokenizer.py366-395 whisper/tokenizer.py161-174
分词器包含验证其功能的测试用例
测试位于 `tests/test_tokenizer.py` 文件中。