min-co

A language of 45 meaning roots with value axes. A word is encoded in two ways — by AI (a language model) and by Vectors (pure math, no model) — and then decoded blind.

Язык из 45 смысловых корней с осями значений. Слово кодируется двумя способами — ИИ (языковая модель) и Векторы (чистая математика, без модели) — и раскодируется вслепую.

What min-co is

min-co (working name) is a small constructed language inspired by Toki Pona. It has about 45 roots, roughly a third of Toki Pona's vocabulary, and a word is up to three roots, the main one first: house = PLACE LIVE | o.

Every root name on this site is a link to the Roots tab; hover for a short hint.

Roots are axes

In Esperanto, shades of meaning come from affixes: granda, grandega, malgranda, malgrandeta. In min-co a root carries a scale from −5 to +5, and a number says where on the scale you mean. One root, many words:

codemeaning
SAY(=-5) | imutter
SAY(=-4) | iwhisper
SAY | isay, speak
SAY(=+3) | icall out, speak loudly
SAY(=+5) | iscream, roar
SAY(=-3) | oa whisper
SAY(=+4) | oa shout
SAY(=+3) THING | onoise

The same works elsewhere: PLACE LIVE | o is a home, PLACE LIVE(=-2) | o a bedroom, PLACE LIVE(=-5) | o a morgue. A value left out means “not specified”; (=0) is the explicit middle.

Where the idea comes from

Computers represent meaning as a long list of numbers per word (word2vec, GloVe, ConceptNet Numberbatch): a word is a point in a meaning-space. Dimensionality reduction such as PCA finds the few directions along which words differ most. In principle those could be the axes of a language.

In practice they are not readable. The axes PCA finds mix unrelated senses: one pole of the first axis is mandate, requirement, approval, the other fell, blast, hit, beat. Twenty axes explain only about 20% of the variation. They are made for computers and are not suitable for learning or speaking, and the words they give look odd: a knife comes out as LONG(=-1) PART(=-5) TOUCH(=+5) | o.

Show the top five axes
axisone polethe other pole
1mandate, requirement, approval, agreementfell, blast, hit, beat
2amount, extent, ratio, sizedeputy, secretary, chairman, president
3administrative, department, officeindeed, certainly, truly, really
4downturn, slowdown, recessionunique, famous, wonderful, beautiful
5final, deadline, next, lastdeeply, strongly, leadership, advocate

5,949 words of this site's vocabulary, Numberbatch vectors.

What we did instead

  • Readable roots. We picked concepts a person understands (time, good, big, say, know, place…) and gave each its own axis, with poles you can name.
  • Limits. At most three roots in a word, one axis per root, about 45 roots in all.
  • Grammar. Toki Pona-like (head first, particles, no inflection) with a few changes: part of speech and a small set of marks after the |.

Some words: school = PLACE KNOW CONSUME(=+5) | o; teacher = SOMEONE KNOW GIVE(=+4) | o; money = VALUE GIVE(=0) | o; debt = VALUE GIVE(=+4) TIME(=+3) | o; hospital = PLACE LIVE(=0) GOOD(=-4) | o.

Two ways to write a code

By math. The word's vector is approximated by a sum of at most three roots with integer axis values, found by trying all combinations (try the decoder, play with the mixer). It needs no model: on 2,000 words the original comes back first in about half the cases and in the top ten in over 90%. It is a good analysis tool: it shows which concepts have no root, whether two roots overlap, which poles of an axis are wrong. But its codes are hard to read by people and models (1–3 of 24 words in an early blind test): the math picks whatever fits the numbers, not what makes sense.

By a language model. A model that understands what the roots mean writes codes that read much better. In blind tests, with the recipes for hard words (law, money, food, transport…) 24 of 24 were restored against 13–19 without, and the Toki Pona-style notation scored +0.33 on a three-point scale over the earlier notation. The limit: on encyclopedic sentences the average is 1.2–1.4 of 3; the language carries the topic and the main relations, not the details. See Method.

