RAG(6)
-
[PostgreSQL] Vector Search를 위한 인덱스 타입 비교 (HNSW vs IVFFlat)
서론안녕하세요! 요즘 AI 시대를 맞이하여 벡터 검색(Vector Search)이 정말 핫한데요. PostgreSQL에서도 pgvector 확장을 통해 벡터 검색을 지원하고 있습니다. 오늘은 벡터 검색에 사용되는 두 가지 주요 인덱스 타입인 HNSW와 IVFFlat에 대해 알아보겠습니다.무엇이 다를까?우선 두 인덱스의 주요 특징을 간단히 비교해볼까요?HNSW (Hierarchical Navigable Small World)그래프 기반 인덱스빠른 검색 속도더 많은 메모리 사용인덱스 생성이 더 오래 걸림IVFFlat (Inverted File Flat)클러스터 기반 인덱스적은 메모리 사용빠른 인덱스 생성HNSW보다는 조금 느린 검색 속도실제 사용 예제간단한 예제로 두 인덱스의 사용법을 살펴보겠습니다.-- p..
2024.11.14 -
[후기] 우아콘 이그나이트 세션 발표 참여
어떻게 신청하게 됐을까?최근에 LLM을 활용한 전기차 정보 제공 서비스를 만들고 있는데, 동료 PM으로부터 메시지를 받았습니다. 우아콘을 10월 30일 날 진행하니 신청해 보라는 것이었고, 내부 내용을 살펴보니 이번에는 참여형 세션이라고 해서 외부 인물도 발표를 할 수 있는 세션이 있다는 것을 알게 됐습니다. 그래서 고민 한.. 0.1 그람쯤 하고, 설마 되겠어라는 생각으로 작성한 참가 신청을 했습니다. 참여 확정 안내와.. 정말 돼버렸네, 저는 이 메일을 처음 받았을 때 약간 인지부조화가 와서, 멍~ 했었는데요.. 내가 어찌 됐든 콘퍼런스 참가자로 발표도 하고 뭔가.. 이상한 기분이 들었습니다. 자료 준비 과정어떤 발표를 할까 정말 고민이 많이 됐습니다. 발표 시간은 각자 5분 정도로 매우 짧았기 때문..
2024.10.31 -
[LLM] Semantic Search를 위한 Langchain Custom Retriever 구현하기
안녕하세요 오늘은 Langchain에서 Custom Retriever를 구현하는 방법을 소개해볼까 합니다. 가끔 이런 경우가 생깁니다.1. 아 뭔가 Retriever에서 데이터가 출력되기 전에 ReRank를 사용하고 나온다면 어떨가?2. 어? 뭐야 이건 Retriever가 없네? Langchain_community 라이브러리를 뒤져봐도 내가 원하는 Retriever가 없는경우 (제가 못찾았을 수 있습니다.. 머쓱..)3. 데이터가 Retriever에서 필터를 가지거나, Similarity Search가 되기전 뭔가 처리를 했으면 좋겠다거나.. 이런 이유로 기존에 Langchain에서 제공되던 Retriever를 수정하여 사용 할 수 있습니다. 1. Base Retriever에서 중요한 매서드들[API ..
2024.09.05 -
[LLM] OpenSearch - VectorStore로 써보기
안녕하세요 오늘은 Vector Store로 많이 쓰이는 OpenSearch를 가져와 봤습니다. Elastic Search를 Fork해서 사용하는만큼 Elastic Search와 유사한점도 그리고 다른점도 있습니다. 하지만 오늘은 이 차이점을 설명하는 자리는 아니라 이만 줄이고, 이제 Vector Store로서 장/단점을 그리고 간단할 설치와 Langchain에서 사용까지 알아볼까 합니다. 1. OpenSearch의 장점과 단점- 첫번째 장점 그건 바로 최근 아주 관심을 많이 받고 있는 RAG중에서도 Full Text Search (Lexical Search)를 Simillerity Search(Semantic Search)와 같이 쓸 수 있단 점 입니다. 성능이 좋은 다른 DB도 많지만. 기본적으로 이 ..
2024.09.04 -
[LLM] Data Splitters (with Langchain)
우리는 RAG를 구성하기 위해서 다향한 데이터를 Embedding하여 VectorDB에 저장해야 한다고 바로 이전글에서 알아보았는데요 그럼 어떻게 Embedding할 데이터를 만들까요? 일반적으로 html, Text, PDF, MS Document(Excel, ppt, docs)등 다양한 문서의 형태가 있는데 이것들을 Read -> Chunk로 분할 하여 Embedding에 사용되기 직전 까지의 과정을 한번 살펴볼겁니다. 너무 많은 Text Splitter가 있는데 그중에서 Character Splitter를 살펴보려고 합니다. 더 많은 Splitter에 대해서는 아래 링크를 참고하시기 바랍니다!https://python.langchain.com/v0.1/docs/modules/data_connectio..
2024.06.22 -
[LLM] RAG란 무엇인가?
안녕하세요 오랜만에 또 글을 써봅니다.최근 데이터엔지니어 이지만... 회사에서의 요구사항으로 LLM으로 서비스를 개발하고 있는데요, 특정 도매인의 최신 정보를 가지고 있는 Chatbot을 만들어야 하다보니 자연스럽게 RAG에 대해서 알게되었고 이 RAG에 대해서 제가 이해한 부분까지 정리해 보려 합니다. 각종 단어 Embedding이나, 프롬프트나 LLM과 같은 단어들에 대한 세부적 설명은 제외합니다.- RAG(Retrieval Argumented Generation)RAG(Retrieval Agumented Generation)는 검색-증강-생성 이라고 합니다. 무슨 의미를 가지고 있느냐.. 우리는 LLM모델을 먼저 이해할 필요가 있습니다. LLM모델은 Transformer라는 DL모델로 인간의 언어..
2024.06.20