KOMOS
Automatic Mean Opinion Score Estimation for Korean Speech
KOMOS is a Korean mean opinion score predictor for overall speech quality across read and spontaneous speech. It combines a fully fine-tuned Whisper-medium encoder with a listener-conditioned prediction head and returns a score on the 1–5 MOS scale.
Highlights
- Trained with 5,000 ratings from 29 native Korean listeners for 1,000 utterances.
- Covers real recordings, synthesized speech, and degraded speech.
- Supports PyTorch and ONNX Runtime inference.
Results
Human MOS alignment
On the Korean test set, KOMOS follows the human MOS scale more closely than UTMOS v1.
Mean predicted MOS by human-MOS bucket after validation-set affine calibration. The dashed line shows ideal alignment.
Overall test performance
Utterance-level correlation with human MOS on the 100 utterance test set. UTMOS v1 and v2 are evaluated as English-trained zero-shot baselines, while KOMOS is fine-tuned on Korean quality ratings.
| Model | Test SRCC ↑ | Test LCC ↑ |
|---|---|---|
| UTMOS v1 | 0.703 | 0.798 |
| UTMOS v2 | 0.767 | 0.858 |
| KOMOS | 0.900 | 0.950 |
Speaker-disjoint and text-disjoint evaluation
Utterance-level SRCC on test subsets whose speakers or texts are absent from both the training and validation sets.
| Model | Overall ↑ | Speaker-disjoint ↑ | Text-disjoint ↑ |
|---|---|---|---|
| UTMOS v1 | 0.703 | 0.818 | 0.719 |
| UTMOS v2 | 0.767 | 0.823 | 0.778 |
| KOMOS | 0.900 | 0.951 | 0.878 |
Installation
Python 3.10 or later is required.
Install KOMOS from PyPI:
pip install komos
To work from a local checkout instead:
git clone https://github.com/upskyy/komos.git
cd komos
uv sync --no-dev
Quickstart
PyTorch
from komos import KOMOS
model = KOMOS.from_pretrained("upskyy/komos").eval()
score = model.score("audio.wav")
print(score)
Move the model to CUDA with model.to("cuda") when GPU inference is needed.
torch.hub
import torch
model = torch.hub.load("upskyy/komos:v0.0.1", "komos", trust_repo=True)
print(model.score("audio.wav"))
ONNX Runtime
pip install "komos[onnx]"
from komos.onnx import KOMOSOnnx
model = KOMOSOnnx.from_pretrained("upskyy/komos")
score = model.score("audio.wav")
print(score)
Inference
score() accepts an audio path or a mono NumPy array or PyTorch tensor with an explicit sample rate. File inputs are downmixed to mono and resampled to 16 kHz.
score()evaluates up to the first 10 seconds and returns a validation-calibrated score clipped to the 1–5 range.score_long_form()supports recordings of up to 60 seconds and computes a duration-weighted mean of raw scores from non-overlapping 10-second chunks before calibration.- Inputs longer than 60 seconds should be processed in external batches.
Citation
If you use KOMOS in your research, please cite:
@misc{ha2026komos,
title = {KOMOS: Automatic Mean Opinion Score Estimation for Korean Speech},
author = {Sangchun Ha and Junwon Moon and Kyuhong Shim},
year = {2026},
eprint = {2610.15353},
archivePrefix = {arXiv},
primaryClass = {eess.AS},
url = {https://arxiv.org/abs/2610.15353},
}
License
KOMOS is released under the MIT License. See LICENSE and NOTICE.
Metadata
Release files for komos 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| komos-0.0.1.tar.gz | 8.3 kB | Without provenance | Details for komos-0.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| komos-0.0.1-py3-none-any.whl | Python 3 | none | any | Details for komos-0.0.1-py3-none-any.whl |
Total release size: 18.9 kB
Release files / komos-0.0.1.tar.gz
| Download URL | komos-0.0.1.tar.gz |
|---|---|
| Size | 8.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
63b40b266c66e5b26f880483a91bf574a36e1ca76ccdb57318be5bd46ed79a72
|
|
BLAKE2b-256 checksum How to use checksums |
f523b33f12f0b6cbc035c10b3d55b05d14c739a56baf0b767c16c31f44da1156
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / komos-0.0.1-py3-none-any.whl
| Download URL | komos-0.0.1-py3-none-any.whl |
|---|---|
| Size | 10.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fd361a7f254a0b46cc0fd4abbd2f955f5a2774971df26cb661846cc533073f64
|
|
BLAKE2b-256 checksum How to use checksums |
dcd098aa0b6298459da56f7d1788ea781bbb646f7fb3e78c848b02bb1e4caad8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for komos 0.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.