Ideally the two work together: the math proposes a candidate, the model reads and corrects it.

Phonetics

Not decided yet. The current draft: a root is a Toki Pona word, an axis value is a repeated syllable (ti for plus, wu for minus, y for the explicit middle). Options still open: vowel or consonant quality for the sign, vowel length for the value.

Что такое min-co

min-co (рабочее название) — небольшой искусственный язык по мотивам Toki Pona. В нём около 45 корней, примерно треть словаря Toki Pona, а слово — это до трёх корней, главный первым: дом = PLACE LIVE | o.

Каждое название корня на сайте — ссылка на вкладку «Корни»; при наведении появляется короткая подсказка.

Корни — это оси

В эсперанто оттенки смысла дают аффиксы: granda, grandega, malgranda, malgrandeta. В min-co у корня есть шкала от −5 до +5, а число показывает, где на шкале вы находитесь. Один корень, много слов:

кодзначение
SAY(=-5) | iбормотать
SAY(=-4) | iшептать
SAY | iговорить
SAY(=+3) | iокликнуть, говорить громко
SAY(=+5) | iкричать, реветь
SAY(=-3) | oшёпот
SAY(=+4) | oкрик
SAY(=+3) THING | oшум

То же и в других местах: PLACE LIVE | o — дом, PLACE LIVE(=-2) | o — спальня, PLACE LIVE(=-5) | o — морг. Если значение не написано, оно «не указано»; (=0) — явная середина.

Откуда идея

Компьютеры представляют смысл длинным списком чисел на слово (word2vec, GloVe, ConceptNet Numberbatch): слово — точка в пространстве смыслов. Методы сжатия, например PCA, находят немногие направления, по которым слова различаются сильнее всего. В принципе, это могли бы быть оси языка.

На практике их нельзя читать. Оси PCA смешивают несвязанные значения: один полюс первой оси — mandate, requirement, approval (поручение, требование, одобрение), другой — fell, blast, hit, beat (упасть, взрыв, удар, бить). Двадцать осей объясняют лишь около 20 % разброса. Они сделаны для компьютеров и не годятся для изучения и речи, а слова выходят странные: нож получается как LONG(=-1) PART(=-5) TOUCH(=+5) | o.

Показать пять главных осей
осьодин полюсдругой полюс
1mandate, requirement, approval, agreementfell, blast, hit, beat
2amount, extent, ratio, sizedeputy, secretary, chairman, president
3administrative, department, officeindeed, certainly, truly, really
4downturn, slowdown, recessionunique, famous, wonderful, beautiful
5final, deadline, next, lastdeeply, strongly, leadership, advocate

5949 слов словаря сайта, векторы Numberbatch.

Что сделали мы

  • Читаемые корни. Взяли понятия, которые человек понимает (время, хорошо, большой, говорить, знать, место…), и дали каждому свою ось с полюсами, которые можно назвать.
  • Ограничения. В слове не больше трёх корней, у корня одна ось, всего около 45 корней.
  • Грамматика. Как в Toki Pona (главное слово первым, частицы, без склонений) с небольшими изменениями: часть речи и небольшой набор меток после |.

Несколько слов: школа = PLACE KNOW CONSUME(=+5) | o; учитель = SOMEONE KNOW GIVE(=+4) | o; деньги = VALUE GIVE(=0) | o; долг = VALUE GIVE(=+4) TIME(=+3) | o; больница = PLACE LIVE(=0) GOOD(=-4) | o.

Два способа записать код

Математикой. Вектор слова приближается суммой не больше чем трёх корней с целыми значениями осей, перебором всех сочетаний (декодер, смеситель). Модель не нужна: на 2000 слов исходное слово возвращается первым примерно в половине случаев и в первой десятке больше чем в 90 %. Это хороший инструмент анализа: он показывает, для каких понятий нет корня, пересекаются ли два корня, неверны ли полюса оси. Но такие коды плохо читают люди и модели (1–3 слова из 24 в раннем слепом тесте): математика выбирает то, что подходит по числам, а не по смыслу.

