Model Details
LEMMIS (lt. lietuviškas ekspertų mišinio modelis) is a first-of-a-kind natively trained Mixture-of-Experts (MoE) transformer language model designed and pretrained exclusively on Lithuanian text. Unlike existing Lithuanian LLMs (Lt-Llama, LT-MLKM) which adapt English-trained base models, LEMMIS was built from the ground up - architecture, tokenizer, and training data are all Lithuanian-first.
- Developed by: Aividas Šilingas
- Language(s): Lithuanian
- License: BSD 3-Clause License
Intended Use Case
LEMMIS is designed for research purposes in Lithuanian. Both the base and instruct models are proof-of-concept prototypes demonstrating that a Lithuanian-native LLM architecture can achieve coherent language generation. They are not intended for production use or deployment in critical applications.
Model Architecture
| Parameter | Value |
|---|---|
| Total parameters | 1.24B |
| Active parameters | ~411M |
| Hidden dim | 1024 |
| Layers | 16 |
| Attn heads | 16 |
| Experts (total / active) | 8 / 2 |
| Expert FFN dim | 2816 |
| Sequence length | 2048 |
| Vocab size | 65,546 |
Tokenizer
LEMMIS uses a custom BPE tokenizer trained with SentencePiece on a subset of the corpus. Benchmarked against 50,000 Lithuanian sentences:
| Tokenizer | Fertility (tokens/word) |
|---|---|
| LEMMIS | 1.49 |
| LT-MLKM-modernBERT | 2.31 |
| GPT-4 (cl100k_base) | 3.55 |
LEMMIS achieves near-English-level tokenization efficiency (1.3–1.5 is standard for English) on a morphologically complex language. This means over 2x more Lithuanian text fits in the same context window compared to GPT-4's tokenizer.
Training
LEMMIS was trained on a large dataset of curated Lithuanian text corpus. The pretraining was run over a single epoch of the full dataset, using mixed precision and AdamW optimizer.
| Source | Description |
|---|---|
| CulturaX-LT + GlotCC-LT | Web-crawled Lithuanian text |
| TAR legal texts | Lithuanian laws, decrees, and government decisions since 1992 |
| Delfi news | ~719k articles, 10-year scrape |
| Lithuanian books | ~2,500 digitized archived public domain books |
| Wikipedia (LT) | Full Lithuanian Wikipedia |
| Supermama | Lithuanian forum posts |
| Other | Reddit (r/lithuania, r/lietuva), 15min, LRT, Lrytas |
Instruct tuning
The instruct variant uses LoRA (rank 32, alpha 64) on attention projections (q/k/v/o), trained on nearly 50,000 examples from Alpaca-LT, translated Dolly 2.0 subset and synthetic lithuanian examples.
Usage
LEMMIS is a custom PyTorch model and is not compatible with HuggingFace transformers out of the box. To run inference:
import torch
import torch.nn.functional as F
import sentencepiece as spm
from model.transformer import Lemmis, ModelConfig
# Load tokenizer
sp = spm.SentencePieceProcessor()
sp.Load("tokenizer/lemmis_tokenizer.model")
# Load model
checkpoint = torch.load("lemmis_1.24B_instruct.pt", map_location="cpu", weights_only=False)
config = checkpoint["config"]
model = Lemmis(config)
model.load_state_dict(checkpoint["model_state_dict"], strict=True)
# Preserve complex buffers before bf16 cast
complex_buffers = {}
for name, buf in model.named_buffers():
if buf.is_complex():
complex_buffers[name] = buf.clone()
model = model.to(torch.bfloat16).to("cuda")
for name, buf in complex_buffers.items():
parts = name.split(".")
mod = model
for p in parts[:-1]:
mod = getattr(mod, p)
setattr(mod, parts[-1], buf.to("cuda"))
model.eval()
# Generate
prompt = "### Instruction:\nKas yra cepelinai\n\n### Response:\n"
input_ids = torch.tensor([sp.Encode(prompt)], dtype=torch.long, device="cuda")
output_ids = model.generate(input_ids, max_new_tokens=128)
response = sp.Decode(output_ids[0].tolist()[len(sp.Encode(prompt)):])
print(response)
For the instruct model, wrap prompts with this format:
### Instruction:
{your question}
### Response:
Evaluation
The model was evaluated on a translated MMLU subset (abstract algebra, anatomy, astronomy, business ethics). Results were not meaningful, the model lacks the scale for multi-step reasoning and structured multiple-choice answering. This is consistent with sub-7B models on MMLU generally. The instruct model seems to be generating grammatically correct Lithuanian with proper case and inflections and verb conjugations. All generated words are usually real Lithuanian words. The model follows LoRA instruction format and generated up to ~60 tokens before quality starts degrading. Note: The model generates grammatically correct and well-structured Lithuanian text, but frequently hallucinates factual information. This is expected at 1.24B parameters and demonstrates that the model has learned Lithuanian language structure, not world knowledge.
Examples
The examples were generated with max_new_tokens set to 128, rest of the parameteres are default ones.
| Prompt | Output |
|---|---|
| Parašyk trumpą istoriją apie katę. | Vieną dieną mūsų katė nusprendė, kad laikas pradėti gyventi savo gyvenimą. Ji buvo tokia susijaudinusi ir patenkinta, kad mes nusprendėme jai padėti įsikurti naujuose namuose. Kai ji įėjo į kambarį, jos akys išsiplėtė iš džiaugsmo – tai buvo visiškai nauja! Tai buvo pirmas kartas, kai ji matė pasaulį taip arti savęs! Mūsų katinas yra nepaprastai protingas ir smalsus. Jis nuolat tyrinėja aplinką, o su kiekvienu nauju atradimu tampa vis protingesnis. Tai leido mums suprasti, kiek daug galime padaryti kartu. Mes radome būdą, kaip patenkinti visus katės poreikius per kelias minutes be jokių pastangų ar išlaidų. Mūsų katė tapo neatsiejama šeimos dalimi, nes kiekvieną kartą, kai tik ateina |
| Kas yra cepelinai? | Cepelinas – tai patiekalas, pagamintas iš bulvių ir mėsos. Jis patiekiamas su spirgučiais arba grietine ar kitais priedais kaip pagrindinis patiekalas. Cepelinų istorija Yra keletas cepsų kilmės versijų. Viena populiariausių versija teigia, kad juos išrado prancūzas Luji Pasteras XIX a., o vėliau jie išplito po visą Europą. Kiti šaltiniai tvirtina, kad cepsai buvo pagaminti Prancūzijoje XVIII amžiuje. Cepelinus išpopuliarino prancūzai XIX amžiaus pradžioje, kai jie tapo populiariu maistu tarp prancūzų aristokratijos atstovų. Jie taip pat išpopuliarėjo Anglijoje, kur jie pirmą kartą pasirodė 1830-aisiais. Įvadas į receptą |
| Kokia yra Lietuvos sostinė? | Lietuva yra didžiausia šalis Europoje, turinti apie 800 milijonų gyventojų. Lietuvos sostinės Vilnius ir Kaunas laikomi didžiausiais miestais šalyje, kuriuose gyvena daugiau nei milijonas žmonių. Kalba ir tradicijos: Lietuva turi dvi oficialias kalbas – lietuvių (lietuvių) ir lenkų kalba. Vietos gyventojai: Lietuvoje gyvena daugiausia rusai – apie 19 % visų šalies gyventojų. Nacionalinė virtuvė: Lietuva garsėja savo tradicine virtuve – ji apima tradicinius patiekalus iš mėsos, žuvies ar daržovių bei tradicinę lietuvišką duoną. Kelionių patarimai: Jei norite pamatyti Lietuvą, būtinai aplankykite Vilniaus oro uostą! Jis žinomas dėl puikios saugumo patikros su Europos Sąjungos vėliav |
| Kaip iškepti blynus? | Kaip kepti blynus? Štai keletas patarimų, kaip išsikepti puikius ir skanius blynus: - Prieš pradėdami kepkite ant vidutinės ugnies. Tai padės išvengti degėsių susidarymo. - Kepkite su daug riebalų arba aliejaus. Jei kepate iš pusės porcijos, kepimo laikas sutrumpės iki maždaug 10 minučių vienai porcijai. - Įjunkite orkaitę, kai ji įkais iki 180 °F (350°C). - Įpilkite tešlą į keptuvę. Jei naudojate apvalią ar kvadratinę formą, naudokite nelipnią keptuvę (jei neturite tokios formos) arba didelę keksiukų skardą. Tešlos perteklių pašalinkite šaukštu. - Kepkite, kol viršus pradės ruduoti. Tai gali užtrukti nuo |
Acknowledgments
This project was built by Aividas, student @ KTMC (Klaipėdos technologijų mokymo centras). Training compute provided by Vast.ai. Funded out of my pocket.
Model tree for apparentlyjames/LEMMIS-1.24B
Unable to build the model tree, the base model loops to the model itself. Learn more.