micm-nlp

NLP research toolkit for tokenization, pretraining, fine-tuning, and PEFT across encoder-only, decoder-only, and encoder-decoder architectures. Built on top of HuggingFace transformers, peft, and datasets.

pip install micm-nlp

micm-nlp is a config-driven research toolkit for multilingual NLP work. It wraps the HuggingFace stack with a small set of high-level building blocks — CONFIG, TOKENIZER, DATASET, MODEL, and a unified TRAINER — that compose into reproducible training, fine-tuning, and evaluation pipelines.

It has backed two peer-reviewed publications: Cross-Prompt Encoder for Low-Performing Languages (Findings of IJCNLP–AACL 2025; ACL Anthology) and A Comparison of Different Tokenization Methods for the Georgian Language (ICNLSP 2024; ACL Anthology).

The package currently ships two examples that exercise a single use case end-to-end: preprocessing and decoder-only PEFT fine-tuning (XPE) on an FTP-reframed multilingual dataset hosted on the HuggingFace Hub. The toolkit’s underlying surface is broader than these two examples demonstrate.

Additional examples covering encoder-only text classification, encoder-decoder seq2seq, and MLM pretraining will land in subsequent releases. Contributions and issue reports are welcome.

What it is

A library, not an experiment runner. The building blocks compose into one chain:

CONFIG (YAML) → tokenizer.load() → DATASET → MODEL → PEFT → TRAINER → compute_metrics

Everything above is selected from YAML — including the concrete HuggingFace classes. model.pretrained.cls, trainer.cls, data_collator.cls and training_args.cls are resolved by name at runtime, so adding a backbone or a head normally needs no code change. Experiment logic — language groups, run-tree layouts, result aggregation, cluster dispatch — lives in consumer repositories that import this package, never here.

Symbol

Role

CONFIG

Loads and validates YAML (CONFIG.from_yaml)

tokenizer.load()

AutoTokenizer factory

DATASET

Loads and preprocesses HuggingFace, CSV or TXT datasets; concatenation

MODEL

from_pretrained via model.pretrained.cls; injects num_labels for classification

PEFT

Routes to stock PEFT methods or the Cross-Prompt Encoder path

TRAINER

Builds the HuggingFace Trainer: arguments, collator, callbacks, evaluation

Scope

Configuration, datasets, models, PEFT dispatch, training and evaluation carry no assumptions about any particular study.

Published work is not partitioned off into a “research” corner — it sits in the package where it belongs, and each module’s own page cites the paper behind it. The Cross-Prompt Encoder is models.xpe; the Georgian tokenization work is tokenizers.architectures and tokenizers.ka_sen_tok. None of it is required to use the rest.

Provenance

micm-nlp was developed at the Muskhelishvili Institute of Computational Mathematics (MICM, Georgian Technical University), in close research collaboration with Teimuraz Saghinadze (MICM), Simon Ostermann (DFKI / CERTAIN), and Philipp Müller (Max Planck Institute for Intelligent Systems), whose joint work on the Cross-Prompt Encoder (XPE) drove much of the toolkit’s design and validation.

This work was partially supported by the European Union under Horizon Europe project “GAIN” (GA #101078950) and by the German Federal Ministry of Research, Technology and Space (BMFTR) as part of the project TRAILS (01IW24005).

The package was formerly named nlpka; that name survives only in the archived repository behind the IJCNLP–AACL paper.

Citation

If you use micm-nlp in your research, please cite the package and (if relevant to your work) the XPE paper that drove its design:

@software{micm_nlp,
  author = {Mikaberidze, Beso},
  title = {micm-nlp: NLP research toolkit for multilingual fine-tuning and PEFT},
  url = {https://github.com/bmikaberidze/micm-nlp},
  version = {0.3.0},
  year = {2026},
}

@misc{mikaberidze2025crosspromptencoderlowperforminglanguages,
  title         = {Cross-Prompt Encoder for Low-Performing Languages},
  author        = {Beso Mikaberidze and Teimuraz Saghinadze and Simon Ostermann and Philipp Muller},
  year          = {2026},
  eprint        = {2508.10352},
  archivePrefix = {arXiv},
  primaryClass  = {cs.CL},
  url           = {https://arxiv.org/abs/2508.10352},
}