반응형

개발일반 29

도대체 유사도 검색은 뭘까? with LangChain .as_retriever() 분석

벡터 유사도 검색 aka. Vector Similarity Search 서로 다른 두 벡터의 유사도가 얼마나 높은지 확인하고 가장 높은 유사도를 갖은 벡터부터 나열하여 검색을 진행한다.  기본적으로 벡터간의 비교를 하는것이기 때문에 우리가 예측하지 못하는 결과가 나올수 있고 특히 자연어나 객체를 Embedding을 하는 과정에 따라 차이가 발생할수 있다.  그리고 이와 같은 Vector간의 유사도를 직접적으로 볼 수 있는 웹사이트로 Embedding Projector라고 있다. Embedding Projector Embedding projector - visualization of high-dimensional dataVisualize high dimensional data.projector.tensor..

도대체 Embedding Model과 Token은 뭘까?

Embedding과 Token의 경우 AI에서 정말 많이 쓰이는 단어중 하나이다. 그래서 이번에 먼저 AI에서의 Embedding과 Token의 의미를 보고 LLM관련 개발에 있어서는 어떻게 쓰이는 표현인지 알아보자. 먼저 Embedding의 경우 AI와 기계학습에 있어 주어진 데이터에 대한 이해를 높이기 위해 사용된다. 예를 들어 '사과' 혹은 사과의 사진은 사람이 단어로써 이해하고 있고 시각적으로 이미 알고 있기에 쉽게 이해할 수 있다. 하지만 반대로 컴퓨터는 우리와는 다르게 눈도 없고 데이터로서 '사과'라고 한국어로 저장 돼 있지 않다. 그런 컴퓨터에게 '사과'라는 데이터를 이해시키기 위해 '사과'가 가진 시각적 혹은 언어적 내용을 Vector로 표현하고 이 과정을 Embedding이라고 한다.  ..

도대체 FAISS 그리고 Vector Store는 뭘까?

FAISS는 Facebook에서 만든 Facebook AI Similarity Search로 검색에 있어 단순히 Vector 기반 검색이 가능하게 데이터를 전환해 주는 라이브러리라고 생각하면 된다. 그리고 Vector Store의 경우 LangChain의 설명에 따르면 정규화되지 않는 데이터를 저장하고 저장된 데이터 안에서 검색을 돕도록 만들어진 Inteface다 그래서 간단한 Interface의 사용법은 아래와 같다.  vectorstore = MyVectorStore()retriever = vectorstore.as_retriever() 물론 사용하는 Vector Store에 따라 사용방식과 데이터 저장 방식이 다르다. 사용 방식보다 Vector Store에 대하 설명만 진행하겠다. 자세한 사용방식은..

도대체 LangChain은 뭘까?

LangChain은 뭘까?  가장 간단하게 설명하는 방법은 LLM을 활용해 Application을 만들기 위해 사용되는 Framework라고 생각하면 된다.  우리가 Web Application을 만들기 위해서 Spring이나 Django를 쓰는거와 같은 역할을 한다.  그런데 좀 더 구체적으로 설명하자면 아래의 그림을 참고 하면된다.  아래의 그림과 같이 LLM Application을 만들기 위한 다양한 부분들을 쉽게 연결하 도록 돕는 Framework다. 특히, 외부 Packcages를 자유롭게 연결 할 수 있다. 그래서 아래와 같이 나누어진다. langchain-core: LLM, Vector Store가 Interface방식으로 구성 돼 있다. 그래서 서로다른 Vector Store인 경우에도 L..

도대체 RAG는 뭘까?

Retrieval-Augmented Generation의 약자인 RAG는 모델이기보다는 하나의 생성형 AI를 구성하는 방식이라고 생각된다. 크게는 2개의 단계로 이루어져 있으며 해당 단계를 통해 사용자에게 개발자가 의도한대로 답변이 가도록 한다.물론 2개의 단계 안에서 작은 단위의 단계가 존재한다.  그래서 RAG의 흐름을 Retreival과 Generation 두 단계로 나누었을 때 아래와 같다. RetrievalEmbedding사용자가 입력한 Query를 Vector로 전환한다.SearchingVector로 전환된 내용을 바탕을 DB에서 Generation에 사용될 내용을 찾는다.GenerationQuery + Searched ResultsDB에서 반환된 내용을 Query와 함께 참고하여 생성을 한다..

도대체 CI/CD는 뭘까?

