SYNTOLOGY HomeExplorerAtlasCodeMethodologyAboutDevelopersFeedPricing
Paper · 2507.11412 · ICLR · 2025

Seq vs Seq: An Open Suite of Paired Encoders and Decoders

Antoine Chaffin, Benjamin Van Durme, Marc Marone, Orion Weller, Kathryn Ricci, Dawn Lawrie

arXiv · PDF · Open in the Atlas

Code that ran

We lifted 10 functions out of this paper's own repositories and ran 0 of them in a sandbox. "Ran" means the function executed on a synthesized input and returned a value. It is not a reproduction of the paper's results.

RepositoryRoleRan
jhu-clsp/ettin-encoder-vs-decoder canonical 0 of 10
FunctionStatusWhere it lives
copy_data_folder Not yet run jhu-clsp/ettin-encoder-vs-decoder/pretraining/data_processing/bin/sample_down_or_up_to_meet.py
code served (permissive licence) · get_code("907d1d57fc3bfcb9")
count_jsonl_lines Not yet run jhu-clsp/ettin-encoder-vs-decoder/pretraining/data_processing/bin/jsonl_to_mds.py
code served (permissive licence) · get_code("e051b521b313e36e")
count_samples Not yet run jhu-clsp/ettin-encoder-vs-decoder/pretraining/data_processing/bin/count_instances.py
code served (permissive licence) · get_code("52f254918710203e")
create_model_key Not yet run jhu-clsp/ettin-encoder-vs-decoder/bias_eval/batch_eval.py
code served (permissive licence) · get_code("805a542cd76d0dc6")
create_visualization Not yet run jhu-clsp/ettin-encoder-vs-decoder/bias_eval/create_plot.py
code served (permissive licence) · get_code("be4df63ffad5921c")
find_all_stats_files Not yet run jhu-clsp/ettin-encoder-vs-decoder/pretraining/data_processing/bin/sample_down_or_up_to_meet.py
code served (permissive licence) · get_code("9c036669e7a39b8c")
get_tokens_from_stats Not yet run jhu-clsp/ettin-encoder-vs-decoder/pretraining/data_processing/bin/sample_down_or_up_to_meet.py
code served (permissive licence) · get_code("d1c8fcebd8f6e32a")
load_existing_results Not yet run jhu-clsp/ettin-encoder-vs-decoder/bias_eval/batch_eval.py
code served (permissive licence) · get_code("ae71360e40902e60")
parse_model_data Not yet run jhu-clsp/ettin-encoder-vs-decoder/bias_eval/create_plot.py
code served (permissive licence) · get_code("a6cd85fd2f6cd892")
recalculate_percentages Not yet run jhu-clsp/ettin-encoder-vs-decoder/pretraining/data_processing/bin/sample_for_context_extension_random.py
code served (permissive licence) · get_code("3be0f2f6856a628f")

Repositories linked to this paper

Some links come from the archived Papers with Code dataset (CC BY-SA 4.0): attribution and licence.

Abstract

The large language model (LLM) community focuses almost exclusively on decoder-only language models, since they are easier to use for text generation. However, a large subset of the community still uses encoder-only models for tasks such as classification or retrieval. Previous work has attempted to compare these architectures, but is forced to make comparisons with models that have different numbers of parameters, training techniques, and datasets. We introduce the SOTA open-data ETTIN 1 suite of models: paired encoder-only and decoder-only models ranging from 17 million parameters to 1 billion, trained on up to 2 trillion tokens. Using the same recipe for both encoder-only and decoder-only models produces SOTA recipes in both categories for their respective sizes, beating ModernBERT as an encoder and Llama 3.2 and SmolLM2 as decoders. Like previous work, we find that encoder-only models excel at classification and retrieval tasks while decoders excel at generative tasks. However, we show that adapting a decoder model to encoder tasks (and vice versa) through continued training is subpar compared to using only the reverse objective (i.e. a 400M encoder outperforms a 1B decoder on MNLI, and vice versa for generative tasks). We open-source all artifacts of this study including training data, training order segmented by checkpoint, and 200+ checkpoints to allow future work to analyze or extend all aspects of training. 2

For agents

The same record, over MCP at https://syntology.ai/mcp:

get_harvested_code_for_paper("2507.11412")
get_code_for_paper("2507.11412")
have("2507.11412")

Connect an agent — have() is free.