mbruton commited on
Commit
b215539
·
verified ·
1 Parent(s): ef4d037

Add first three key models

Browse files
README.md ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: cc-by-4.0
3
+ tags:
4
+ - cryptology
5
+ - historical-cryptology
6
+ - homophonic-cipher
7
+ - substitution-cipher
8
+ - decipherment
9
+ library_name: pytorch
10
+ ---
11
+
12
+
13
+ # Shared decipherment models for historical substitution ciphers
14
+
15
+ Each model in this collection has been trained for **one known historical cipher key**. It reads transcribed ciphertexts written with that key and produces a draft decipherment. Testing a ciphertext against all models shows which known key, if any, it was written with.
16
+
17
+ Use the models with the notebooks or command-line tool at **https://github.com/mbruton0426/keybridge**. You do not need to download anything from here by hand.
18
+
19
+ ## Contents
20
+
21
+ | File | Purpose |
22
+ |------|---------|
23
+ | `index.json` | Lists every model with its symbols, transcription format, language and source. The tools read this file first. |
24
+ | `<model id>/<model id>_model.pt` | The trained model. |
25
+ | `<model id>/<model id>_key.tsv` | The key it was trained on. |
26
+ | `<model id>/<model id>_training_report.txt` | Training settings and accuracy on synthetic text. |
27
+ | `<model id>/README.md` | Description, source of the key, and contributor. |
28
+ | `submissions/` | Models contributed by others, waiting for review. |
29
+
30
+ ## Models
31
+
32
+ | ID | Cipher | Transcription format | Source of the key |
33
+ |----|--------|----------------------|-------------------|
34
+ | `maximilian_II` | Letters of Maximilian II (1575) | symbols separated by spaces (single characters; convert one-character-per-symbol files with `keybridge convert`) | DECODE IDs 1471, 1412, 1407 |
35
+ | `maximilian_1472` | Maximilian letter with a different key | symbols separated by spaces (named symbols) | DECODE IDs 1472, 1473 |
36
+ | `copiale` | Copiale cipher | symbols separated by spaces | DECODE ID 2 |
37
+
38
+ All three were trained on 5,000 synthetic examples from the built-in English HistCiph plaintext, with rare-unit insertion at 0.02 (see each model's training report).
39
+
40
+ ## Contributing a model
41
+
42
+ Train a model for your key with notebook ① and tick *Share my model*. Your contribution will be reviewed and added to `index.json`.
43
+
44
+ ## Licence and citation
45
+
46
+ All models and keys are released under **CC BY 4.0**: you may use and adapt them for any purpose, provided you give appropriate credit. Please cite:
47
+
48
+ > [citation to be added] <!-- PLACEHOLDER -->
49
+
50
+ When you use a specific model, please also credit the original source of its key, given in that model's README.
copiale/README.md ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # copiale
2
+
3
+ - **Cipher:** Copiale cipher
4
+ - **Key source:** DECODE ID 2
5
+ - **Transcription format:** named symbols separated by spaces
6
+ - **Plaintext language of the cipher:** de
7
+ - **Training plaintext:** built-in English (HistCiph), 5,000 examples × 50 symbols, rare-unit insertion 0.02
8
+ - **Contributed by:** Micaella Bruton
9
+ - **Licence:** CC BY 4.0
10
+
11
+ See `copiale_training_report.txt` for all settings and the accuracy on unseen synthetic text.
copiale/copiale_key.tsv ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copiale cipher key (DECODE ID 2). Transcription format: symbols separated by spaces.
2
+ # eM and eN share the symbol "uu" in the original key; only EN is listed here.
3
+ plaintext ciphertext whole_word
4
+ <SPACE> "a" "b" "c" "ds" "e" "f" "ft" "gs" "h" "i" "k" "l" "m" "n" "o" "p" "q" "r" "s" "longs" "t" "u" "v" "w" "x" "y" "zs"
5
+ "A" "p." "n." "h."
6
+ "Ä" "fem"
7
+ "B" "sqp"
8
+ "C" "bas"
9
+ "CH" "arr"
10
+ "D" "pi" "z"
11
+ "E" "ah" "eh" "ih" "oh" "uh" "grr" "zzz"
12
+ "EN" "uu"
13
+ "F" "sqi"
14
+ "G" "del" "x."
15
+ "H" "hd"
16
+ "I" "y.." "ns" "iot"
17
+ "J" "car"
18
+ "K" "gam"
19
+ "L" "c."
20
+ "M" "plus"
21
+ "N" "mu" "ru" "nu" "g"
22
+ "O" "tri" "o."
23
+ "Ö" "no"
24
+ "P" "d"
25
+ "Q" "qua"
26
+ "R" "r." "three" "j"
27
+ "S" "bar"
28
+ "SCH" "cross"
29
+ "SS" "grc"
30
+ "ST" "hk"
31
+ "T" "lam"
32
+ "U" "ki" "ni"
33
+ "Ü" "grl"
34
+ "V" "mal"
35
+ "W" "m."
36
+ "X" "pipe"
37
+ "Y" "inf"
38
+ "Z" "s."
39
+ <DOUBLE> ":"
40
+ "MASTER" "nee" yes
41
+ "LODGE" "tri.." yes
42
+ "SOCIETY" "o.." yes
43
+ "OCULIST" "lip" yes
44
+ "SECRET" "star" yes
45
+ "FREEMASON" "bigx" yes
46
+ "TABLE" "gate" yes
47
+ "POWER" "toe" yes
48
+ "POSITION OF FEET" "bigl" yes
49
+ "GOD" "sci" yes
50
+ "?" "tribig"
51
+ ":)" "smir"
52
+ "(:" "smil"
53
+ "." "."
54
+ "…" "…"
copiale/copiale_model.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:62068412c7fb616a98f56e138a2bce3e7380bc953a14ffeb7f1c6201ec9b7e6e
3
+ size 10355937
copiale/copiale_training_report.txt ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Training report for 'copiale_5k_english_rares'
2
+
3
+ Settings
4
+ {
5
+ "project": "copiale_5k_english_rares",
6
+ "symbol_format": "symbols separated by spaces",
7
+ "plaintext_source": "English",
8
+ "plaintext_files": [],
9
+ "letter_replacements": "",
10
+ "word_spaces": "insert at random",
11
+ "training_examples": 5000,
12
+ "sequence_length": 50,
13
+ "null_rate": 0.05,
14
+ "double_rate": 0.5,
15
+ "rare_unit_rate": 0.02,
16
+ "search_trials": 20,
17
+ "seed": 9,
18
+ "max_epochs": 100,
19
+ "package_version": "1.0.0",
20
+ "created": "2026-10-13T18:53:46",
21
+ "key_file": "copiale_key.tsv"
22
+ }
23
+
24
+ Key
25
+ 51 plaintext units written with 96 distinct cipher symbols (named).
26
+ Special units: <SPACE>, <DOUBLE>
27
+ Multi-letter units / nomenclature (17): (:, :), CH, EN, FREEMASON, GOD, LODGE, MASTER, OCULIST, POSITION OF FEET, POWER, SCH, SECRET, SOCIETY, SS, ST, TABLE
28
+ Whole-word only: FREEMASON, GOD, LODGE, MASTER, OCULIST, POSITION OF FEET, POWER, SECRET, SOCIETY, TABLE
29
+
30
+ Training data notes
31
+ Key units that occur fewer than 20 times: '(:', '.', ':)', '?', 'FREEMASON', 'GOD', 'LODGE', 'MASTER', 'OCULIST', 'POSITION OF FEET', 'POWER', 'SECRET', 'SOCIETY', 'TABLE', 'Ä', 'Ö', 'Ü', '…'
32
+
33
+ Model settings
34
+ {
35
+ "embedding_dim": 64,
36
+ "hidden_size": 320,
37
+ "num_layers": 2,
38
+ "num_heads": 1,
39
+ "dropout": 0.240148858687783,
40
+ "learning_rate": 0.00013871105837933085,
41
+ "batch_size": 32
42
+ }
43
+
44
+ Results
45
+ {
46
+ "synthetic_test_accuracy": 0.99996,
47
+ "synthetic_test_f1": 0.999940012845215,
48
+ "uncertain_share_in_key_reference": 0.00036,
49
+ "uncertain_share_scrambled_key_reference": 0.18957333333333334,
50
+ "units_not_in_training": [],
51
+ "training_minutes": 1.419196323553721,
52
+ "epochs": 30
53
+ }
54
+
55
+ Validation accuracy per round
56
+ 1 0.9326
57
+ 2 0.9977
58
+ 3 0.9984
59
+ 4 0.9986
60
+ 5 0.9987
61
+ 6 0.9994
62
+ 7 0.9995
63
+ 8 0.9996
64
+ 9 0.9996
65
+ 10 0.9996
66
+ 11 0.9996
67
+ 12 0.9996
68
+ 13 0.9996
69
+ 14 0.9996
70
+ 15 0.9996
71
+ 16 0.9997
72
+ 17 0.9997
73
+ 18 0.9997
74
+ 19 0.9997
75
+ 20 0.9998
76
+ 21 0.9997
77
+ 22 0.9998
78
+ 23 0.9998
79
+ 24 0.9998
80
+ 25 0.9999
81
+ 26 0.9999
82
+ 27 1.0000
83
+ 28 1.0000
84
+ 29 1.0000
85
+ 30 1.0000
index.json ADDED
@@ -0,0 +1,417 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "index_version": 1,
3
+ "updated": "2026-10-14",
4
+ "license": "CC-BY-4.0",
5
+ "citation": "[citation to be added]",
6
+ "models": [
7
+ {
8
+ "id": "maximilian_II",
9
+ "name": "Letters of Maximilian II (1575)",
10
+ "path": "maximilian_II/maximilian_II_model.pt",
11
+ "key_file": "maximilian_II/maximilian_II_key.tsv",
12
+ "sha256": "330b4836f1eabbd31328b8ec5baa63ce33acf96997375b080574680a888212be",
13
+ "symbol_format": "symbols separated by spaces",
14
+ "symbol_type": "characters",
15
+ "symbols": [
16
+ "#",
17
+ "&",
18
+ "*",
19
+ "+",
20
+ "-",
21
+ ".",
22
+ "/",
23
+ "0",
24
+ "1",
25
+ "2",
26
+ "3",
27
+ "4",
28
+ "5",
29
+ "6",
30
+ "7",
31
+ "8",
32
+ "9",
33
+ "B",
34
+ "C",
35
+ "D",
36
+ "E",
37
+ "F",
38
+ "G",
39
+ "H",
40
+ "I",
41
+ "J",
42
+ "K",
43
+ "L",
44
+ "M",
45
+ "O",
46
+ "P",
47
+ "Q",
48
+ "R",
49
+ "S",
50
+ "T",
51
+ "U",
52
+ "V",
53
+ "W",
54
+ "X",
55
+ "Y",
56
+ "Z",
57
+ "_",
58
+ "a",
59
+ "b",
60
+ "d",
61
+ "e",
62
+ "f",
63
+ "g",
64
+ "h",
65
+ "i",
66
+ "k",
67
+ "l",
68
+ "m",
69
+ "n",
70
+ "q",
71
+ "r",
72
+ "s",
73
+ "t",
74
+ "u",
75
+ "v",
76
+ "w",
77
+ "x",
78
+ "y",
79
+ "z",
80
+ "Ä",
81
+ "Ö",
82
+ "Ø",
83
+ "Ü",
84
+ "ä",
85
+ "ü",
86
+ "€"
87
+ ],
88
+ "symbol_lengths": {
89
+ "1": 71
90
+ },
91
+ "plaintext_units": 45,
92
+ "letter_replacements": "J=I, V=U",
93
+ "plaintext_language": "de",
94
+ "training_plaintext": "English",
95
+ "period": "1575",
96
+ "source": "DECODE IDs 1471, 1412, 1407",
97
+ "contributor": "Micaella Bruton",
98
+ "training_examples": 5000,
99
+ "synthetic_test_accuracy": 0.9999599823922526,
100
+ "uncertain_share_in_key_reference": 0.00016007043098963545,
101
+ "uncertain_share_scrambled_key_reference": 0.15785612336094548,
102
+ "package_version": "1.0.0",
103
+ "added": "2026-10-14"
104
+ },
105
+ {
106
+ "id": "maximilian_1472",
107
+ "name": "Maximilian letter with a different key",
108
+ "path": "maximilian_1472/maximilian_1472_model.pt",
109
+ "key_file": "maximilian_1472/maximilian_1472_key.tsv",
110
+ "sha256": "b96561044e3869b58981fc1cb8f1e4a6aea17199048e20fecf42ccf0be351b90",
111
+ "symbol_format": "symbols separated by spaces",
112
+ "symbol_type": "named",
113
+ "symbols": [
114
+ "+",
115
+ ",",
116
+ ",f",
117
+ ".",
118
+ ".Arrow",
119
+ ".Scepter",
120
+ ".f",
121
+ "1",
122
+ "2",
123
+ "2/z?",
124
+ "2^¨",
125
+ "3",
126
+ "3SmallGamma",
127
+ "4",
128
+ "4^.",
129
+ "4^¨",
130
+ "5",
131
+ "5/s?",
132
+ "5^¨",
133
+ "6",
134
+ "6/b?",
135
+ "8",
136
+ "8/b?",
137
+ "9",
138
+ "9^.",
139
+ ":",
140
+ ":4",
141
+ ":H",
142
+ ":Mu",
143
+ ":Psi",
144
+ ":ReversedSmallEpsilon",
145
+ "<SPACE>",
146
+ "Arrow",
147
+ "ArrowDivision",
148
+ "BallotScriptX",
149
+ "Cancer",
150
+ "CherokeeLetterDi",
151
+ "CircleWithDot",
152
+ "Division",
153
+ "Division_9",
154
+ "Epsilon",
155
+ "F",
156
+ "FishHook",
157
+ "Fountain",
158
+ "Gemini",
159
+ "Greater-thanSign",
160
+ "Greater-thanSign/d?",
161
+ "Greater-thanSign^H",
162
+ "Greater-thanSign_.",
163
+ "GreekCapitalRho",
164
+ "GreekSmallRho",
165
+ "GreekSmallRho?",
166
+ "H",
167
+ "Leo",
168
+ "Libra",
169
+ "LinkSymbol",
170
+ "M",
171
+ "MWithMiddleLine",
172
+ "Mercury",
173
+ "Mu",
174
+ "Mu^~",
175
+ "MusicalNote",
176
+ "Nauarieñ>",
177
+ "O",
178
+ "Omega",
179
+ "Omega?",
180
+ "Omega^_",
181
+ "Omega^¨",
182
+ "P",
183
+ "Pisces",
184
+ "Psi",
185
+ "Psi/+?",
186
+ "Psi9?",
187
+ "PsiEpsilon",
188
+ "PsiM",
189
+ "PsiOmega",
190
+ "PsiVerticalDivision",
191
+ "Psi_.",
192
+ "PsigVariant",
193
+ "ReversedEpsilon",
194
+ "ReversedSmallEpsilon",
195
+ "Scepter",
196
+ "ScepterDivision",
197
+ "ScepterSmallTheta",
198
+ "SmallGamma",
199
+ "SmallTheta",
200
+ "SmallTheta?",
201
+ "SmallTheta^.",
202
+ "SmallThetag",
203
+ "TaurusVerticalBar",
204
+ "UN",
205
+ "Union",
206
+ "Union/UnionWithDot?",
207
+ "UnionArrow",
208
+ "UnionWithDot",
209
+ "UnionWithDot/UnionWithTwoDot?",
210
+ "UnionWithTwoDot",
211
+ "UnionWithTwoDot/UnionWithDot?",
212
+ "UnionWithTwoDot^.",
213
+ "UnionWithTwoDotn",
214
+ "Unionf",
215
+ "VerticalDivision",
216
+ "a",
217
+ "b",
218
+ "b/6?",
219
+ "b^_",
220
+ "d",
221
+ "eLinkSymbol",
222
+ "eWithTail",
223
+ "f",
224
+ "g",
225
+ "gVariant",
226
+ "h",
227
+ "k",
228
+ "m",
229
+ "m_Loop",
230
+ "n",
231
+ "o",
232
+ "o+waw",
233
+ "o+wawVerticalLine",
234
+ "oOmega",
235
+ "oUnionWithTwoDot",
236
+ "p",
237
+ "q",
238
+ "q__",
239
+ "q___",
240
+ "r",
241
+ "s",
242
+ "s/5?",
243
+ "s/5?^¨",
244
+ "s^¨",
245
+ "t",
246
+ "x",
247
+ "z",
248
+ "z/2?"
249
+ ],
250
+ "symbol_lengths": {
251
+ "1": 34,
252
+ "2": 6,
253
+ "6": 10,
254
+ "8": 6,
255
+ "4": 11,
256
+ "3": 11,
257
+ "11": 6,
258
+ "21": 1,
259
+ "7": 6,
260
+ "5": 7,
261
+ "13": 4,
262
+ "16": 5,
263
+ "10": 6,
264
+ "19": 3,
265
+ "18": 2,
266
+ "15": 5,
267
+ "14": 1,
268
+ "9": 2,
269
+ "20": 1,
270
+ "17": 4,
271
+ "12": 2,
272
+ "29": 2
273
+ },
274
+ "plaintext_units": 42,
275
+ "letter_replacements": "V=U",
276
+ "plaintext_language": "de",
277
+ "training_plaintext": "English",
278
+ "period": "FILL IN",
279
+ "source": "DECODE IDs 1472, 1473",
280
+ "contributor": "Micaella Bruton",
281
+ "training_examples": 5000,
282
+ "synthetic_test_accuracy": 1.0,
283
+ "uncertain_share_in_key_reference": 0.0007206053084591056,
284
+ "uncertain_share_scrambled_key_reference": 0.1847151607350174,
285
+ "package_version": "1.0.0",
286
+ "added": "2026-10-14"
287
+ },
288
+ {
289
+ "id": "copiale",
290
+ "name": "Copiale cipher",
291
+ "path": "copiale/copiale_model.pt",
292
+ "key_file": "copiale/copiale_key.tsv",
293
+ "sha256": "62068412c7fb616a98f56e138a2bce3e7380bc953a14ffeb7f1c6201ec9b7e6e",
294
+ "symbol_format": "symbols separated by spaces",
295
+ "symbol_type": "named",
296
+ "symbols": [
297
+ ".",
298
+ ":",
299
+ "a",
300
+ "ah",
301
+ "arr",
302
+ "b",
303
+ "bar",
304
+ "bas",
305
+ "bigl",
306
+ "bigx",
307
+ "c",
308
+ "c.",
309
+ "car",
310
+ "cross",
311
+ "d",
312
+ "del",
313
+ "ds",
314
+ "e",
315
+ "eh",
316
+ "f",
317
+ "fem",
318
+ "ft",
319
+ "g",
320
+ "gam",
321
+ "gate",
322
+ "grc",
323
+ "grl",
324
+ "grr",
325
+ "gs",
326
+ "h",
327
+ "h.",
328
+ "hd",
329
+ "hk",
330
+ "i",
331
+ "ih",
332
+ "inf",
333
+ "iot",
334
+ "j",
335
+ "k",
336
+ "ki",
337
+ "l",
338
+ "lam",
339
+ "lip",
340
+ "longs",
341
+ "m",
342
+ "m.",
343
+ "mal",
344
+ "mu",
345
+ "n",
346
+ "n.",
347
+ "nee",
348
+ "ni",
349
+ "no",
350
+ "ns",
351
+ "nu",
352
+ "o",
353
+ "o.",
354
+ "o..",
355
+ "oh",
356
+ "p",
357
+ "p.",
358
+ "pi",
359
+ "pipe",
360
+ "plus",
361
+ "q",
362
+ "qua",
363
+ "r",
364
+ "r.",
365
+ "ru",
366
+ "s",
367
+ "s.",
368
+ "sci",
369
+ "smil",
370
+ "smir",
371
+ "sqi",
372
+ "sqp",
373
+ "star",
374
+ "t",
375
+ "three",
376
+ "toe",
377
+ "tri",
378
+ "tri..",
379
+ "tribig",
380
+ "u",
381
+ "uh",
382
+ "uu",
383
+ "v",
384
+ "w",
385
+ "x",
386
+ "x.",
387
+ "y",
388
+ "y..",
389
+ "z",
390
+ "zs",
391
+ "zzz",
392
+ "…"
393
+ ],
394
+ "symbol_lengths": {
395
+ "1": 29,
396
+ "2": 29,
397
+ "3": 25,
398
+ "4": 8,
399
+ "5": 4,
400
+ "6": 1
401
+ },
402
+ "plaintext_units": 51,
403
+ "letter_replacements": "",
404
+ "plaintext_language": "de",
405
+ "training_plaintext": "English",
406
+ "period": "18th century",
407
+ "source": "DECODE ID 2",
408
+ "contributor": "Micaella Bruton",
409
+ "training_examples": 5000,
410
+ "synthetic_test_accuracy": 0.99996,
411
+ "uncertain_share_in_key_reference": 0.00036,
412
+ "uncertain_share_scrambled_key_reference": 0.18957333333333334,
413
+ "package_version": "1.0.0",
414
+ "added": "2026-10-14"
415
+ }
416
+ ]
417
+ }
maximilian_1472/README.md ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # maximilian_1472
2
+
3
+ - **Cipher:** Maximilian letter with a different key
4
+ - **Key source:** DECODE IDs 1472, 1473
5
+ - **Transcription format:** named symbols separated by spaces; the word divider is written <SPACE>
6
+ - **Plaintext language of the cipher:** de
7
+ - **Training plaintext:** built-in English (HistCiph), 5,000 examples × 50 symbols, rare-unit insertion 0.02
8
+ - **Contributed by:** Micaella Bruton
9
+ - **Licence:** CC BY 4.0
10
+
11
+ See `maximilian_1472_training_report.txt` for all settings and the accuracy on unseen synthetic text.
maximilian_1472/maximilian_1472_key.tsv ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Key for Maximilian II letter 1472 (different key). Built from maximillian_key_symbols in rw_keys.py. Symbols separated by spaces; <SPACE> written in the transcription is a cipher symbol (word divider).
2
+ plaintext ciphertext whole_word
3
+ <NULL> "BallotScriptX" "GreekSmallRho" "o+wawVerticalLine" "Pisces"
4
+ <SPACE> "<SPACE>" "PsiM"
5
+ "." "."
6
+ "," ","
7
+ ":" ":"
8
+ "A" "Omega" "LinkSymbol" "CherokeeLetterDi" "PsiOmega" "z/2?" "2"
9
+ "B" "a" ":" "3SmallGamma"
10
+ "C" "6/b?" "b/6?" "6" "SmallThetag"
11
+ "D" "f" "g" "x" "o+waw"
12
+ "E" "9" "Union" ".Arrow" ".f" "Psi9?" "+" "Union/UnionWithDot?"
13
+ "F" "h" "CircleWithDot"
14
+ "G" "q" "Libra"
15
+ "H" "SmallTheta" "oOmega" "t" "ScepterSmallTheta" "SmallTheta^." "Omega^_"
16
+ "I" "SmallGamma" "8" "Greater-thanSign" "Nauarieñ>" "F" "Greater-thanSign_." "8/b?"
17
+ "J" "PsigVariant" "oUnionWithTwoDot"
18
+ "K" "M" "m"
19
+ "L" "r" "UN" "1" "P" "p" "UnionWithDot"
20
+ "M" "Epsilon" "Mu^~" ",f" "UnionWithTwoDotn" "MusicalNote" "Omega?"
21
+ "N" "Psi" "Scepter" "PsiEpsilon" ":Psi" "Psi/+?"
22
+ "O" "ReversedEpsilon" "5/s?" "s/5?" "k" "5" "s" "GreekSmallRho?"
23
+ "P" "n" "3" "eLinkSymbol"
24
+ "R" "o" "d" ":ReversedSmallEpsilon" "SmallTheta?" "Greater-thanSign^H" "O" "Greater-thanSign/d?"
25
+ "S" "H" "PsiVerticalDivision" "Psi_." ":H"
26
+ "T" "gVariant" "Mu" "UnionArrow" "9^." ":Mu"
27
+ "U" "4" "z" "Unionf" "2/z?" ":4" "UnionWithDot" "UnionWithTwoDot/UnionWithDot?"
28
+ "W" "UnionWithTwoDot" ".Scepter" "Division_9" "UnionWithDot/UnionWithTwoDot?" "UnionWithTwoDot^."
29
+ "X" "ArrowDivision"
30
+ "Z" "Division" "VerticalDivision" "eWithTail"
31
+ "Ä" "Omega^¨"
32
+ "Ü" "2^¨" "4^¨" "4^."
33
+ "Ö" "GreekCapitalRho" "5^¨" "s/5?^¨" "s^¨"
34
+ "CH" "b" "b^_"
35
+ "SS" "ScepterDivision" "Cancer"
36
+ "LL" "Mercury" "TaurusVerticalBar"
37
+ "NN" "Fountain"
38
+ "MM" "ReversedSmallEpsilon"
39
+ "TT" "Leo"
40
+ "RR" "Gemini"
41
+ "ST" "m_Loop" "FishHook"
42
+ "UND" "Arrow"
43
+ "SCH" "q___" "q__"
44
+ "HOHEIT" "MWithMiddleLine"
maximilian_1472/maximilian_1472_model.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b96561044e3869b58981fc1cb8f1e4a6aea17199048e20fecf42ccf0be351b90
3
+ size 10339225
maximilian_1472/maximilian_1472_training_report.txt ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Training report for 'maximilian_1472_5k_english_rares'
2
+
3
+ Settings
4
+ {
5
+ "project": "maximilian_1472_5k_english_rares",
6
+ "symbol_format": "symbols separated by spaces",
7
+ "plaintext_source": "English",
8
+ "plaintext_files": [],
9
+ "letter_replacements": "V=U",
10
+ "word_spaces": "keep real word boundaries",
11
+ "training_examples": 5000,
12
+ "sequence_length": 50,
13
+ "null_rate": 0.05,
14
+ "double_rate": 0.5,
15
+ "rare_unit_rate": 0.02,
16
+ "search_trials": 20,
17
+ "seed": 9,
18
+ "max_epochs": 100,
19
+ "package_version": "1.0.0",
20
+ "created": "2026-10-13T18:51:27",
21
+ "key_file": "maximilian_1472_key.tsv"
22
+ }
23
+
24
+ Key
25
+ 42 plaintext units written with 135 distinct cipher symbols (named).
26
+ Special units: <SPACE>, <NULL>
27
+ Multi-letter units / nomenclature (11): CH, HOHEIT, LL, MM, NN, RR, SCH, SS, ST, TT, UND
28
+ key note: Line 9: symbol ":" is listed for both ':' and 'B'. Keeping ':'; a symbol can only stand for one thing.
29
+ key note: Line 27: symbol "UnionWithDot" is listed for both 'L' and 'U'. Keeping 'L'; a symbol can only stand for one thing.
30
+
31
+ Training data notes
32
+ The plaintext has (almost) no word gaps, so gaps were inserted at random instead of keeping real word boundaries.
33
+ 3.1% of plaintext characters have no entry in the key and were left out: 'Y' ×9889, 'Q' ×84
34
+ Key units that occur fewer than 20 times: ',', '.', 'HOHEIT', 'Ä', 'Ö'
35
+
36
+ Model settings
37
+ {
38
+ "embedding_dim": 64,
39
+ "hidden_size": 320,
40
+ "num_layers": 2,
41
+ "num_heads": 1,
42
+ "dropout": 0.240148858687783,
43
+ "learning_rate": 0.00013871105837933085,
44
+ "batch_size": 32
45
+ }
46
+
47
+ Results
48
+ {
49
+ "synthetic_test_accuracy": 1.0,
50
+ "synthetic_test_f1": 1.0,
51
+ "uncertain_share_in_key_reference": 0.0007206053084591056,
52
+ "uncertain_share_scrambled_key_reference": 0.1847151607350174,
53
+ "units_not_in_training": [],
54
+ "training_minutes": 0.7366686304410298,
55
+ "epochs": 16
56
+ }
57
+
58
+ Validation accuracy per round
59
+ 1 0.8890
60
+ 2 0.9922
61
+ 3 0.9984
62
+ 4 0.9991
63
+ 5 0.9991
64
+ 6 0.9991
65
+ 7 0.9992
66
+ 8 0.9996
67
+ 9 0.9997
68
+ 10 0.9997
69
+ 11 0.9998
70
+ 12 1.0000
71
+ 13 1.0000
72
+ 14 1.0000
73
+ 15 1.0000
74
+ 16 1.0000
maximilian_II/README.md ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # maximilian_II
2
+
3
+ - **Cipher:** Letters of Maximilian II (1575)
4
+ - **Key source:** DECODE IDs 1471, 1412, 1407
5
+ - **Transcription format:** single characters separated by spaces (convert one-character-per-symbol files with keybridge convert)
6
+ - **Plaintext language of the cipher:** de
7
+ - **Training plaintext:** built-in English (HistCiph), 5,000 examples × 50 symbols, rare-unit insertion 0.02
8
+ - **Contributed by:** Micaella Bruton
9
+ - **Licence:** CC BY 4.0
10
+
11
+ See `maximilian_II_training_report.txt` for all settings and the accuracy on unseen synthetic text.
maximilian_II/maximilian_II_key.tsv ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Key of three letters by Maximilian II (DECODE IDs 1471, 1412, 1407). Standard format: symbols separated by spaces; the word divider (a blank in the manuscript transcription) is written as "_".
2
+ plaintext ciphertext whole_word
3
+ <SPACE> "_"
4
+ "." "."
5
+ <NULL> "w" "7" "u" "v" "s" "i" "l" "Ä" "3" "B" "k" "#" "ä" "€"
6
+ "?" "y" "f" "x"
7
+ "ENCLITICA" "t"
8
+ "A" "J" "/"
9
+ "B" "T" "4"
10
+ "C" "Z"
11
+ "D" "M"
12
+ "E" "W" "P" "q"
13
+ "F" "L"
14
+ "G" "9"
15
+ "H" "X"
16
+ "I" "C" "K"
17
+ "K" "6"
18
+ "L" "S"
19
+ "M" "H"
20
+ "N" "D" "+"
21
+ "O" "I" "*"
22
+ "P" "Ü"
23
+ "Q" "m"
24
+ "R" "F" "1"
25
+ "S" "Q"
26
+ "T" "b" "U"
27
+ "U" "2" "G"
28
+ "W" "V"
29
+ "X" "ü"
30
+ "Y" "h"
31
+ "Z" "0"
32
+ "FF" "a"
33
+ "LL" "5"
34
+ "MM" "n"
35
+ "NN" "Ö"
36
+ "SS" "-"
37
+ "TT" "e"
38
+ "ST" "E"
39
+ "CT" "d"
40
+ "Ä" "g" "8"
41
+ "Ö" "Ø"
42
+ "Ü" "r"
43
+ "SCH" "Y"
44
+ "UND" "R"
45
+ "AUSTRIA" "z" yes
46
+ "HUNGARIA" "O" yes
47
+ "GERMANIA" "&" yes
maximilian_II/maximilian_II_model.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:330b4836f1eabbd31328b8ec5baa63ce33acf96997375b080574680a888212be
3
+ size 10336731
maximilian_II/maximilian_II_training_report.txt ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Training report for 'maximilian_II_5k_english_rares'
2
+
3
+ Settings
4
+ {
5
+ "project": "maximilian_II_5k_english_rares",
6
+ "symbol_format": "symbols separated by spaces",
7
+ "plaintext_source": "English",
8
+ "plaintext_files": [],
9
+ "letter_replacements": "J=I, V=U",
10
+ "word_spaces": "insert at random",
11
+ "training_examples": 5000,
12
+ "sequence_length": 50,
13
+ "null_rate": 0.05,
14
+ "double_rate": 0.5,
15
+ "rare_unit_rate": 0.02,
16
+ "search_trials": 20,
17
+ "seed": 9,
18
+ "max_epochs": 100,
19
+ "package_version": "1.0.0",
20
+ "created": "2026-10-13T18:49:46",
21
+ "key_file": "maximilian_II_key.tsv"
22
+ }
23
+
24
+ Key
25
+ 45 plaintext units written with 71 distinct cipher symbols (characters).
26
+ Special units: <SPACE>, <NULL>
27
+ Multi-letter units / nomenclature (14): AUSTRIA, CT, ENCLITICA, FF, GERMANIA, HUNGARIA, LL, MM, NN, SCH, SS, ST, TT, UND
28
+ Whole-word only: AUSTRIA, GERMANIA, HUNGARIA
29
+
30
+ Training data notes
31
+ Key units that occur fewer than 20 times: '.', '?', 'AUSTRIA', 'ENCLITICA', 'HUNGARIA', 'Ä', 'Ö', 'Ü'
32
+
33
+ Model settings
34
+ {
35
+ "embedding_dim": 64,
36
+ "hidden_size": 320,
37
+ "num_layers": 2,
38
+ "num_heads": 1,
39
+ "dropout": 0.240148858687783,
40
+ "learning_rate": 0.00013871105837933085,
41
+ "batch_size": 32
42
+ }
43
+
44
+ Results
45
+ {
46
+ "synthetic_test_accuracy": 0.9999599823922526,
47
+ "synthetic_test_f1": 0.9999399828047787,
48
+ "uncertain_share_in_key_reference": 0.00016007043098963545,
49
+ "uncertain_share_scrambled_key_reference": 0.15785612336094548,
50
+ "units_not_in_training": [],
51
+ "training_minutes": 1.1000991304715475,
52
+ "epochs": 24
53
+ }
54
+
55
+ Validation accuracy per round
56
+ 1 0.9648
57
+ 2 0.9940
58
+ 3 0.9976
59
+ 4 0.9986
60
+ 5 0.9990
61
+ 6 0.9993
62
+ 7 0.9995
63
+ 8 0.9997
64
+ 9 0.9997
65
+ 10 0.9997
66
+ 11 0.9997
67
+ 12 0.9998
68
+ 13 0.9998
69
+ 14 0.9998
70
+ 15 0.9998
71
+ 16 0.9998
72
+ 17 0.9998
73
+ 18 0.9998
74
+ 19 0.9998
75
+ 20 0.9999
76
+ 21 0.9999
77
+ 22 0.9999
78
+ 23 1.0000
79
+ 24 1.0000