백엔드개발뿐만 아니라 많은 개발에 있어 CI/CD라는 표현을 자주 들어 봤을 것이다. 그런데 CI/CD는 정확히 어떤 걸까? 기본적으로 CI/CD Software Engineering에서 주로 사용되는 표현이다. 개발과정과 운영방식에 대한 방법론적인 표현으로 CI/CD자체는 어떤 개발툴이나 개발언어를 지칭하는 것이 아니다. 즉, 안 지킨다 해서 개발을 못하고 그런 건 아니다. 하지만, 우리가 개발한 Application의 유지 관리와 개발 그리고 개선하는 입장에서 필요한 상식이다. CI/CD는 Continuous Integration/ Continuous Deployment의 약자로 지속적인 통합 지속적인 배포를 뜻한다. 즉, Application을 만들고 해당하는 기능들을 지속적으로 통합하고 통합한 내..

도대체 Docker는 뭘까요?

Docker는 귀여운 고래 로고가 있는 platform이다. 이 플랫폼에서는 우리가 만든 Application을 실행할 수 있는데 이 부분이 크게 와닿지 않을 수 있다. 하지만 이렇게 생각해 보면 된다. 우리가 개발한 프로젝트의 개발 환경은 배포될 환경과 차이가 있을 수밖에 없다. 예를 들어 지금 내가 사용하고 있는 개발환경은 MacOS이지만 배포된 환경은 Linux Ubuntu이다. 물론 Ubuntu환경에 자신이 만든 프로젝트가 실행될 수 있게 환경을 일치시킬 수 있다. 하지만 환경을 구성하는 요소가 하나라도 바뀌거나 배포 환경의 변화가 있을 시 우리는 다시 환경설정을 해줘야 하는 불편함이 있고 이는 안정적인 서버운영을 저해하는 요소이기도 하다. 물론 이와 관련해서 VM이라는 좋은 방법이 있지만 VM과..

도대체 Nginx는 뭘까요?

HTTPS를 적용하기 위해서 그리고 웬만한 Backend 개발에 있어 Nginx는 한 번쯤은 무조건 들어봤을 것이다. 추가적으로 WAS, Web Server와 HTTPS관련해서 무조건 들어봤을 것이다. 그러면 도대체 WAS, Web Server 그리고 Nginx는 무엇일까? Web Server와 WAS Web Server와 WAS(Web Application Server)의 경우 공통적으로 클라이언트(브라우져)에서의 HTTP 요청을 받고 그 요청을 처리해 준다. 그러면 대표적인 차이가 어떤게 있을까? 여기서 딱 중요한건 한 가지다 바로 '정적'이냐 '동적'이냐의 차이다. Web Server의 경우 정적으로 처리될 수 있는 요청들을 담당한다. 예를 들어 웹사이트의 html, 이미지, css 등의 정적이 요..

도대체 M1, M2 칩 Macbook에 Tensorflow를 어떻게 설치할까요?

제가 사실 요즘 AI 공부에 빠져 있어서 다른 글들이 안올라오고 있는데요. 제가 AI 공부를 하면서 사용하는 패키지가 Tensorflow입니다. 그런데 문제는 작동이 안되는 겁니다. 프로젝트를 다시 만들고 Tensorflow를 재설치를 했는데도 불구하고 작동이 안되더라고요. 그래서 인터넷에 찾아보니 다 영어로된 자료이고 심지어 영어로된 자료들도 돈주고 봐야하는 말도 안되는 상황에 제가 직접 만들었습니다. (참고로 저는 영어를 잘합니다.) 일단 기본적으로 두가지가 필요합니다. m1 혹은 m2칩을 사용하는 맥북 homebrew Homebrew는 여기서 다운 받으시면 됩니다. /bin/bash로 시작되는 명령어를 복사해서 Terminal에 입력하심 됩니다. 그 다음으로 Terminal을 열어서 아래의 명령어를..

도대체 Git은 어떻게 사용하는 걸까요?: 분업

여러분 혹시 왜 Git이 만들어졌는지 아시나요? 찌라시로 들리는 말로는 리누스 베네딕트 토르발스(Linus Benedict Torvalds)라는 사람이 비행기를 타면서 코딩을 하고 싶어서 만들었다고 하는데 누군가는 그건 Github이다 뭐다 합니다. 하지만 Git은 리눅스(Linux) 커널(Kernel)을 개발하기 위해 만들어졌습니다. 그 당시에도 분업과 개발 과정에 대한 기록을 남기기 위해서 Snapshot을 기반으로 만들어졌다고 합니다. 그래서 한국말로 분산 버전 관리 시스템이라고 합니다. 참고로 리누스라는 이름과 Linux라는 이름이 비슷하죠? 맞습니다. 저분이 개발자입니다. 물론 본인 이름을 넣지 않으려고 했답니다. 아마 MBTI가 ISFP일거 같네요. 자 그럼 본론으로 들어가겠습니다. 위에 언급..

반응형