summaryrefslogtreecommitdiff
path: root/research/sander/reference.go
diff options
context:
space:
mode:
authorJonas Knobloch <jonas.knobloch@t-online.de>2026-04-17 16:07:14 +0200
committerJonas Knobloch <jonas.knobloch@t-online.de>2026-04-17 16:07:14 +0200
commit3fe37224ccc2500e7e767e5fc00163ef61182828 (patch)
tree7bd14e080c080b24026660beda42817a3c9dc77f /research/sander/reference.go
parent4d8f647bfb54899e3052931790e288da7af97050 (diff)
Add sander module
Diffstat (limited to 'research/sander/reference.go')
-rw-r--r--research/sander/reference.go59
1 files changed, 59 insertions, 0 deletions
diff --git a/research/sander/reference.go b/research/sander/reference.go
new file mode 100644
index 0000000..d6aa466
--- /dev/null
+++ b/research/sander/reference.go
@@ -0,0 +1,59 @@
+package sander
+
+import (
+ "go.jknobloc.com/x/tokenizer/bpe"
+)
+
+func UnusedTokensGPT2(tokenizer *bpe.Tokenizer) map[int64]struct{} {
+ unused := map[int64]struct{}{
+ 177: {},
+ 178: {},
+ 179: {},
+ 180: {},
+ 181: {},
+ 182: {},
+ 183: {},
+ 184: {},
+ 185: {},
+ 186: {},
+ 187: {},
+ }
+
+ alphabet := bpe.InitialAlphabet()
+
+ itoa := bpe.Itoa(tokenizer)
+
+ for id := range unused {
+ token, ok := itoa[id]
+
+ if !ok {
+ panic("unknown token id")
+ }
+
+ if token != string(alphabet[id]) {
+ panic("unexpected token")
+ }
+ }
+
+ return unused
+}
+
+func UnusedTokensMBPE(tokenizer *bpe.Tokenizer) map[int64]struct{} {
+ unused := make(map[int64]struct{})
+
+ vocab := bpe.Vocab(tokenizer)
+
+ mask := bpe.ReachableTokens(tokenizer, vocab)
+
+ for i := range vocab {
+ if mask[i] {
+ continue
+ }
+
+ unused[int64(i)] = struct{}{}
+ }
+
+ return unused
+}
+
+// TODO we could just filter some input data