字节对编码(Byte Pair Encoding)子词模型。
BpeModel
00 Remarks
BPE 的切分过程为:先把输入分片拆解为最小的符号单元(字符),随后不断地在相邻 符号对中挑选合并优先级最高(即在 merges 列表中出现得最早)的一对 予以合并,直到没有任何相邻符号对存在于合并规则表中为止。
单个分片长度为 L 时该过程的复杂度约为 O(L²),考虑到预分词之后的分片通常都很短 (一般不超过 20 个字符),实际开销可以忽略。此外这里还对分片的切分结果做了 有界缓存,重复出现的词可以直接命中缓存,显著提升长文本的吞吐量。
01 Syntax
Microsoft.VisualBasic.Data.NLP.ChineseTokenizer.HuggingFace.BpeModel
02 Methods
03 Properties
| Name | Overloads | Summary |
|---|---|---|
| VocabSize | 1 | 词表规模。 |
04 Fields
| Name | Overloads | Summary |
|---|---|---|
| CacheCapacity | 1 | 分片切分结果缓存的容量上限,超出之后整体清空。 |
| _ranks | 1 | 合并规则表:键为 "左符号 右符号",值为合并优先级(越小越优先)。 |
05 Members
ApplyAffixes(
String, Boolean, Boolean)为子词附加 continuing_subword_prefix 与 end_of_word_suffix。
GetMerged(
String)读取分片的合并结果,优先命中缓存。
MergeWord(
String)对单个分片执行字节对合并。
Remarks
每一轮扫描全部相邻符号对并选出优先级最高的一对进行合并,直到再也找不到 可用的合并规则为止。这里按代理对(surrogate pair)而非 UTF-16 码元 进行初始拆分,从而保证 emoji 等增补平面字符不会被拆散。
VocabSize
词表规模。
CacheCapacity
分片切分结果缓存的容量上限,超出之后整体清空。
_ranks
合并规则表:键为 "左符号 右符号",值为合并优先级(越小越优先)。
TokenToId(
String)IdToToken(
Int32)Tokenize(
String)