전체 글 44

[RAG] 벡터 검색 엔진의 HNSW 알고리즘 파헤치기

RAG 기반의 검색 시스템을 만드는 프로젝트를 진행하면서 어떤 벡터 DB를 사용할까, 그 검색 방식은 어떤 것일까를 고민하게 되면서 공부했던 부분들을 정리해보고자 한다. 기본적으로 내가 선택한 DB는 Qdrant였고, 이는 기본적으로 HNSW 방식을 기반으로 벡터 검색을 수행한다. (현재 대부분의 벡터 DB인 Milvus, Pinecone 등은 거의 대부분 HNSW 알고리즘을 핵심 인덱싱 엔진으로 채택하고 있음) 그렇다면 HNSW라는 게 도대체 뭘까? HNSW(Hierarchical Navigable Small World) 알고리즘은 고차원 벡터 데이터에서 근사 최근접 이웃(ANNs, Approximate Nearest Neighbor Search)을 빠르고 정확하게 찾아내기 위해 설계된 대표적인 그래프..

LLM & LMM 2026.04.18

[python] WSL 환경에서 pip 설치 오류 해결 - uv를 이용한 라이브러리 설치

python 패키지 설치 및 관리, 빌드, 배포까지 가능하며 엄청난 속도를 자랑하는 uv에 대해서 작성해보려고 한다. 주로 프로젝트를 진행하면서 라이브러리를 받을 때는 pip만 활용했었는데, 시스템 파이썬의 표준 라이브러리 손상과 pip의 충돌 등의 문제로 인해서 uv라는 것을 처음 접하게 되면서 그 차이점과 활용법에 대해서 정리하고자 한다. 우선 나의 경우 프로젝트를 진행하면서 torch와 transformer, numpy, qdrant 등 다양한 라이브러리가 계속 특정 작업에서 충돌을 일으키고 있어 가상 환경 자체를 다시 설치하고자 했다. 그런데, UnboundLocalError, TypeError: 'ZipInfo' object is not callable과 같은 에러가 발생하게 되었다. 찾아보니..

Python & Code Issue 2026.03.27

[RAG] Window 환경에서 Qdrant 사용하기 : 설치부터 RAG 시스템 구축 가이드라인

오늘은 RAG 시스템을 구축하면서 필요한 벡터 DB 중 하나인 Qdrant를 설치하고 사용하는 방법을 정리해보고자 한다.먼저 docker 환경은 linux에 적합하기 때문에, wsl을 설치해주고 난 뒤에 실행하는 편이 훨씬 좋다. window에 linux (ubuntu)를 설치에 대한 부분은 지난 포스팅에서 확인할 수 있다. 자, 그럼 본격적으로 Qdrant를 설치를 진행해보자. 1. Docker Desktop 설치https://docs.docker.com/desktop/setup/install/windows-install에 접속하여 docker desktop for window를 다운로드한다.설치파일을 실행하고 기본 설정으로 설치를 진행한다.설치 한 이후에는 계정이 없다면 만들어주고 활용하면 된다. (..

Python & Code Issue 2026.02.03

[Python] Window 환경에서 리눅스 사용하기 : WSL 및 Ubuntu 세팅 방법

오늘은 window 환경에서 Ububtu를 사용하기 위해서 WSL을 설치하고 세팅하는 방법에 대해서 정리해보고자 한다. 먼저 wsl이란 window 운영체제에서 Linux (Ubuntu) 환경을 실행할 수 있게 해주는 subsystem이다. 즉, 일종의 가상 머신이다.그런데 먼저 이걸 사용하기 위해서는 window 10 이상이어야 하고 window 11 이상이면 자동으로 다운이 가능하다.우선 본인의 pc가 wsl이 설치되는 환경인지를 확인하기 위해서 '작업 관리자 > 성능'으로 들어가서 오른쪽 하단에서 '가상화'가 있으면 wsl을 설치할 수 있는 환경이라는 의미이다. 그렇게 환경을 확인을 했으면 우선 본격적으로 설치를 시작해 보자. 1. Window 기능 켜기 끄기가장 첫번째로 해야 할 것은 windo..

Python & Code Issue 2026.02.03

[Python] PyTorch의 개념과 주요 기능별 함수 정리

오늘은 PyTorch 라이브러리의 주요 기능을 한번 정리해보려고 한다. PyTorch는 메타에서 만든 python 기반의 오픈소스 딥러닝 프레임워크다. 막상 모델 파인튜닝을 위해서 자주 사용하긴 하지만, 기능 하나하나에 대해서는 안 하다 보면 잊어버리기도 하고 자연스럽게 개념을 잘 이해 못 하고 사용하는 경우도 있는 것 같아서 리마인드 겸 정리를 해보려고 한다. 1. 텐서 조작 (Tensor Manipulation)Pytorch를 가장 기본 단위인 텐서를 다루는 함수들로 데이터의 모양을 바꾸는 것은 모델 학습에서 가장 빈번하게 일어난다.텐서라고 하는 것은 스칼라, 벡터, 행렬 등을 일반화한 개념으로 머신러닝에서는 이미지, 텍스트와 같은 데이터가 텐서로 변환이 되어서 학습이 된다. 보통 torch.uti..

Python & Code Issue 2026.01.13

[PyTorch] Multilingual CLIP: 다국어 텍스트-이미지 대조 학습(Contrastive Learning) 가이드

