Перевод MADLAD-400 (локально, 400+ языков)

MADLAD-400-3B-MT — это encoder-decoder модель T5 v1.1 от Google, обученная для многоязычного машинного перевода между 400+ языками. Apache 2.0. Сборка Soniqo работает как квантованные MLX safetensors (INT4 / INT8) на Apple Silicon без облачных вызовов. Подключайте после ASR для живых субтитров, перед TTS для многоязычных голосовых агентов или используйте отдельно.

Pipe из ASR

audio transcribe meeting.wav | audio translate --to es — тот же бинарник; единственный обязательный параметр — целевой язык. Исходный язык определяется энкодером автоматически — вы указываете только, на какой язык переводить.

Быстрый старт

import MADLADTranslation

let translator = try await MADLADTranslator.fromPretrained()

let es = try translator.translate("Hello, how are you?", to: "es")
// → "Hola, ¿cómo estás?"

let zh = try translator.translate("Where is the library?", to: "zh")
// → "图书馆在哪里?"

for try await piece in translator.translateStream("Good morning", to: "fr") {
    print(piece, terminator: "")
}

CLI

audio translate "Hello, how are you?" --to es
audio translate "Bonjour" --to en --quantization int8
audio translate "Hello world" --to es --stream
audio translate --to fr --json    # JSON with timing metrics

# Pipe from ASR
audio transcribe meeting.wav | audio translate --to es

Архитектура

Encoder-decoder T5 v1.1, около 3 млрд параметров. 32 слоя энкодера + 32 слоя декодера, d_model = 1024, d_kv = 128, num_heads = 16, gated-GeLU FFN (d_ff = 8192). Информация о позиции приходит не через позиционные эмбеддинги, а через обучаемое относительное позиционное смещение (32 бакета, максимальное расстояние 128) — двунаправленное в энкодере, однонаправленное (только прошлое) в декодере. Таблица смещения существует только на первом слое каждого стека и распространяется на остальные. Скоры внимания не масштабируются на 1/√d_k — это особенность T5.

K/V кросс-внимания вычисляется один раз из выхода энкодера и переиспользуется на каждом шаге декодирования (кэшируется в DecoderLayerCache.crossAttn). KV-кэш self-attention декодера растёт с каждым сгенерированным токеном. Greedy-декодирование — значение по умолчанию и рекомендуется для перевода; сэмплирование temperature / top-k / top-p доступно для парафраз-сценариев.

Варианты модели

ВариантКвантизацияРазмерComputeHuggingFace
MADLAD-400-3B-MTINT4~1.7 GBMetal GPU (MLX)aufklarer/MADLAD400-3B-MT-MLX (int4/)
MADLAD-400-3B-MTINT8~3.1 GBMetal GPU (MLX)aufklarer/MADLAD400-3B-MT-MLX (int8/)

Целевые языки

Цель указывается кодом языка из словаря MADLAD (обычно ISO 639-1 — es, fr, zh, ja, плюс 400+ региональных вариантов, например yue для кантонского или min_nan для хоккиенского). Токенизатор разрешает <2{lang}> прямым лукапом по словарю и бросает MADLADTranslationError.unsupportedLanguage, если код не распознан. Исходный язык определяется по тексту автоматически — не указывайте.

Настройки сэмплинга

let sampling = TranslationSamplingConfig(
    temperature: 0.0,
    topK: 0,
    topP: 1.0,
    maxTokens: 256,
    repetitionPenalty: 1.0
)
let result = try translator.translate("Long-form text…", to: "es", sampling: sampling)
ПараметрПо умолчаниюОписание
temperature0.00 = greedy. Для вариаций типа парафраза — 0.6–0.8.
topK0Top-K cutoff (0 = выключен).
topP1.0Cutoff nucleus-сэмплинга.
maxTokens256Жёсткое ограничение длины выхода.
repetitionPenalty1.0>1 штрафует недавно сгенерированные токены.

Конвертация

MLX safetensors на aufklarer/MADLAD400-3B-MT-MLX квантованы из google/madlad400-3b-mt через mx.quantize (group size 64). Квантованы: q/k/v/o, wi_0/wi_1/wo, lm_head и эмбеддинг shared; скейлы layer norm и таблица относительного позиционного смещения остаются в fp16. Единственный HF-эмбеддинг ключ MADLAD (decoder.embed_tokens.weight) при конвертации переименовывается в shared.weight, чтобы и энкодер, и декодер использовали его совместно.

Лицензия

Apache 2.0 (унаследовано от google/madlad400-3b-mt). Полный список поддерживаемых языковых кодов — в model card.