Языковой моделью. Модель, которая понимает, что значат корни, пишет коды, которые читаются заметно лучше. В слепых тестах с рецептами для трудных слов (право, деньги, еда, транспорт…) восстановлено 24 из 24 против 13–19 без них, а токипонская запись дала +0,33 по трёхбалльной шкале против прежней. Предел: на энциклопедических предложениях средняя оценка 1,2–1,4 из 3; язык передаёт тему и главные связи, а не детали. См. Методологию.

В идеале они работают вместе: математика предлагает кандидата, модель читает и исправляет.

Фонетика

Пока не решено. Нынешний черновик: корень — слово Toki Pona, значение оси — повторённый слог (ti для плюса, wu для минуса, y для явной середины). Открытые варианты: качество гласной или согласной для знака, долгота гласной для значения.

Hover over any part of a code (on a phone, tap it): a root, a label, a particle. Below the code are the axes of its roots.
Наведите курсор на любую часть кода (на телефоне — нажмите): корень, метку, частицу. Под кодом — оси его корней.

Saved examplesСохранённые примеры

Results of blind tests: one model encoded, another decoded without seeing the word. Green — the word was guessed first, yellow — it is among the alternatives, red — a miss. Click a row: the model is not called, the math is recomputed.

Результаты слепых тестов: кодировала одна модель, раскодировала другая, не видя слова. Зелёным — слово угадано первым, жёлтым — оно среди альтернатив, красным — промах. Нажмите строку — модель не вызывается, математика считает заново.

Two series. Recipes (law, money, food, transport, society, health, direction of motion): the Sonnet decoders saw the recipe list, so this checks that a recipe reads unambiguously, not that it can be guessed from scratch. Substances and numbers: the decoder saw only the root tables.

Две серии. Рецепты (право, деньги, еда, транспорт, общество, здоровье, направление движения): декодеры Sonnet видели список рецептов, так что это проверка того, что рецепт читается однозначно, а не того, что его можно угадать с нуля. Вещества и числа: декодер видел только таблицы корней.

wordсловоcodeкодread asпрочитано

Root mixerСмеситель корней

Put up to three roots into the slots and move their values: the vectors (no language model) read the code at once and show the words nearest to it. The first root is the head — what kind of thing it is; the next ones narrow it. Click a word in the cloud to see how it is coded.

Положите до трёх корней в ячейки и двигайте их значения: векторы (без языковой модели) сразу читают код и показывают ближайшие к нему слова. Первый корень — главный: что это за вещь; следующие его сужают. Нажмите на слово в облаке — увидите, как кодируется оно само.

meaningсмысл
—
codeкод
—

RootsКорни

Click a root: it goes into the first free slot; click a highlighted root again to take it out. To replace a root, first click its slot (it lights up), then click the new root. You can also drag a root onto a slot, and drag a slot by its name to reorder.Нажмите на корень — он встанет в первую свободную ячейку; повторное нажатие на подсвеченный корень убирает его. Чтобы заменить корень, сначала нажмите на его ячейку (она подсветится), потом на новый корень. Корень можно и перетащить на ячейку, а ячейки — переставить, перетащив за имя.

How to read a codeКак читать код

A word is written as ROOTS | form. Before the bar is the meaning: the head root and up to two modifying roots, each with a value on its axis when needed: GOOD(=+3) (fairly good), TIME(=-2) (recently), MANY(=-5) (none at all). No value written means the value is unspecified. Each next root refines everything before it: GRAIN(=0) THING(=-5) PART(=-5) — “loose crumbs of stone” (sand).

After the bar comes the part of speech — o thing, i action, a property, e circumstance — then, for a noun, an optional role like the Esperanto suffixes -ist, -il, -aĵ, -ec: agent the one who does it or a person of that field (ART(=+5) | o agent artist), tool, result, quality; and the form labels below: SAY | i T-2 M-5 — “did not say”. Roots without an axis () take no value.

