Перевод 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 для многоязычных голосовых агентов или используйте отдельно.
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 доступно для парафраз-сценариев.
Варианты модели
| Вариант | Квантизация | Размер | Compute | HuggingFace |
|---|---|---|---|---|
| MADLAD-400-3B-MT | INT4 | ~1.7 GB | Metal GPU (MLX) | aufklarer/MADLAD400-3B-MT-MLX (int4/) |
| MADLAD-400-3B-MT | INT8 | ~3.1 GB | Metal 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)
| Параметр | По умолчанию | Описание |
|---|---|---|
temperature | 0.0 | 0 = greedy. Для вариаций типа парафраза — 0.6–0.8. |
topK | 0 | Top-K cutoff (0 = выключен). |
topP | 1.0 | Cutoff nucleus-сэмплинга. |
maxTokens | 256 | Жёсткое ограничение длины выхода. |
repetitionPenalty | 1.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.