기본적으로 CLIP의 경우 텍스트와 이미지를 같은 공간 상에 임베딩하여 서로 간의 유사도를 측정할 수 있는 모델이다.하지만 기본적으로 CLIP의 텍스트 모델은 영어를 기반으로 학습이 되었기 때문에, 다국어를 다 잘하진 못한다. 그렇지만 나의 경우에는 궁극적으로 여러 가지 언어로 검색을 하더라도 최대한 같은 이미지를 찾아낼 수 있는 기능이 필요했다.(사실 이미 CLIP은 zero-shot 성능에 대해서도 유연하게 대처할 수 있는 범용적인 모델이긴 하지만 내가 가진 도메인에서 다국어 데이터 셋에 대해서도 잘 이해해야 하기 때문에 한 번 더 contrastive learning을 진행해 줬다.)그리고 그러한 기능을 할 수 있는 CLIP 모델을 만들어보는 과정을 공유하고자 한다.(그렇기 때문에 완벽하지 않을 수..

[LLM] Qwen-VL model을 이용한 이미지 캡셔닝 (Image Captioning)

오늘은 오픈 소스 모델 중에서도 비전-언어 이해와 생성 작업에 탁월한 Qwen2.5-VL 모델을 활용해서 이미지 캡셔닝 작업을 진행해 보았다. 앞서 설명했던 다국어 임베딩 능력을 위해서 지식 증류 학습을 진행했던 CLIP 모델에 또 다른(나의 데이터 셋에 적합한) 이미지-텍스트 데이터쌍을 추가로 학습시켜 contrastive learning을 진행하려고 했다. 그런데 그 이전에 필요한 데이터 셋이 필요한데, 이를 만들어주기 위해서 다양한 방법을 시도했고, 그중 하나인 Qwen2.5-VL을 활용해서 이미지를 텍스트로 캡셔닝하는 방법을 짧게 공유해보고자 한다.1. 필요한 라이브러리 및 모델 로딩import os, jsonimport pandas as pdfrom tqdm import tqdmimport bo..

LLM & LMM 2025.11.26

[Pytorch] 다국어가 가능한 CLIP 모델 만들기 : distillation learning

CLIP 모델은 openAI에서 만든 텍스트와 이미지 두 가지를 함께 이해할 수 있는 일종의 멀티모달 모델이다. 하지만, 텍스트의 경우 영어를 기준으로 학습이 진행이 CLIP 모델은 openAI에서 만든 텍스트와 이미지 두 가지를 함께 이해할 수 있는 일종의 멀티모달 모델이다. 하지만, 텍스트의 경우 영어를 기준으로 학습이 진행이 진행되어 있다 보니 다국어를 잘하지는 못한다. 그렇기 때문에 오늘은 다국어가 가능하도록 만들어보고자 한다. 거듭 언급하고 있지만 나의 경우하고 있던 프로젝트로 SNS 게시물 데이터를 활용해서 특정 인플루언서를 추천(검색)하는 RAG 시스템 개발을 진행 중에 있었는데, 다국어로 프롬프트를 입력한다 하더라도, 특정 이미지에 대한 설명을 하더라도 그에 해당하는 사람을 찾아주는 시스..

[Pytorch] Huggingface 활용을 위한 transformer 라이브러리 정리

transformer 라이브러리란 허깅페이스에 있는 최신 SOTA 트랜스포머 기반의 모델 등을 포함해 다양한 모델들을 통일된 인터페이스로 쉽게 접근하고 사용할 수 있도록 지원하는 라이브러리다. 사실 다양한 태스크에 맞게 모델을 fine-tuning 한다면 pytorch와 더불어서 huggingface의 transformer 라이브러리를 거의 필수적으로 활용하게 되기 때문에, 해당 라이브러리에서 자주 사용되는 핵심 클래스에 대해서 간단하게 정리를 해보고자 한다. 1. Auto Class우선, 가장 먼저 사용할 모델이 정해지면 이를 불러와야 한다. 그리고 Auto 클래스는 그 모델을 불러오는 함수이다. 구체적인 클래스를 따로 로딩을 할 수도 있지만, Auto 클래스는 특정 모델 이름에 얽매이지 않고 저장..

[LLM] LangChain과 Chainlit을 활용한 챗봇 구축 예제 Code

langchain을 통해서 구축한 RAG 기반의 추천 시스템을 Chainlit을 활용해서 챗봇 UI까지 연결해 보는 과정까지를 작성해보고자 한다. 데이터 전처리, vector DB에 chunk 단위로 저장하고, query input과 유사도를 측정해서 ouput을 뽑아낼 수 있는 RAG를 적용한 시스템을 구축하는 프로젝트를 진행했다. (agent까진 가지 못했고, 조금은 휴리스틱 하지만ㅜㅜ) 회사 프로젝트로 함께 진행한거라서 자세한 코드나 내용에 대해서는 언급하지 못하기도 하고, 초기 기획에는 멀티턴이 가능한 챗봇으로 개발을 진행하려고 했지만, 프로젝트의 목적을 생각했을 때 좋지 못한 UI가 나올 수도 있어서 해당 부분은 추후에 고도화하는 방향으로 변경을 했다.. 따라서, 멀티턴 챗봇까지는 아니지만 내..

LLM & LMM 2025.11.06