GPT-2 Byte-Pair Encoding #
Lean-native support for GPT-2-style byte-level BPE tokenizers.
This module lives in NN.API.Text rather than a model file: any Transformer, diffusion LM, or
verifier that wants GPT-2-compatible tokenization should share the same implementation.
The implementation parses the standard vocab.json and merges.txt files directly in Lean.
The pre-tokenizer implements the GPT-2 regex shape:
's|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+
The Unicode \p{L}, \p{N}, and \s predicates are supplied by NN.API.Text.Unicode, rather
than Lean's ASCII-oriented Char.isAlpha / Char.isDigit helpers.
Data #
One token-to-id entry from GPT-2's vocab.json.
Instances For
Instances For
Instances For
Instances For
Instances For
Loaded GPT-2 BPE tokenizer.
- vocabulary : Array VocabularyEntry
Token vocabulary as loaded from
vocab.json. Ranked merge table from
merges.txt.- tokenIds : Std.HashMap String ℕ
Fast token-to-id lookup derived from
vocabulary. - tokensById : Std.HashMap ℕ String
Fast id-to-token lookup derived from
vocabulary. - mergeRanks : Std.HashMap (String × String) ℕ
Fast pair-to-rank lookup derived from
merges.
Instances For
Byte Escaping #
Bytes that GPT-2 leaves at their visible Unicode code points.
Instances For
First Latin-1 byte range kept visible by GPT-2 byte escaping.
Instances For
Second Latin-1 byte range kept visible by GPT-2 byte escaping.
Instances For
Bytes that do not need synthetic code points in GPT-2 byte escaping.
Instances For
GPT-2 byte-to-Unicode code-point table for all 256 byte values.
Instances For
GPT-2 byte-to-unicode escape for one byte.
Instances For
Shared inverse byte-escape lookup, constructed once for the fixed GPT-2 byte alphabet.
Instances For
Inverse of byteToChar, used when decoding BPE token strings back to UTF-8.
Instances For
Reversible GPT-2 byte-to-unicode escape for a string fragment.
Instances For
Decode GPT-2 byte-to-unicode escaped text back into a UTF-8 string.
Instances For
Pre-tokenization #
Character classes used by the GPT-2 pre-tokenizer branches.
- letter : RegexClass
- number : RegexClass
- other : RegexClass
Instances For
Character predicate for GPT-2's non-whitespace, non-letter, non-number regex branch.
Instances For
Test whether a character belongs to one of the GPT-2 regex classes.
Instances For
Consume one GPT-2 letter/number/other run, allowing a leading ASCII space.
Instances For
Consume the GPT-2 branch \s+(?!\S).
Python's regex engine greedily takes a whitespace run but may backtrack so the negative lookahead sees either end-of-input or another whitespace character. For a whitespace run before a non-space token, this consumes all but the final whitespace; the final ASCII space can then attach to the next letter/number/punctuation branch, matching GPT-2's standard token boundaries.
Instances For
Fuel-bounded worker for GPT-2 regex pre-token fragments before byte escaping and BPE merges.
The branch order mirrors GPT-2's tokenizer regex exactly: contractions, optional-space letter runs,
optional-space number runs, optional-space non-space/non-letter/non-number runs, whitespace not
followed by non-space, and finally a plain whitespace run. The fuel argument keeps this definition
total; pretokenize supplies enough fuel for the whole input.
Instances For
Split a string into GPT-2-style pre-token fragments.
Instances For
BPE Merging #
Find the lowest-ranked merge currently available in a symbol list.
Instances For
Build the token-to-id lookup table stored in a loaded GPT-2 BPE tokenizer.
Instances For
Build the id-to-token lookup table stored in a loaded GPT-2 BPE tokenizer.
Instances For
Build the pair-to-rank lookup table stored in a loaded GPT-2 BPE tokenizer.
Instances For
Assemble a tokenizer and its lookup maps from parsed GPT-2 vocabulary and merge tables.
Instances For
Loaded GPT-2 BPE tokenizer.
The representation is intentionally hidden. In particular, callers cannot construct a tokenizer
whose lookup tables disagree with its vocabulary or merge list; use load.
- representation : TorchLean.text.GPT2BPE.Internal.Tokenizer
- isCanonical : representation self = TorchLean.text.GPT2BPE.Internal.buildTokenizer (representation self).vocabulary (representation self).merges
Instances For
Wrap a canonical GPT-2 BPE representation at the public API boundary.
Reveal the canonical tokenizer representation only to implementation code.
Number of tokens in a loaded GPT-2 vocabulary.
Instances For
File Loading #
The standard GPT-2 vocab.json is a single flat JSON object from token strings to numeric ids.
Using Lean's fully general JSON object parser is convenient but slow for interactive examples
because it builds a 50k-entry tree before we immediately flatten it again. The small parser below
recognizes exactly the JSON shape used by GPT-2 vocab files and decodes JSON string escapes,
including \uXXXX escapes for byte-to-unicode code points.
Interpret one hexadecimal digit from a JSON unicode escape.
Instances For
Combine a JSON UTF-16 surrogate pair into one Unicode code point.
Instances For
Finish the object only when its closing brace is followed by JSON whitespace.
Instances For
Fuel-bounded loop for the specialized GPT-2 vocab.json object parser.
Instances For
Parse GPT-2 vocab.json, requiring unique tokens and contiguous token ids from zero.
Instances For
Load GPT-2 BPE files directly in Lean. Vocabulary tokens and ids must be unique, with ids
covering 0 .. vocabularySize - 1.
Set progress := true to print progress for larger vocab.json and merges.txt assets. The
optional label prefixes those messages.