Add complete NLLB-200 support with all 204 FLORES-200 languages
Updated dual model system to fully support both M2M100 and NLLB-200: **NLLB-200 Model (204 languages)** - Added all 204 FLORES-200 language codes to nllb200_lang_codes dictionary - Updated language code mappings with FLORES-200 format (xxx_Yyyy) - Added 24+ NLLB-exclusive languages including: - Southeast Asian: Acehnese, Balinese, Banjar, Buginese, Minangkabau - South Asian: Assamese, Awadhi, Bhojpuri, Chhattisgarhi, Magahi, Maithili, Meitei, Odia, Santali - African: Akan, Bambara, Bemba, Chokwe, Dyula, Fon, Kikuyu, Kimbundu, Kongo, Luba-Kasai, Luo, Mossi, Nuer - Arabic dialects: Mesopotamian, Najdi, Moroccan, Egyptian, Tunisian, South/North Levantine - European regional: Asturian, Friulian, Latgalian, Ligurian, Limburgish, Lombard, Norwegian Nynorsk/Bokmål, Occitan, Sardinian, Sicilian, Silesian, Venetian - Other: Dzongkha, Fijian, Guarani, Kabyle, Kabuverdianu, Papiamento, Quechua, Samoan, Sango, Shan, Tamasheq, Tibetan, Tok Pisin **Updated Files** - app/translator.py: Complete NLLB-200 language mappings (204 languages) - app/main.py: Added display names for all 204+ language codes - README.md: Updated with dual model system, NLLB-200 details, license info - CLAUDE.md: Updated developer documentation with model architecture **Testing** - Verified M2M100: 105 languages working ✅ - Verified NLLB-200: 204 languages working ✅ - Tested NLLB-exclusive languages (Bemba, Fon, etc.) ✅ **License Information** - M2M100: Apache 2.0 - Commercial use allowed - NLLB-200: CC-BY-NC 4.0 - Non-commercial only 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
155
README.md
155
README.md
@ -1,38 +1,52 @@
|
||||
# Multilingual Translation API
|
||||
|
||||
105개 이상의 언어를 지원하는 다국어 번역 REST API 서비스입니다. 상업적 사용이 가능한 Apache 2.0 라이선스 모델을 사용합니다.
|
||||
최대 204개 언어를 지원하는 다국어 번역 REST API 서비스입니다. 상업적 사용이 가능한 M2M100 모델(105개 언어)을 기본으로 제공하며, 비상업적 용도로 NLLB-200 모델(204개 언어)을 선택할 수 있습니다.
|
||||
|
||||
## 주요 기능
|
||||
|
||||
- **105개 이상의 언어 지원** - 모든 언어 간 양방향 번역 가능 (Any-to-Any Translation)
|
||||
- **상업적 사용 가능** - Apache 2.0 라이선스의 Facebook M2M100 모델 사용
|
||||
- **고성능 번역** - 418M 파라미터 신경망 기계 번역 모델
|
||||
- **최대 204개 언어 지원** - 모든 언어 간 양방향 번역 가능 (Any-to-Any Translation)
|
||||
- **듀얼 모델 시스템**
|
||||
- **M2M100** (기본): 105개 언어, Apache 2.0 라이선스, **상업적 사용 가능** ✅
|
||||
- **NLLB-200** (옵션): 204개 언어, CC-BY-NC 4.0 라이선스, 비상업적 용도만 가능
|
||||
- **고성능 번역** - 최신 신경망 기계 번역 모델
|
||||
- **FastAPI 기반** - 고성능 비동기 REST API
|
||||
- **Docker 지원** - 간편한 배포 및 확장
|
||||
- **자동 API 문서화** - Swagger UI 제공
|
||||
- **GPU 자동 감지** - CUDA 사용 가능 시 자동으로 GPU 활용
|
||||
|
||||
## 지원 언어 (105개)
|
||||
## 지원 언어
|
||||
|
||||
### 주요 언어
|
||||
English, 中文 (Chinese), Español (Spanish), العربية (Arabic), हिन्दी (Hindi), বাংলা (Bengali), Português (Portuguese), Русский (Russian), 日本語 (Japanese), Deutsch (German), Français (French), 한국어 (Korean), Italiano (Italian), Türkçe (Turkish)
|
||||
### M2M100 모델 (105개 언어, 기본)
|
||||
**상업적 사용 가능 ✅ Apache 2.0 License**
|
||||
|
||||
### 동남아시아 언어
|
||||
Bahasa Melayu (Malay), Bahasa Indonesia (Indonesian), ไทย (Thai), Tiếng Việt (Vietnamese), Tagalog, မြန်မာဘာသာ (Burmese), ភាសាខ្មែរ (Khmer), ລາວ (Lao), Filipino, Cebuano, Basa Jawa (Javanese), Basa Sunda (Sundanese)
|
||||
주요 언어: English, 中文 (Chinese), Español (Spanish), العربية (Arabic), हिन्दी (Hindi), বাংলা (Bengali), Português (Portuguese), Русский (Russian), 日本語 (Japanese), Deutsch (German), Français (French), 한국어 (Korean), Italiano (Italian), Türkçe (Turkish)
|
||||
|
||||
### 남아시아 언어
|
||||
اردو (Urdu), தமிழ் (Tamil), తెలుగు (Telugu), मराठी (Marathi), ગુજરાતી (Gujarati), ಕನ್ನಡ (Kannada), മലയാളം (Malayalam), ਪੰਜਾਬੀ (Punjabi), नेपाली (Nepali), සිංහල (Sinhala)
|
||||
동남아시아: Bahasa Melayu (Malay), Bahasa Indonesia (Indonesian), ไทย (Thai), Tiếng Việt (Vietnamese), Tagalog, မြန်မာဘာသာ (Burmese), ភាសាខ្មែរ (Khmer), ລາວ (Lao)
|
||||
|
||||
### 유럽 언어
|
||||
Polski (Polish), Nederlands (Dutch), Українська (Ukrainian), Română (Romanian), Svenska (Swedish), Dansk (Danish), Suomi (Finnish), Norsk (Norwegian), Čeština (Czech), Slovenčina (Slovak), Magyar (Hungarian), Български (Bulgarian), Српски (Serbian), Hrvatski (Croatian), Slovenščina (Slovenian), Eesti (Estonian), Latviešu (Latvian), Lietuvių (Lithuanian), Ελληνικά (Greek), עברית (Hebrew), فارسی (Persian), Català (Catalan), Euskara (Basque), Galego (Galician), Cymraeg (Welsh), Gaeilge (Irish), Gàidhlig (Scottish Gaelic), Íslenska (Icelandic), Malti (Maltese)
|
||||
남아시아: اردو (Urdu), தமிழ் (Tamil), తెలుగు (Telugu), मराठी (Marathi), ગુજરાતી (Gujarati), ಕನ್ನಡ (Kannada), മലയാളം (Malayalam), ਪੰਜਾਬੀ (Punjabi), नेपाली (Nepali), සිංහල (Sinhala)
|
||||
|
||||
### 아프리카 언어
|
||||
Kiswahili (Swahili), አማርኛ (Amharic), Hausa, Igbo, Yorùbá (Yoruba), isiZulu (Zulu), isiXhosa (Xhosa), Afrikaans, Malagasy, Luganda, Lingála (Lingala), chiShona (Shona), Soomaali (Somali), Sesotho, Chichewa
|
||||
유럽: Polski (Polish), Nederlands (Dutch), Українська (Ukrainian), Română (Romanian), Svenska (Swedish), Dansk (Danish), Suomi (Finnish), Norsk (Norwegian), Čeština (Czech), Slovenčina (Slovak), Magyar (Hungarian), Български (Bulgarian), Српski (Serbian), Hrvatski (Croatian), Slovenščina (Slovenian), Eesti (Estonian), Latviešu (Latvian), Lietuvių (Lithuanian), Ελληνικά (Greek), עברית (Hebrew), فارسی (Persian), Català (Catalan), Euskara (Basque), Galego (Galician), Cymraeg (Welsh), Gaeilge (Irish), Gàidhlig (Scottish Gaelic), Íslenska (Icelandic), Malti (Maltese)
|
||||
|
||||
### 기타 언어
|
||||
Azərbaycan (Azerbaijani), ქართული (Georgian), Қазақша (Kazakh), Oʻzbekcha (Uzbek), Монгол (Mongolian), Shqip (Albanian), Հայերեն (Armenian), Беларуская (Belarusian), Bosanski (Bosnian), Esperanto, Frysk (Frisian), ʻŌlelo Hawaiʻi (Hawaiian), Hmong, Kreyòl ayisyen (Haitian Creole), Kurdî (Kurdish), Кыргызча (Kyrgyz), Latina (Latin), Lëtzebuergesch (Luxembourgish), Te Reo Māori (Maori), Македонски (Macedonian), پښتو (Pashto), Тоҷикӣ (Tajik), Türkmençe (Turkmen), ئۇيغۇرچە (Uyghur), ייִדיש (Yiddish)
|
||||
아프리카: Kiswahili (Swahili), አማርኛ (Amharic), Hausa, Igbo, Yorùbá (Yoruba), isiZulu (Zulu), isiXhosa (Xhosa), Afrikaans, Malagasy, Luganda, Lingála (Lingala), chiShona (Shona), Soomaali (Somali), Sesotho, Chichewa
|
||||
|
||||
**전체 언어 목록은 `/api/supported-languages` 엔드포인트에서 확인하실 수 있습니다.**
|
||||
기타: Azərbaycan (Azerbaijani), ქართული (Georgian), Қазақша (Kazakh), Oʻzbekcha (Uzbek), Монгол (Mongolian), Shqip (Albanian), Հայերեն (Armenian), Беларуская (Belarusian), Bosanski (Bosnian), Esperanto, Frysk (Frisian), ʻŌlelo Hawaiʻi (Hawaiian), Hmong, Kreyòl ayisyen (Haitian Creole), Kurdî (Kurdish), Кыргызча (Kyrgyz), Latina (Latin), Lëtzebuergesch (Luxembourgish), Te Reo Māori (Maori), Македонски (Macedonian), پښتو (Pashto), Тоҷикӣ (Tajik), Türkmençe (Turkmen), ئۇيغۇرچە (Uyghur), ייִדיש (Yiddish)
|
||||
|
||||
### NLLB-200 모델 (204개 언어, 옵션)
|
||||
**비상업적 용도만 가능 ⚠️ CC-BY-NC 4.0 License**
|
||||
|
||||
M2M100의 105개 언어에 더해 다음 99개 추가 언어 지원:
|
||||
- **동남아시아**: Acehnese, Balinese, Banjar, Buginese, Minangkabau
|
||||
- **남아시아**: Assamese, Awadhi, Bhojpuri, Chhattisgarhi, Magahi, Maithili, Meitei, Odia, Santali
|
||||
- **아프리카**: Akan, Bambara, Bemba, Chokwe, Dyula, Fon, Kikuyu, Kimbundu, Kongo, Luba-Kasai, Luo, Mossi, Nuer, Northern Sotho, Tumbuka, Umbundu, Wolof
|
||||
- **중동/아랍**: Mesopotamian Arabic, Najdi Arabic, Moroccan Arabic, Egyptian Arabic, Tunisian Arabic, South Levantine Arabic, North Levantine Arabic, Dari, Central Kurdish, Sindhi
|
||||
- **유럽**: Asturian, Friulian, Latgalian, Ligurian, Limburgish, Lombard, Norwegian Nynorsk, Norwegian Bokmål, Occitan, Sardinian, Sicilian, Silesian, Venetian
|
||||
- **중앙아시아**: Bashkir, Crimean Tatar, South Azerbaijani, Tatar
|
||||
- **기타**: Dzongkha, Fijian, Guarani, Kabyle, Kabuverdianu, Papiamento, Quechua, Samoan, Sango, Shan, Tamasheq, Tibetan, Tok Pisin
|
||||
- 그 외 다양한 지역 언어 및 방언
|
||||
|
||||
**전체 언어 목록 및 언어 코드는 다음 엔드포인트에서 확인:**
|
||||
- M2M100: `/api/supported-languages?model=m2m100`
|
||||
- NLLB-200: `/api/supported-languages?model=nllb200`
|
||||
|
||||
## 빠른 시작
|
||||
|
||||
@ -76,6 +90,8 @@ python run.py
|
||||
|
||||
### 번역 요청
|
||||
|
||||
#### M2M100 모델 (기본, 상업적 사용 가능)
|
||||
|
||||
```bash
|
||||
# 말레이어 → 영어
|
||||
curl -X POST "http://localhost:8001/api/translate" \
|
||||
@ -86,31 +102,14 @@ curl -X POST "http://localhost:8001/api/translate" \
|
||||
"target_lang": "en"
|
||||
}'
|
||||
|
||||
# 영어 → 한국어
|
||||
# 영어 → 한국어 (model 파라미터 생략 시 m2m100이 기본값)
|
||||
curl -X POST "http://localhost:8001/api/translate" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"text": "Hello, how are you?",
|
||||
"source_lang": "en",
|
||||
"target_lang": "ko"
|
||||
}'
|
||||
|
||||
# 영어 → 방글라데시어
|
||||
curl -X POST "http://localhost:8001/api/translate" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"text": "Good morning",
|
||||
"source_lang": "en",
|
||||
"target_lang": "bn"
|
||||
}'
|
||||
|
||||
# 일본어 → 영어
|
||||
curl -X POST "http://localhost:8001/api/translate" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"text": "こんにちは、元気ですか?",
|
||||
"source_lang": "ja",
|
||||
"target_lang": "en"
|
||||
"target_lang": "ko",
|
||||
"model": "m2m100"
|
||||
}'
|
||||
```
|
||||
|
||||
@ -125,15 +124,61 @@ curl -X POST "http://localhost:8001/api/translate" \
|
||||
}
|
||||
```
|
||||
|
||||
### 지원 언어 확인
|
||||
#### NLLB-200 모델 (204개 언어, 비상업적 용도)
|
||||
|
||||
```bash
|
||||
curl http://localhost:8001/api/supported-languages
|
||||
# 영어 → 벵골어 (NLLB-200 사용)
|
||||
curl -X POST "http://localhost:8001/api/translate" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"text": "Good morning",
|
||||
"source_lang": "en",
|
||||
"target_lang": "bn",
|
||||
"model": "nllb200"
|
||||
}'
|
||||
|
||||
# 영어 → Bemba (NLLB-200 전용 언어)
|
||||
curl -X POST "http://localhost:8001/api/translate" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"text": "Welcome to our service",
|
||||
"source_lang": "en",
|
||||
"target_lang": "bem",
|
||||
"model": "nllb200"
|
||||
}'
|
||||
```
|
||||
|
||||
응답:
|
||||
```json
|
||||
{
|
||||
"original_text": "Good morning",
|
||||
"translated_text": "শুভ সকাল",
|
||||
"source_lang": "en",
|
||||
"target_lang": "bn",
|
||||
"model_used": "facebook/nllb-200-distilled-600M"
|
||||
}
|
||||
```
|
||||
|
||||
### 지원 언어 확인
|
||||
|
||||
```bash
|
||||
# M2M100 지원 언어 (105개)
|
||||
curl http://localhost:8001/api/supported-languages?model=m2m100
|
||||
|
||||
# NLLB-200 지원 언어 (204개)
|
||||
curl http://localhost:8001/api/supported-languages?model=nllb200
|
||||
```
|
||||
|
||||
응답:
|
||||
```json
|
||||
{
|
||||
"model": {
|
||||
"name": "M2M100",
|
||||
"languages": 105,
|
||||
"license": "Apache 2.0",
|
||||
"commercial_use": true,
|
||||
"model_id": "facebook/m2m100_418M"
|
||||
},
|
||||
"languages": [
|
||||
{
|
||||
"code": "af",
|
||||
@ -184,7 +229,9 @@ curl http://localhost:8001/health
|
||||
- **FastAPI**: 고성능 비동기 웹 프레임워크
|
||||
- **Transformers (Hugging Face)**: 머신러닝 모델 로딩 및 추론
|
||||
- **PyTorch**: 딥러닝 프레임워크
|
||||
- **M2M100 (Facebook)**: 418M 파라미터 다국어 번역 모델
|
||||
- **번역 모델**:
|
||||
- **M2M100 (Facebook)**: 418M 파라미터, 105개 언어 (기본)
|
||||
- **NLLB-200 (Facebook)**: 600M 파라미터, 204개 언어 (옵션)
|
||||
- **Docker & Docker Compose**: 컨테이너화 및 배포
|
||||
- **Pydantic**: 데이터 검증 및 설정 관리
|
||||
- **Uvicorn**: ASGI 서버
|
||||
@ -197,7 +244,7 @@ site13/
|
||||
│ ├── __init__.py
|
||||
│ ├── main.py # FastAPI 애플리케이션 및 엔드포인트
|
||||
│ ├── models.py # Pydantic 데이터 모델
|
||||
│ ├── translator.py # 번역 서비스 로직 (M2M100)
|
||||
│ ├── translator.py # 번역 서비스 로직 (M2M100 + NLLB-200)
|
||||
│ └── config.py # 설정 관리
|
||||
├── models/ # 다운로드된 번역 모델 캐시 (자동 생성)
|
||||
├── requirements.txt # Python 의존성
|
||||
@ -220,11 +267,13 @@ site13/
|
||||
|
||||
## 성능 최적화
|
||||
|
||||
- 첫 실행 시 M2M100 모델을 다운로드하므로 시간이 걸릴 수 있습니다 (~1.5GB)
|
||||
- 첫 실행 시 선택한 모델을 다운로드합니다:
|
||||
- M2M100: ~1.6GB
|
||||
- NLLB-200: ~2.5GB
|
||||
- 모델은 `models/` 디렉토리에 캐시되어 재사용됩니다
|
||||
- GPU가 있는 경우 자동으로 감지하여 사용합니다
|
||||
- Docker volume을 사용하여 모델을 영구 저장합니다
|
||||
- 시작 시 말레이어↔영어 모델을 미리 로드합니다
|
||||
- 시작 시 번역 모델을 미리 로드하여 첫 요청 응답 시간을 단축합니다
|
||||
|
||||
## 개발
|
||||
|
||||
@ -240,19 +289,31 @@ docker-compose up -d --build
|
||||
## 라이선스
|
||||
|
||||
### 모델 라이선스
|
||||
이 프로젝트는 **Facebook M2M100 모델**을 사용합니다.
|
||||
|
||||
#### M2M100 모델 (기본)
|
||||
- **라이선스**: Apache 2.0 License
|
||||
- **상업적 사용**: ✅ 허용됨
|
||||
- **상업적 사용**: ✅ **허용됨**
|
||||
- **모델 크기**: ~1.6GB
|
||||
- **언어 수**: 105개
|
||||
- **모델 정보**: https://huggingface.co/facebook/m2m100_418M
|
||||
|
||||
#### NLLB-200 모델 (옵션)
|
||||
- **라이선스**: CC-BY-NC 4.0 License
|
||||
- **상업적 사용**: ⚠️ **비상업적 용도만 가능**
|
||||
- **모델 크기**: ~2.5GB
|
||||
- **언어 수**: 204개
|
||||
- **모델 정보**: https://huggingface.co/facebook/nllb-200-distilled-600M
|
||||
- **주의**: 연구, 교육, 개인 프로젝트 등 비상업적 목적으로만 사용 가능합니다.
|
||||
|
||||
### 프로젝트 코드
|
||||
프로젝트 코드는 자유롭게 사용 가능합니다.
|
||||
|
||||
## 제한사항
|
||||
|
||||
- 텍스트 길이: 1-5000 자
|
||||
- 모델 크기: ~1.5GB (디스크 공간 필요)
|
||||
- 모델 크기: M2M100 ~1.6GB, NLLB-200 ~2.5GB (디스크 공간 필요)
|
||||
- Python 3.11 이하 버전 필요 (PyTorch 호환성)
|
||||
- NLLB-200 모델은 비상업적 용도로만 사용 가능
|
||||
|
||||
## 트러블슈팅
|
||||
|
||||
|
||||
Reference in New Issue
Block a user