NE-Agent: Khasi, Garo, Mizo어를 실제로 구사하는 AI 에이전트 구축하기
요약
인도 북동부의 소수 언어(Khasi, Garo, Mizo 등)를 지원하기 위해 구축된 AI 에이전트 NE-Agent를 소개합니다. 로컬 LLM과 미세 조정된 모델들을 결합하여 언어 식별, 임베딩, 번역, 음성 인식을 통합적으로 수행하는 NE-Stack을 구현했습니다.
핵심 포인트
- Ollama 기반의 로컬 LLM을 활용하여 클라우드 의존성 없는 에이전트 구축
- 언어 식별(LID), 임베딩, 번역, ASR을 통합하는 NE-Stack 구성
- 데이터 부족 문제를 해결하기 위해 LaBSE 및 Whisper 모델 미세 조정 수행
- 소규모 모델(1.5B)을 활용한 지능형 라우팅 시스템 구현
이 작업은 몇 달 동안 제 밤을 지새우게 만들었고, 마침내 세상에 나왔습니다. 인도 북동부에는 220개 이상의 토착 언어가 있지만, 이들을 위해 구축된 AI는 기본적으로 전무합니다. 구축할 수 있는 것이 없어서가 아닙니다. 단지 아무도 하지 않았을 뿐입니다. 그래서 제가 했습니다.
저는 Shillong에서 MWire Labs를 운영하고 있습니다. 저희는 이 지역을 위한 언어 모델, LID (언어 식별), embeddings (임베딩), ASR (자동 음성 인식), 번역을 포함하는 NE-Stack을 조용히 구축해 왔습니다. 하지만 HuggingFace에 놓여 있는 모델들은 무언가가 그것들을 하나로 묶어주지 않는 한 누구에게도 도움이 되지 않습니다. 그것이 바로 NE-Agent입니다.
기능
Khasi, Garo, Mizo 등 무엇이든 타이핑하거나 말해보세요. 사용 중인 언어가 무엇인지 파악하고, 당신이 실제로 원하는 것이 무엇인지(질문을 하는지, 무언가를 번역하는지, 오디오를 제공하는지) 결정하여 적절한 도구로 라우팅(routing)합니다.
pip install ne-agent
ollama pull qwen2.5:1.5b
ne-agent
그게 전부입니다. API 키도 필요 없고, 클라우드 의존성도 없습니다. Ollama를 통해 작은 로컬 LLM (대규모 언어 모델)을 실행하며, 그 외의 모든 것은 이 언어들을 위해 목적에 맞게 제작되었습니다.
구성 요소
- NE-LID는 11개 언어에 대해 99%의 정확도로 언어 식별(language detection)을 수행합니다.
- NE-Embed는 검색(retrieval)을 위해 미세 조정(fine-tuned)된 LaBSE 모델입니다. 기성 임베딩 모델들은 Garo나 Khasi를 거의 전혀 이해하지 못하기 때문입니다.
- 미세 조정된 NLLB 모델이 Khasi에서 영어로의 번역을 처리합니다.
- NE-ASR는 8개 언어에 대한 전사(transcription)를 위한 Whisper 미세 조정 모델입니다.
- 작은 로컬 모델(qwen2.5 1.5B)이 실제 라우팅(routing)과 생성(generation)을 수행합니다.
라우터(router)는 제가 가장 좋아하는 부분입니다. 쿼리(query)마다 사용자가 검색, 번역, 또는 전사를 원하는지 결정하는 것은 단지 동일한 작은 LLM일 뿐입니다. 하드코딩된 규칙도, 별도의 분류기(classifier)도 없습니다. 하나의 모델이 이중 역할을 수행합니다.
실제로 어려웠던 점
임베딩(embeddings)을 구축하는 것이 진짜 싸움이었습니다. Garo에 대한 LaBSE의 zero-shot 성능은 recall (재현율) 1에서 13%에 불과합니다. 저희의 병렬 데이터(parallel data)로 미세 조정(fine-tuning)한 후에는 90%로 뛰어오릅니다. Khasi와 Nyishi의 경우도 마찬가지입니다. 이러한 언어들은 범용 학습 데이터에 포함되어 있지 않기 때문에, 더 큰 파운데이션 모델(foundation model)로 이 과정을 지름길로 통과할 수는 없습니다. 직접 데이터를 구축해야만 합니다.
또한 Whisper의 generate API가 변경되어 구축 도중 전사(transcription) 파이프라인이 망가졌다는 사실과, 한 모델에 필요한 구버전 transformers와 다른 모델에 필요한 신버전 transformers를 혼합해서 사용하는 것은 기본적으로 도구당 별도의 환경(environment)이 필요하다는 사실을 고생하며 배웠습니다. 화려하지는 않지만, 이것이 현실입니다.
어려운 점
1.5B 모델은 검색(retrieval)이 올바른 문서를 가져올 때조차 때때로 환각(hallucination)을 일으킵니다. 번역은 현재 Khasi어만 지원합니다. NE-LID는 Mizo어와 Nyishi어가 음운론적으로 유사하기 때문에 가끔 두 언어를 혼동합니다. 이 중 어느 것도 숨겨져 있지 않으며, 논문의 한계(limitations) 섹션에 모두 명확하게 명시되어 있습니다.
왜 하는가
저자원 언어(low resource languages)를 위해 아무도 이런 것들을 만들지 않는다면, 그 언어들은 그냥 존재하지 않는 것이나 다름없기 때문입니다. 프런티어 연구소(frontier lab)가 Kokborok어를 우선순위에 두도록 만드는 시장 압력은 없습니다. 누군가는 먼저 지루한 인프라를 구축해야 합니다. 이것이 바로 그 작업입니다.
코드와 모델은 오픈 소스이며, CC BY 4.0 라이선스를 따릅니다.
- GitHub: github.com/MWirelabs/ne-agent
- PyPI: pypi.org/project/ne-agent
- Models: huggingface.co/MWirelabs
만약 저자원 언어 기술 분야에서 일하시거나, 해당 지역 출신으로서 이 프로젝트를 살펴보고 싶으시다면, 여러분의 의견을 듣고 싶습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기