BrodyMakezAI commited on
Commit
333396f
·
verified ·
1 Parent(s): 13a1e12

Upload 6 files

Browse files
Files changed (6) hide show
  1. README.md +41 -0
  2. config.json +12 -0
  3. model.safetensors +3 -0
  4. modeling_parvus.py +27 -0
  5. run_parvus.py +17 -0
  6. vocab.json +28 -0
README.md ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ tags:
4
+ - text-generation
5
+ - tiny
6
+ - 1-parameter
7
+ - newborn
8
+ ---
9
+
10
+ # Parvus 1.1
11
+
12
+ *Parvus* (Latin: "little"), now with a newborn brain. **1 parameter.** 26-token vocabulary (A-Z).
13
+
14
+ ## Model description
15
+
16
+ Parvus 1.1 has just arrived and has no idea what language is. Its single
17
+ parameter is a blank slate (0.0) that scores every letter identically, so every
18
+ letter is equally likely. Each response is a few random letters. It is trying
19
+ its best.
20
+
21
+ ## Benchmarks
22
+
23
+ | Benchmark | Score |
24
+ |---|---|
25
+ | Parameters | 1 |
26
+ | Coherence | Newborn (it just arrived) |
27
+ | Vocabulary | 26 (all of it) |
28
+
29
+ ## Intended use
30
+
31
+ Asking a baby questions.
32
+
33
+ ## Limitations
34
+
35
+ Cannot spell. Cannot count. Has never heard of Ligma.
36
+
37
+ ## Usage
38
+
39
+ ```
40
+ python run_parvus.py
41
+ ```
config.json ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model_type": "parvus",
3
+ "architectures": [
4
+ "ParvusModel"
5
+ ],
6
+ "vocab_size": 26,
7
+ "num_parameters": 1,
8
+ "auto_map": {
9
+ "AutoModel": "modeling_parvus.ParvusModel",
10
+ "AutoConfig": "modeling_parvus.ParvusConfig"
11
+ }
12
+ }
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:207646e53cc916913eb7b5dbc79872a0de583b7ab37f78869b7306ed31a6d3f6
3
+ size 108
modeling_parvus.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from torch import nn
3
+ from transformers import PretrainedConfig, PreTrainedModel
4
+
5
+
6
+ class ParvusConfig(PretrainedConfig):
7
+ model_type = "parvus"
8
+
9
+ def __init__(self, vocab_size=26, **kwargs):
10
+ self.vocab_size = vocab_size
11
+ super().__init__(**kwargs)
12
+
13
+
14
+ class ParvusModel(PreTrainedModel):
15
+ """One parameter. 26 letters. No preferences yet."""
16
+ config_class = ParvusConfig
17
+
18
+ def __init__(self, config):
19
+ super().__init__(config)
20
+ self.w = nn.Parameter(torch.zeros(1)) # blank slate
21
+
22
+ def forward(self, input_ids=None, **kwargs):
23
+ batch = input_ids.shape[0] if input_ids is not None else 1
24
+ # same score for every letter -> uniform distribution.
25
+ # sample from it (torch.multinomial on softmax) and you get babble.
26
+ logits = self.w * torch.ones(batch, 1, self.config.vocab_size)
27
+ return logits
run_parvus.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Runs Parvus 1.1 with zero dependencies. Ask it anything."""
2
+ import json, math, random, struct
3
+
4
+ raw = open("model.safetensors", "rb").read()
5
+ n = struct.unpack("<Q", raw[:8])[0]
6
+ w = struct.unpack("<f", raw[8 + n : 8 + n + 4])[0] # the one parameter
7
+
8
+ vocab = json.load(open("vocab.json"))
9
+ letters = list(vocab)
10
+
11
+ # one weight scales every letter's logit equally -> every letter equally likely
12
+ weights = [math.exp(w) for _ in letters]
13
+
14
+ while True:
15
+ input("You: ")
16
+ length = random.randint(1, 8)
17
+ print("Parvus:", "".join(random.choices(letters, weights=weights, k=length)))
vocab.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "A": 0,
3
+ "B": 1,
4
+ "C": 2,
5
+ "D": 3,
6
+ "E": 4,
7
+ "F": 5,
8
+ "G": 6,
9
+ "H": 7,
10
+ "I": 8,
11
+ "J": 9,
12
+ "K": 10,
13
+ "L": 11,
14
+ "M": 12,
15
+ "N": 13,
16
+ "O": 14,
17
+ "P": 15,
18
+ "Q": 16,
19
+ "R": 17,
20
+ "S": 18,
21
+ "T": 19,
22
+ "U": 20,
23
+ "V": 21,
24
+ "W": 22,
25
+ "X": 23,
26
+ "Y": 24,
27
+ "Z": 25
28
+ }