summaryrefslogtreecommitdiff
path: root/research/knobloch/cmd/plot/main.go
blob: e754f6f833e5bbc2d913f031f767ef73e325fac5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package main

import (
	"fmt"
	"log"

	"go.jknobloc.com/x/research/knobloch"
	"go.jknobloc.com/x/shelf"
	"go.jknobloc.com/x/tokenizer/bpe"
)

const modelDir = "models/mbpe/minipile"

// the two families are swept separately, so a model is only ever compared
// against its own kind and the shared/unshared split never mixes m with mi
var families = []string{"m", "mi"}

func models(family string) []string {
	var r []string

	for alpha := 0; alpha <= 100; alpha += 10 {
		r = append(r, fmt.Sprintf("gpt2_50256_%s%03d_minipile", family, alpha))
	}

	return r
}

func main() {
	dict := shelf.Abs("results/knobloch/minipile/dict.txt")

	cfg := bpe.Config{
		Recover: false,
	}

	for _, family := range families {
		names := models(family)

		knobloch.SharedVocabs = nil

		for _, model := range names {
			knobloch.SharedVocabs = append(knobloch.SharedVocabs, shelf.Item(modelDir+"/"+model+"/vocab.json"))
		}

		for _, model := range names {
			dir := shelf.Item(modelDir + "/" + model)

			t, err := bpe.NewTokenizerFromFiles(shelf.Abs(dir+"/vocab.json"), shelf.Abs(dir+"/merges.txt"), cfg)

			if err != nil {
				log.Fatal(err)
			}

			if err := knobloch.TokenFrequencies(t, dict, model); err != nil {
				log.Fatal(err)
			}
		}
	}
}