번역 기능 추가
🔨 절차형
💡
학습 전략: 연습 (Practice)
즉시 실전에 적용해 보는 것이 핵심
개요
번역 기능을 추가하기 위해 Facebook의 NLLB-200-distilled-600M 모델을 사용하려고 했습니다.
구현 코드
1
2
3
4
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-200-distilled-600M")
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-distilled-600M")
발생한 문제
공식 문서를 참고하여 직접 모델을 로드하는 과정에서 다음과 같은 문제가 발생했습니다:
1. 번역 언어 인식 문제
- 모델이 입력 텍스트의 언어를 정확히 인식하지 못함
- 소스 언어와 타겟 언어 설정이 필요
2. 의도하지 않은 언어로 번역되는 문제
- 번역 결과가 예상과 다른 언어로 출력됨
- 언어 코드 설정 오류
NLLB-200 모델 소개
특징
- 200개 언어 지원: 다양한 언어 간 번역 가능
- Distilled 버전: 경량화된 모델 (600M 파라미터)
- 고품질 번역: Facebook AI Research에서 개발
장점
- 저자원 언어 번역 지원
- 다국어 간 직접 번역 가능
- 상대적으로 작은 모델 크기
올바른 사용 방법
1. 언어 코드 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-200-distilled-600M")
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-distilled-600M")
# 한국어 -> 영어 번역
text = "안녕하세요"
inputs = tokenizer(text, return_tensors="pt")
# 소스 언어: 한국어 (kor_Hang)
# 타겟 언어: 영어 (eng_Latn)
translated_tokens = model.generate(
**inputs,
forced_bos_token_id=tokenizer.lang_code_to_id["eng_Latn"]
)
translation = tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]
print(translation)
2. Pipeline 사용 (권장)
1
2
3
4
5
6
7
8
9
10
11
from transformers import pipeline
translator = pipeline(
"translation",
model="facebook/nllb-200-distilled-600M",
src_lang="kor_Hang",
tgt_lang="eng_Latn"
)
result = translator("안녕하세요")
print(result[0]['translation_text'])
주요 언어 코드
| 언어 | 코드 |
|---|---|
| 한국어 | kor_Hang |
| 영어 | eng_Latn |
| 중국어 (간체) | zho_Hans |
| 일본어 | jpn_Jpan |
| 프랑스어 | fra_Latn |
| 독일어 | deu_Latn |
| 스페인어 | spa_Latn |
트러블슈팅 체크리스트
- 언어 코드가 올바르게 설정되었는지 확인
forced_bos_token_id설정 확인- 입력 텍스트 인코딩 확인
- 모델 버전 확인
- 토크나이저와 모델 버전 일치 여부 확인
향후 과제
추가적인 트러블슈팅이 필요한 상황입니다:
- 언어 자동 감지 기능 구현
- 번역 품질 평가
- 배치 번역 최적화
- 에러 핸들링 강화