Веб-приложение для автоматической фонетической транскрипции английских слов. В основе — собственная реализация архитектуры Transformer (encoder-decoder), обученная на датасете CMUdict.
Введите слово или предложение → получите транскрипцию в формате ARPAbet.
cucumber → K Y UW1 K AH0 M B ER0
hello world → HH AH0 L OW1 | W ER1 L D
Интерфейс выполнен в стиле переводчика: в левом окне вы пишите предложения на английском. В правом окне - транслитерация каждого слова в составе предложений с дополнительной информацией о фонемах.
Transformer реализован с нуля на PyTorch по статье Attention Is All You Need:
| Параметр | Значение |
|---|---|
| Encoder layers | 4 |
| Decoder layers | 4 |
| Attention heads | 8 |
| Embedding dim | 256 |
| FFN dim | 1024 |
| Dropout | 0.1 |
| Source vocab | 78 (буквы, цифры, пунктуация) |
| Target vocab | 88 (ARPAbet фонемы) |
Модель включает: Multi-Head Self-Attention, Cross-Attention, Positional Encoding (синусоидальный), causal mask для декодера и padding mask.
Инференс — авторегрессивный (greedy decoding): на каждом шаге декодер генерирует следующую фонему, пока не выдаст <eos>.
CMU Pronouncing Dictionary — 135 166 пар «слово → фонетическая транскрипция». Разбиение: 85% train / 15% validation.
- Оптимизатор: Adam, lr = 2e-4
- Loss: CrossEntropyLoss (ignore_index = pad)
- Gradient clipping: clip_grad_norm_
- Эпох: 15
- Платформа: Kaggle GPU (CUDA)
Полный код обучения — в transliteration-transformer.ipynb.
transliteration_project/
├── main.py # FastAPI backend + модель
├── static/
│ └── index.html # Веб-интерфейс
├── transliteration_model_weights.pth # Веса модели (в .gitignore)
├── src_vocab_info.json # Словарь графем
├── trg_vocab_info.json # Словарь фонем
├── transliteration-transformer.ipynb # Ноутбук с обучением
├── requirements.txt
└── .gitignore
pip install -r requirements.txtСкачайте файл transliteration_model_weights.pth и положите в корень проекта. Файл не включён в репозиторий из-за размера.
https://disk.yandex.ru/d/fZi7IuV_kP9tIA
uvicorn main:app --host 0.0.0.0 --port 8000Откройте http://localhost:8000 в браузере.
Request:
{
"text": "hello world",
"separator": " | "
}Response:
{
"text": "hello world",
"phonemes": "HH AH0 L OW1 | W ER1 L D",
"words": [
{"word": "hello", "phonemes": "HH AH0 L OW1"},
{"word": "world", "phonemes": "W ER1 L D"}
]
}Фонемы отображаются цветными чипами с категоризацией:
- 🔴 Гласные (vowels) — AA, AE, AH, EY, IY, OW...
- 🔵 Смычные (stops) — B, D, G, K, P, T
- 🟢 Фрикативные (fricatives) — F, S, SH, TH, V, Z...
- 🟡 Носовые и плавные (nasals & liquids) — L, M, N, R, W, Y
Цифры при гласных (0, 1, 2) обозначают уровень ударения.
- PyTorch — модель и инференс
- FastAPI — REST API
- HTML/CSS/JS — фронтенд