3월 1-2주차 주요 뉴스
- Gemini Embedding by Google DeepMind
갑자기 바빠져서,, 사실상 Fortnightly가 아니라 Monthly가 된 것 같지만😂 어쨌든 소식을 물고 왔습니다..
오늘 포스트는 죄송하지만.. 참고문헌 표기법을 무시하고ㅜㅜ 작성하겠습니다.. 흑흑
Gemini Embedding by Google DeepMind
Gemini는 (슬프게도 쓰는 사람을 거의 못 봤지만ㅜㅜ) 구글이 ChatGPT에 대항해(?) 내놓은 인공지능 모델이죠. 이미 나온 지 한참 됐는데, 이번에 공개된 Embedding 모델이라는 것은 무엇일까요?
AI 모델이 어떤 입력(텍스트든, 이미지든)을 처리하기 위해서는, 입력을 적절한 숫자 형태로 바꿔줘야 합니다. 그런데 딸랑 숫자 하나로 나타낼 수 있는 정보가 무엇이 있겠나요.. 그래서 입력 데이터의 정보를 최대한 담기 위해 고차원의 벡터로 입력을 표현합니다. 이때 이 벡터를 임베딩 벡터(embedding vector), 벡터로 변환해주는 모델을 임베딩 모델이라고 합니다. 머신러닝/딥러닝을 공부해보신 분들에게는 익숙하겠지만, '원 핫 인코딩(one-hot encoding)'이 가장 기초적인 임베딩 방식이라고 말할 수 있을 것 같습니다. 내가 가지고 있는 사전의 크기가 $N$이라고 해봅시다. 그럼 어떤 문장을 표현할 때 벡터의 길이를 $N$으로 설정하고, 인덱스 각각이 사전 내의 단어 하나를 표현한다고 정할 수 있겠죠. 그럼 "강아지가 밥을 먹는다"라는 문장에서, '강아지', '가', '밥', '을', '먹는다' 각각이 사전의 인덱스 1, 4, 23, 78, 34번에 해당한다면, $N$차원 벡터에서 각각의 인덱스에 해당하는 자리에만 1을 표시해주고 나머지는 전부 0을 기입해주면 그 문장을 표현할 수 있겠죠? 이렇게요:
- 강아지가 밥을 먹는다 => $[0, 1, 0, 0, 1, \dots, 0, 1, 0, \dots, 1, 0, \dots, 0, 1]$
- 1, 4, 23, 34, 78번 인덱스에 1을 적고, 나머지는 전부 0인 벡터
이런 방식을 원핫 인코딩이라고 합니다. 그런데 요즘은 이런 방식은 거의 안 쓰고, 각 인덱스가 실수 값을 갖는 벡터 형식으로 표현된, 학습된 형태의 임베딩을 많이 써요. 임베딩은 문장뿐만 아니라 단어, 구(phrase), 문서 등 다양한 범위를 설정해서 생성할 수 있어요.
그런데 이런 의문이 들 수 있을 것 같아요. 어차피 GPT 같은 모델 안에 그렇게 벡터화하는 부분이 분명히 있을 텐데, 굳이 임베딩 모델이 필요한 이유가 있나? 좋은 질문이에요. 임베딩 모델과 GPT 등의 모델은 사실 구조가 약간 다른데, 통상적으로 임베딩 모델은 encoder-only, GPT 등의 생성형 모델은 decoder-only 모델이에요. 이것까지 자세히 설명하면 너무 off-track이라서 대략적으로만 설명하자면, decoder-only 모델은 애초에 학습 방식이 "강아지가 밥을 ___"에서 빈칸에 무엇이 들어갈지를 맞히는 next token prediction 방식이기 때문에 임베딩 생성 목적이 문맥 파악에 더 가까운 느낌이에요. 그래서 모델이 학습하는 데이터 내에 존재하는 단어의 문맥 정보를 학습하는 거라, 나중에 어떤 문장을 임베딩했을 때 그 값이 encoder-only 모델에 비해 크게 달라질 수도 있는 거죠. 그리고 encoder-only 모델은 벡터 자체를 생성하는 데 그 목적을 두고 있기 때문에, 나중에 유사도 기반 검색을 하는 데 유용하게 활용될 수 있어요. 이런 검색을 위해서 생성형 모델까지 필요하진 않으니 훨씬 효율적이기도 하고요.
더 자세한 설명은 아래 포스트를 참고해주세요! 임베딩의 개념을 깔끔하게 설명하고 있어요 :)
Embedding이란 무엇이고, 어떻게 사용하는가? - 싱클리(Syncly)
본 글에서는, AI에서 중요하게 취급되는 개념 중 하나인 embedding에 대해서 알아보고자 합니다. 현재 Syncly에서도 Feedback Auto-Categorization, Sentiment Classification 등의 기능에 embedding이 활용되고 있습니
www.syncly.kr
그러면 Gemini Embedding으로 다시 돌아와보죠. 얘가 기존의 임베딩 모델과 뭐가 그렇게 다르냐면…
공식 리포트(https://www.arxiv.org/abs/2503.07891)에서 모델 아키텍쳐 부분에 자세히 나와있는데, 폭력적으로 요약하자면 두 가지 특징이 있는 것 같아요. 첫째, Gemini의 파라미터로 initialize했기 때문에 Gemini에 저장된 지식을 활용할 수 있다는 점, 둘째, 의미적으로 —특히 다국어 차원에서— 유사한 벡터들을 가깝게 배치시켰기 때문에 100개 이상의 언어에 대해 다른 모델들보다 더 일관되고 좋은 성능을 보인다는 점. 구조적으로는 pooling 기법을 사용했다는 점 정도..? 그리고 input, output 벡터 차원 모두 증가시켜서 의미 정보를 더 많이 담았다고 하는 것 같습니다.
역시 모델을 개발했다면 대표적인 벤치마크로 성능테스트를 해야겠죠. MTEB 벤치마크로 평가한 결과..
WOW.. 다른 모델들에 비해 평균 7점 정도 더 좋아졌네요.
오늘은 여기까지만.. ㅜㅜ 다음에 더 재밌는 소식 많이 물어오겠습니다..