Quotes are used only for numbers, proper names and specific members of a family in Latin or international form: a species "Canis", a substance "iodine", an organ "hepar", a celestial body "Luna", a game "chess", a narrow term "enzyme". The category itself is built from roots: organ — BODY INSIDE(=+5) PART(=-2) | o, star — HEAT(=+5) ABOVE(=+5) PART(=-2) | o. If a word has a recipe, no quotes are needed.

Слово записывается как КОРНИ | форма. До черты — смысл: главный корень и до двух уточняющих, у каждого при необходимости значение его оси: GOOD(=+3) (скорее хороший), TIME(=-2) (недавно), MANY(=-5) (ни одного). Ось не написана — значение не указано. Каждый следующий корень уточняет всё, что стоит перед ним: GRAIN(=0) THING(=-5) PART(=-5) — «сыпучие крошки камня» (песок).

После черты — часть речи: o предмет, i действие, a признак, e обстоятельство, у имени — необязательная роль, как суффиксы эсперанто -ist, -il, -aĵ, -ec: agent тот, кто делает, или человек этой области (ART(=+5) | o agent художник), tool орудие, result результат, quality свойство; и метки формы ниже: SAY | i T-2 M-5 — «не сказал». Корни без оси () значений не берут.

В кавычках пишутся только числа, имена собственные и конкретные члены семейства в латинской или международной форме: вид "Canis", вещество "iodine", орган "hepar", светило "Luna", игра "chess", узкий термин "enzyme". Сама категория строится из корней: орган — BODY INSIDE(=+5) PART(=-2) | o, звезда — HEAT(=+5) ABOVE(=+5) PART(=-2) | o. Если для слова есть рецепт, кавычки не нужны.

example — hover over the parts of the codeпример — наведите на части кода

ParticlesЧастицы

Form labelsМетки формы

Labels are not roots. They go after the bar, separated by spaces, once on the head word.

Метки — не корни. Ставятся после черты через пробел, один раз на главном слове.

labelметкаwhatчтоscaleшкала

Single words use this notation (with the part of speech after the bar) because it is the one verified by blind tests on words. The Toki Pona-style notation (no bar) won on whole sentences but was not measured on single words.

Для отдельных слов используется эта запись (с частью речи после черты), потому что именно она проверена слепыми тестами на словах. Запись в стиле токи пона (без черты) выиграла на целых предложениях, на словах отдельно не измерялась.

Phonetics (optional, draft)Фонетика (опция, черновик)

Switch it on under the input field: every code gets a line with its pronunciation. Not checked by ear yet; the source is phonetics.yaml.

  • A root is a Toki Pona word where one fits (pona GOOD, suli BIG, sona KNOW, moku CONSUME), and the word itself never changes — the head of a word is always the plain Toki Pona word. The value on its axis is a suffix of syllables that Toki Pona forbids, so it cannot be mistaken for a word: ti positive, wu negative, repeated |v| times; an explicit (=0) is a short y (Russian ы, as in Polish); nothing written means no value. Roots without an axis take no suffix (SEE lukin, DO pali, TEXT lipu).
  • Examples: GOOD is pona, GOOD(=+3) is ponatititi, GOOD(=-2) is ponawuwu, GOOD(=0) is ponay.
  • Word = root blocks joined with -, then ' and the vowel of the part of speech, then the role and labels after · (ul il aj ec for agent, tool, result, quality; a label is a vowel and a consonant: at T+, ad T−, an T0).
  • Particles all start with h: he E, hi PI, ha LA, hu AND, hen FROM, hon FOR, hin LIKE, ho PE; hem … hom are the brackets, hum is ;. Quoted names are read in their own language.

In the Roots tab the sounds of each root show next to its name.

