AI VIDEO BRIEFING
Ollama 임베딩 생성 방법: nomic-embed-text로 RAG 파이프라인 구축하기
RAG 파이프라인에서 임베딩이 하는 역할부터, Ollama에 nomic-embed-text를 설치해 문서 청크를 768차원 벡터로 바꾸는 파이썬 코드까지 단계별로 정리했다. 외부 API 없이 개인 PC에서 처리하는 방법이다.

핵심 메시지
쉽게 이해하기
이 영상은 RAG(검색 증강 생성) 연재의 네 번째 편으로, 앞선 편에서 문서를 불러와 전처리하고 청크로 쪼개는 데까지 마친 상태에서 출발한다. 이번 주제는 그 청크들을 검색 가능한 형태, 즉 임베딩으로 바꾸는 단계다. 발표자는 개념 설명과 설치, 그리고 실제 파이썬 코드 작성까지 한 번에 이어서 보여준다.
임베딩이 무엇인지부터 짚는다. 입력이 문서든 이미지든 오디오든, 임베딩 모델에 넣으면 숫자의 나열로 되돌아온다. 이때 중요한 건 숫자 자체가 아니라 배치다. 광합성에 관한 내용이면 광합성 관련 벡터끼리, 전기차에 관한 내용이면 전기차 관련 벡터끼리 한 무리로 모인다. 나중에 질문이 들어오면 시스템은 그 질문이 속한 무리를 찾아가 관련 정보를 꺼내온다.
도구로는 Ollama를 쓴다. Ollama는 그 자체가 모델이 아니라 여러 모델을 내려받아 로컬에서 실행하고 대화할 수 있게 해주는 인터페이스에 가깝다. 공식 사이트의 모델 목록에서 크기와 용도, 다른 모델과의 비교를 확인할 수 있다. 영상에서는 메타가 만든 Llama 3.2를 고르는데, 이유는 단순하다. 2GB 정도로 가벼워서 개인 PC에 부담 없이 내려받아 바로 써볼 수 있기 때문이다.
실제 임베딩을 만드는 건 별도의 모델인 nomic-embed-text가 맡는다. Nomic AI가 만든 이 모델은 274MB로 더 작고, 텍스트를 768차원 밀집 벡터로 바꾸며 한 번에 8192토큰까지 처리한다. 설치는 `ollama pull llama3.2`와 `ollama pull nomic-embed-text` 두 줄이면 끝나고, `ollama list`로 두 모델이 제대로 깔렸는지 확인한다. 터미널에서 임베딩 모델을 실행해 "hi" 한 마디만 넣어봐도 화면 가득 숫자가 쏟아지는데, 그 한 단어를 표현하는 데 그만큼의 차원이 쓰인다는 뜻이다.
코드는 설정과 로직을 분리한다. 설정 파일에는 사용할 LLM과 임베딩 모델 이름을 각각 적어두고, 별도 모듈에 `generate_embedding` 함수를 만든다. 이 함수는 청크 목록과 모델명을 받아, 청크마다 로컬 Ollama 주소로 모델명과 프롬프트를 담은 JSON 요청을 보낸다. 응답에 embedding 키가 없으면 생성 실패로 보고 예외를 던지고, 있으면 결과 배열에 쌓는다. 메인 파이프라인에서는 설정을 읽어 이 함수를 호출하고, 앞부분 몇 개만 출력해 결과를 확인한다. 13개 청크 전부에 대해 임베딩이 만들어지는 것을 확인하는 것으로 이번 편이 끝나고, 다음 편에서는 이 벡터들을 벡터 데이터베이스에 저장한다.
주요 인사이트
- 임베딩 모델과 생성 모델을 분리해 쓰는 구성이 핵심이다. 답변을 만드는 모델과 검색용 벡터를 만드는 모델은 역할이 다르고, 후자는 훨씬 작아도 충분하다.
- 274MB짜리 임베딩 모델이면 개인 노트북에서도 돌아간다. 문서를 외부 API로 보내지 않고 로컬에서 벡터화할 수 있다는 뜻이라, 사내 문서처럼 밖으로 내보내기 곤란한 자료를 다룰 때 선택지가 된다.
- 768차원이라는 숫자는 하나의 문장을 768가지 관점에서 나눠 표현한다는 의미다. 차원이 많을수록 미묘한 의미 차이를 더 잘 구분하지만 저장 비용도 함께 늘어난다.
- 모델 이름을 코드에 박아 넣지 않고 설정 파일로 빼두면, 나중에 더 나은 임베딩 모델이 나왔을 때 설정 한 줄만 바꿔 교체할 수 있다.
- 응답에 embedding 키가 있는지 매번 확인하고 없으면 즉시 예외를 던지는 처리는 사소해 보이지만 중요하다. 임베딩이 조용히 비어 있는 채로 다음 단계로 넘어가면 검색 품질이 무너진 뒤에야 문제를 알게 된다.
자주 묻는 질문
Ollama와 nomic-embed-text는 각각 어떤 역할을 하나요?
Ollama는 여러 종류의 LLM을 내려받아 로컬에서 실행하고 상호작용할 수 있게 해주는 오픈소스 인터페이스입니다. nomic-embed-text는 그 위에서 돌아가는 임베딩 전용 모델로, 실제로 텍스트를 숫자 벡터로 변환하는 일을 담당합니다.
영상에서 사용한 두 모델의 크기와 사양은 어떻게 되나요?
생성 모델로 쓴 Llama 3.2는 약 2GB로, 가볍게 로컬에 내려받을 수 있다는 이유로 선택됐습니다. 임베딩 모델인 nomic-embed-text는 274MB이며, 텍스트를 768차원 벡터로 변환하고 최대 입력 길이는 8192토큰입니다.
임베딩 생성 함수는 어떤 구조로 작성됐나요?
청크 목록과 모델명을 인자로 받아, 빈 리스트를 만들고 청크마다 반복문을 돕니다. 각 청크를 프롬프트로 담아 로컬 Ollama 주소에 POST 요청을 보내고, 응답 JSON에 embedding 키가 없으면 예외를 발생시키며, 있으면 값을 리스트에 추가한 뒤 전체를 반환합니다.
이 다음 단계는 무엇인가요?
발표자는 이번 편에서 만든 임베딩을 벡터 데이터베이스에 저장하는 방법을 다음 세션에서 다루겠다고 예고했습니다.
원문과 출처
이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.
YouTube 원본 영상 보기 ↗