임베딩 모델, 정적 임베딩, 동적 임베딩, model2vec기법, 증류(Distill), ONNX 버전, 차원, PCA 압축, 양자화

1. 임베딩 모델과 정적/동적 임베딩
임베딩(Embedding) 모델이란? 컴퓨터는 텍스트를 직접 이해하지 못한다. 임베딩 모델은 사람이 쓰는 단어, 문장, 문서를 의미가 담긴 수백~수천 개의 숫자 배열(벡터)로 변환해 주는 통역사 역할을 한다. 의미가 비슷한 단어나 문장은 숫자로 바꿨을 때도 서로 가까운 거리에 위치하게 된다.
ex) 멍멍이, 강아지

정적(Static) 임베딩 vs 동적(Dynamic) 임베딩

정적 임베딩(과거 방식): 단어 사전이 정해져 있고, 문맥과 상관없이 특정 단어는 항상 동일한 숫자 배열을 가진다. 예를 들어 "배가 아프다", "바다에 배가 떠 있다", "맛있는 배를 먹었다"에서 '배'는 모두 다른 의미지만, 정적 임베딩에서는 모두 같은 숫자로 변환된다.

동적 임베딩(현재 주류 방식): BERT, GPT 같은 트랜스포머 기반 모델들이 사용한다. 주변 문맥을 파악하여 똑같은 단어도 매번 다른 숫자 배열로 변환한다. 문맥을 타기 때문에 정확하지만, 변환할 때마다 무거운 딥러닝 연산을 거쳐야 해서 느리고 자원을 많이 먹는다.

1. BAAI/bge-m3의 정체와 인지도
BAAI는 베이징 인공지능 연구원을 뜻하며, 여기서 만든 bge-m3는 현재 오픈소스 임베딩 모델 진영에서 가장 유명하고 성능이 좋은 탑티어 모델 중 하나이다.

M3는 Multi-lingual(다국어 지원, 한국어 포함 100개국어 이상), Multi-functional(다양한 검색 방식 지원), Multi-granularity(짧은 단어부터 긴 문서까지 모두 지원)를 뜻한다. 성능은 압도적이지만, 딥러닝 기반이라 CPU 환경에서는 구동 속도가 느리다는 단점이 있다.

1. model2vec 기법
동적 임베딩 모델(bge-m3 등)을 정적 임베딩 모델로 변환해 주는 최신 오픈소스 프레임워크이자 기법이다.
무거운 트랜스포머 모델이 문장을 해석하는 패턴을 학습하여, "자주 쓰이는 단어들의 정적 벡터 사전"을 새로 만들어내는 기술이다. 이를 통해 딥러닝 연산 레이어를 전부 걷어내고 '단어 찾기(Lookup) + 평균 내기'라는 단순 수학 연산만으로 문장 임베딩을 만들 수 있게 해준다. 속도가 수백 배 빨라지는 핵심 비결이다.

1. 증류(Distill)
AI에서 지식 증류(Knowledge Distillation)는 크고 똑똑하지만 무거운 모델(교사 모델, Teacher)의 지식을, 작고 가벼운 모델(학생 모델, Student)에게 전수하는 기법이다.
예를 들어 무겁고 똑똑한 bge-m3를 교사 모델로 삼고, model2vec이라는 기술을 이용해 가볍고 빠른 정적 임베딩 모델(학생)로 지식을 압축해서 추출(증류)하는 식이다.

1. 한국어 임베딩 모델이 필요한 상황
텍스트의 '의미'를 기반으로 컴퓨터가 무언가를 처리해야 할 때 필수적이다.

시맨틱 검색(의미 기반 검색) : 사용자가 "머리 아플 때 먹는 약"이라고 검색했을 때, '타이레놀'이나 '두통약'처럼 글자는 달라도 의미가 통하는 문서를 찾아낼 때 쓴다.

RAG(Retrieval-Augmented Generation, 챗봇 연동) : ChatGPT나 Claude 같은 LLM에게 사내 문서나 특정 데이터를 참고해서 답변하라고 할 때, 관련 있는 문서를 데이터베이스에서 초고속으로 찾아 넘겨주는 핵심 엔진 역할을 한다.

텍스트 분류 및 유사도 검사 : 두 문장이 얼마나 비슷한지 비교하거나, 대량의 리뷰 데이터를 긍정/부정/불만 등으로 자동 분류할 때 사용한다.

1. ONNX 버전의 의미와 별도 제작 이유
ONNX(Open Neural Network Exchange) : AI 모델을 특정 프레임워크(PyTorch, TensorFlow 등)에 종속되지 않고, 어디서나 아주 빠르게 실행할 수 있도록 표준화한 포맷이다.

일반 모델과의 차이 및 별도 제작 이유 : 파이토치(PyTorch) 등으로 만든 일반 모델은 실행하려면 무거운 파이썬 라이브러리들을 잔뜩 설치해야 한다. 반면 ONNX로 변환된 모델은 C++, Java, C#, 심지어 웹 브라우저(JavaScript)나 모바일 기기에서도 별도의 무거운 의존성 없이 초고속으로 실행할 수 있다. 엣지나 서버리스(AWS Lambda 등) 환경에서 배포할 때 최고의 효율을 내기 때문에 별도로 빌드해두면 유용하다.

1. 차원과 PCA 압축
차원(Dimension) : 하나의 텍스트를 숫자로 표현할 때, 몇 개의 숫자로 이루어진 배열로 만들 것인가를 뜻한다. bge-m3 원본은 기본적으로 1024개의 숫자로 문장을 표현합니다. 차원이 클수록 정교하지만 용량을 많이 차지하고 계산이 느려진다.

PCA(주성분 분석) 압축: 데이터의 핵심적인 특징(의미)은 최대한 유지하면서, 중복되거나 덜 중요한 숫자들을 쳐내어 차원을 줄이는 통계적 기법이다. 예를 들어 1024개의 숫자를 256개로 축소(압축)하여, 저장 공간과 연산 속도 효율을 극대화할 수 있다.

1. 양자화 (Quantization)
일반적으로 AI 모델의 숫자들은 소수점 아래가 아주 긴 정밀한 수(32비트 부동소수점, FP32)로 되어 있다. 이를 8비트 정수(INT8) 데이터타입 등으로 단위를 뚝 떨어뜨려 변환하는 것이 양자화이다.

쉽게 말해, 0.12345678을 0.12 수준으로 단순화하는 것이다. 아주 미세한 성능(정밀도) 손실은 발생할 수 있지만, 예를 들어 모델 용량이 140MB에서 35MB로 4분의 1 토막이 난다면 메모리 사용량과 연산 속도가 비약적으로 이득을 보게 된다.