Включается под полем ввода: у каждого кода появляется строка с произношением. На слух ещё не проверено; источник — phonetics.yaml.

  • Корень — токипонское слово, где оно подходит (pona GOOD, suli BIG, sona KNOW, moku CONSUME); само слово не меняется, голова слова — всегда обычное токипонское слово. Значение оси — суффикс из слогов, которые запрещает токипонская фонотактика, поэтому он не спутается со словом: ti — положительное, wu — отрицательное, повторённые |v| раз; явный (=0) — короткое y (ы, как в польском); ничего не названо — значения нет. У корней без оси суффикса нет (SEE — lukin, DO — pali, TEXT — lipu).
  • Примеры: GOOD — pona, GOOD(=+3) — ponatititi, GOOD(=-2) — ponawuwu, GOOD(=0) — ponay.
  • Слово = блоки корней через -, затем ' и гласная части речи, затем роль и метки после · (ul il aj ec — agent, tool, result, quality; метка — гласная и согласный: at — T+, ad — T−, an — T0).
  • Частицы все начинаются на h: he E, hi PI, ha LA, hu AND, hen FROM, hon FOR, hin LIKE, ho PE; hem … hom — скобки, hum — ;. Имена в кавычках читаются на своём языке.

В таблице «Корни» рядом с каждым корнем показано его звучание.

RootsКорни

rootкорень−50+5

Source: the file roots.yaml; the table on the site is built from it.

Источник — файл roots.yaml; таблица на сайте собирается из него.

Recipe dictionaryСловарь рецептов

wordсловоcodeкод

The recipes are collected from encoding.md and from the hints the model gets on the site; each was checked by a blind test (reports in data/translation_test). Click a row — the code opens in “Try it”: the model decodes it blind and the math reads it.

Рецепты собраны из encoding.md и подсказок, которые получает модель на сайте; каждый проверен слепым тестом (отчёты — в data/translation_test). Нажмите строку — код откроется на «Пробе»: модель раскодирует его вслепую, математика прочитает.

Method

The main question: is meaning preserved along the chain text → code → text? The check is blind:

  1. The encoder sees only the language description and the text, and writes the code.
  2. The decoder, a separate instance, sees only the description and the code, and restores the text.
  3. The judge (another, stronger model) sees the original and the shuffled variants and scores 0–3: 3 the same meaning, 2 the gist kept, 1 only the topic, 0 off.
  4. Differences between variants come with a 95% bootstrap interval over sentences. The language is changed only if the interval excludes zero.

Results

checkresult
Removed the roots CONTAINER and MAYBE (replaced by combinations and a label)within noise; fewer roots
An axis on the root “see”worse than without (−0.43, interval at the edge); not introduced
Curly braces around wordsmany more codes without format errors (8–10% errors instead of 30–58%), meaning unchanged (+0.04 [−0.20, +0.26])
Recipes for gaps (law, money, food, transport, society, power, war, health)in two blind tests 24 of 24 with recipes against 17, 13 and 19 without; no new roots needed
Toki Pona-style notation (root words, roles by position)better meaning: +0.33 [+0.05, +0.60] on a held-out set of 40 sentences

Math without a model

The right column in “Try it” encodes a word without a language model: the word vector (ConceptNet Numberbatch) is approximated by a sum of at most three roots with integer axis values, by trying all variants. A root is a “center” (what the axis is about) plus an axis direction, built from pole words in roots.yaml. The root directions are then fitted on 70% of frequent words, with the condition that each stays close to the original (cos ≥ 0.85). Decoding: a word must be close to each root of the code separately, and hub words that are close to any code are penalized.

What it gives: on the math's own codes (2000 words of the site dictionary) the word is restored first in 46–51% of cases and in the top ten in 91–93%. But people and models hardly read the math's codes (1–3 of 24 in an earlier blind test). So it serves as an analysis tool — finding missing roots, checking axis poles, finding duplicate roots (this is how MATTER and GRAIN were merged) — not as a translator. Details: docs/math.md (in Russian).

