COMET-poly
Collection
Models and paper for COMET-poly: Machine Translation Metric Grounded in Other Candidates
•
5 items
•
Updated
This model is based on COMET-poly, which is a fork but not compatible with original Unbabel's COMET. To run the model, you need to first install this version of COMET either with:
pip install "git+https://github.com/zouharvi/COMET-poly#egg=comet-poly&subdirectory=comet_poly"
or in editable mode:
git clone https://github.com/zouharvi/COMET-poly.git
cd COMET-poly
pip3 install -e comet_poly
This model scores the translation mt
but takes additional in-context example: source src2
, translation mt2
, and score score2
, which makes it a better quality estimator:
import comet_poly
model = comet_poly.load_from_checkpoint(comet_poly.download_model("zouharvi/COMET-poly-ic1-wmt25"))
data = [
{
"src": "Iceberg lettuce got its name in the 1920s when it was shipped packed in ice to stay fresh.",
"mt": "Eisbergsalat erhielt seinen Namen in den 1920er-Jahren, als er in Eis verpackt verschickt wurde, um frisch zu bleiben.",
"src2": "Lettuce is mostly water, which helps keep it crisp when chilled.",
"mt2": "Kopfsalat besteht größtenteils aus Wasser, was ihm hilft, beim Kühlen knackig zu bleiben.",
"score2": 94.5
},
{
"src": "Goats have rectangular pupils, which give them a wide field of vision—up to 320 degrees!",
"mt": "Kozy mají obdélníkové zornice, což jim umožňuje vidět skoro všude kolem sebe, aniž by musely otáčet hlavou.",
"src2": "Sheep, like goats, also have rectangular pupils for better peripheral vision.",
"mt2": "Вівці, як і кози, також мають прямокутні зіниці для кращого периферичного зору.",
"score2": 96.0
},
{
"src": "This helps them spot predators from almost all directions without moving their heads.",
"mt": "Điều này giúp chúng phát hiện kẻ săn mồi từ gần như mọi hướng mà không cần quay đầu.",
"src2": "Many prey animals have evolved to detect threats with minimal movement.",
"mt2": "Nhiều động vật thịt có tiến hóa để xem mối nguy bằng nhỏ đi lại.",
"score2": 42.3
}
]
print("scores", model.predict(data, batch_size=8, gpus=1).scores)
Outputs:
scores [98.09857940673828, 85.52458953857422, 83.38972473144531]
You can use a readily-available training data to do the on-the-fly retrieval.
Specifically, this model has been trained with retrieval based on src
:
import datasets
import comet_poly.retrieval
data = [
{
"src": "Iceberg lettuce got its name in the 1920s when it was shipped packed in ice to stay fresh.",
"mt": "Eisbergsalat erhielt seinen Namen in den 1920er-Jahren, als er in Eis verpackt verschickt wurde, um frisch zu bleiben.",
},
{
"src": "Goats have rectangular pupils, which give them a wide field of vision—up to 320 degrees!",
"mt": "Kozy mají obdélníkové zornice, což jim umožňuje vidět skoro všude kolem sebe, aniž by musely otáčet hlavou.",
},
{
"src": "This helps them spot predators from almost all directions without moving their heads.",
"mt": "Điều này giúp chúng phát hiện kẻ săn mồi từ gần như mọi hướng mà không cần quay đầu.",
}
]
data_kb = list(datasets.load_dataset("zouharvi/wmt-human-all", split="train"))
data_retrieved = comet_poly.retrieval.retrieve_from_kb(
data=data,
data_kb=data_kb,
k=1, # this model takes one in-context example
prevent_hardmatch=False,
key="src",
)
# add the retrieved data
for line, lines_retrieved in zip(data, data_retrieved):
for i in range(len(lines_retrieved)):
line[f"src{i+2}"] = lines_retrieved[i]["src"]
line[f"mt{i+2}"] = lines_retrieved[i]["mt"]
line[f"score{i+2}"] = lines_retrieved[i]["score"]
print("scores", model.predict(data, batch_size=8, gpus=1).scores)
The training data is WMT up to 2024 (inclusive) with DA/ESA/MQM merged on a single scale. This model is based on the work TODO which can be cited as:
@misc{zuefle2025comet,
title={COMET-poly: Machine Translation Metric Grounded in Other Candidates},
author={Maike Züfle, Vilém Zouhar, Tu Anh Dinh, Felipe Polo, Jan Niehues, Mrinmaya Sachan},
year={2025},
}
Base model
FacebookAI/xlm-roberta-large