Honest caveats

  • Absolute accuracy is modest: on encyclopedic sentences the average score is about 1.2–1.4 of 3. The language carries the topic and the main relations, not the details.
  • The encoder, decoder and judge are models of one family; there are no people and no other languages in the check. Two encoders per variant, 40–60 sentences, noise around ±0.3.
  • The first run of the “toki” notation was inflated: the encoders inserted ordinary English words in quotes. The loophole was closed and the run repeated; the result above is after the fix.
  • Roots and axes were tuned on development sets, so the final numbers come from a held-out set of fresh articles.

Protocol and scripts: scripts/eval; results: data/translation_test.

Методология

Главный вопрос: сохраняется ли смысл при цепочке текст → код → текст. Проверка слепая:

  1. Кодировщик видит только описание языка и текст и пишет код.
  2. Декодер — отдельный экземпляр — видит только описание и код и восстанавливает текст.
  3. Судья (другая, более сильная модель) видит оригинал и перемешанные варианты и ставит 0–3: 3 тот же смысл, 2 главное сохранено, 1 только тема, 0 мимо.
  4. Разницу между вариантами считаем с 95%-ным бутстреп-интервалом по предложениям. Меняем язык, только если интервал не содержит нуля.

Что получилось

проверкарезультат
Убрали корни CONTAINER и MAYBE (вместо них сочетания и метка)в пределах шума; корней стало меньше
Ось у корня «видеть»хуже, чем без оси (−0,43, интервал на границе); не введена
Фигурные скобки вокруг словкодов без ошибок формата стало намного больше (8–10% ошибок вместо 30–58%), смысл не изменился (+0,04 [−0,20, +0,26])
Рецепты для лакун (право, деньги, еда, транспорт, общество, власть, война, здоровье)в двух слепых тестах по 24 из 24 с рецептами против 17, 13 и 19 без них; новых корней не понадобилось
Запись в стиле токи пона (слова-корни, роли по позиции)смысл лучше: +0,33 [+0,05, +0,60] на отложенном наборе из 40 предложений

Математика без модели

Правая колонка на «Пробе» кодирует слово без языковой модели: вектор слова (ConceptNet Numberbatch) приближается суммой не больше трёх корней с целыми значениями осей, перебором всех вариантов. Корень — это «центр» (о чём ось) плюс направление оси, построенные из слов-полюсов в roots.yaml. Направления корней затем подогнаны по 70% частых слов с условием, что каждый остаётся похож на исходный (cos ≥ 0,85). Раскодирование: слово должно быть близко к каждому корню кода по отдельности, а слова-хабы, близкие к любому коду, штрафуются.

Что это даёт: на собственных кодах математики (2000 слов словаря сайта) слово восстанавливается первым в 46–51% случаев и в первой десятке в 91–93%. Но люди и модели коды математики почти не читают (1–3 из 24 в прежнем слепом тесте). Поэтому она служит инструментом анализа — искать недостающие корни, проверять полюса осей, находить корни-дубли (так слиты MATTER и GRAIN), — а не переводчиком. Подробно: docs/math.md.

Честные оговорки

  • Абсолютная точность невысока: на энциклопедических предложениях средняя оценка около 1,2–1,4 из 3. Язык пока передаёт тему и главные связи, но не детали.
  • Кодировщик, декодер и судья — модели одной семьи; людей и других языков в проверке нет. Кодировщиков по два на вариант, предложений 40–60, шум порядка ±0,3.
  • Первый прогон записи «токи» оказался раздутым: кодировщики вставляли обычные английские слова в кавычках. Лазейку закрыли и повторили, результат выше — после исправления.
  • Корни и оси подбирались на настроечных наборах; поэтому итоговые цифры берём с отложенного набора свежих статей.

Протокол и скрипты: scripts/eval; результаты: data/translation_test.

DocumentationДокументация

The documents in the repository are in Russian and still describe the previous notation (with | and suffixes). The Toki Pona-style notation is accepted for testing and has not been moved into them yet.

Документы в репозитории пока описывают предыдущую запись (с | и суффиксами). Запись в стиле токи пона принята для проверки и ещё не перенесена в них.