본문 바로가기
LLM

[LLM] Deeplearning.AI Langchain 강의 내용 정리

by Tiabet 2024. 2. 10.

오늘은 Langchain에 대해 공부하고 싶어서 코세라에서 찾은 Langchain 강의를 들은 내용을 정리해보고자 한다.

 

강의 링크 :

 

https://www.coursera.org/projects/langchain-chat-with-your-data-project?skipBrowseRedirect=true

 

LangChain Chat with Your Data

2시간 이내에 이 안내 프로젝트를 완료하세요. LangChain: Chat With Your Data delves into two main topics: (1) Retrieval Augmented Generation (RAG), a common LLM application ...

www.coursera.org

 

Coursera와 Deeplearning.AI가 협업해서 만든 아주 짧은 강의다. 1시간 가량 코드와 함께 랭체인의 핵심 기능들에 대해 설명하여 입문하기 굉장히 좋은 강의인 것 같다.

Langchain 구성요소

 

 

핵심 구성요소로 꼽은 5가지는 프롬프트, LLM과 챗봇과 임베딩 등의 모델들, 여러 데이터들이 저장되어 있는 인덱스들, 적용하는 체인과 에이전트이다.

 

강의에선 인덱스를 중점적으로 설명해준다. 아무래도 Langchain을 제일 많이 활용할 때가 RAG이다 보니 이와 연관된 부분을 위주로 강의가 진행된 것 같다. 그리고 Langchain의 핵심을 '데이터와 사용자가 대화(Chat)할 수 있게 해준다' 라고 소개하는 것으로 보아, Langchain의 목표도 데이터에 LLM을 적용하여 더 잘 이해해보자는 것임을 알 수 있었다. 

 

RAG - 구현 과정과 랭체인에서의 적용

 

강의 Introduction에서도 RAG의 개념을 설명해주고 있다. RAG를 Vector Store Lodaing 파트와 Retrieval 파트로 나누고 있다.

 

강의 첫 내용이 Langchain의 Document Loading을 소개해준 부분이었는데 이 부분도 굉장히 신기했다. Langchain의 기능들을 이용하면 PDF나 워드 등의 문서부터 유튜브 영상, 노션까지도 로드해와서 문서화해버릴 수가 있었다. 유튜브 영상을 로드해오는 건 아마 자막이 적용된 영상을 긁어오는 게 아닌가 싶었는데 찾아보니 정말 소리를 텍스트로 바꿔서 문서화시켜준다고 한다. 시간 소요가 다소 있긴 해도 1시간 가량의 영상의 받아쓰기를 수 분이면 충분히 해준다는 게 정말 놀라웠다. 물론 자막이 있는 영상들은 자막을 긁어오는 게 훨씬 빠르므로 이쪽을 선택하는 듯.

 

그 다음엔 RAG로 활용하기 위해 Document Splitting을 하는 작업을 거친다. 이는 Retriever 을 활용할 때 필요없는 부분까지 다 뒤져보는 시간 소요를 줄이기 위해 Document를 쪼개는 작업으로 보인다. 또는 문서의 길이가 너무 길어서 정보가 많이 담겨 있는 경우 활용하기가 쉽지 않은 탓일수도 있다. 단순히 문서를 분류하는 것을 넘어 한 문서도 조각조각내는 것이다. 이때 이 조각 하나를 Chunk라고 부른다.

 

 

이렇게 많은 Text Splitter 들이 존재한다. 문서를 Split하는 과정은 굉장히 중요한 작업이기 때문에 이에 많은 공을 들여야 한다고 언급하고 있다. 굉장히 중요한 이유는 아무래도 검색을 할 때 중요한 정보가 양쪽으로 쪼개져 있다거나 Query로 들어온 필요한 정보를 토막내버릴 경우 Retriever이 잘 작동되지 않기 때문으로 보인다. Overlap도 하는 등 여러 기법들이 있었는데 정리하기엔 너무 길어서 이러한 과정이 있다고만 인지하고 넘어간다.

 

Document Splitting 다음엔 VectorStore에 Embedding하여 저장하는 과정이다.

 

임베딩은 자연어 처리와 LLM에서 가장 중요한 작업 중 하나이다. embedding을 거치면 내용과 의미를 숫자와 벡터로 표현할 수 있게 되며 비슷한 내용의 글자들은 자연스럽게 묶어줄 수 있다. 이렇게 Document들을 embedding한 다음 벡터 뭉치들을 저장할 장소를 만들게 되는데 이를 Vector Store라고 부른다.

 

벡터 스토어에 저장한 다음 LLM과 연계되는 내용을 설명한 내용이다. query가 들어오면 VectorStore의 모든 원소와 내용을 비교하게 된다. 가장 비슷한 벡터를 벡터스토어에서 골라서 LLM이 답변을 해줄 때 활용하는 모습이다.

 

임베딩 벡터로는 OpenAI의 임베딩을 사용하는 모습이다. 나는 써본 적은 없고 소문으로만 들었는데 성능이 그렇게 좋다는 말이 있다. 검증되진 않은 부분이지만. 아무튼 벡터데이터베이스에로 query를 보내면 임베딩을 통해 비슷한 답변들을 리턴해준다는 것을 알 수 있다.

 

다음으로 Retrieval에 대한 설명이다. 흥미로운 점은 우리가 항상 query와 가장 비슷한 답변을 원하는 것이 아닐 수도 있다는 점이다. 뭔소린가 싶었는데 질문이 다소 애매모호하거나, 많은 정보를 원하는 질문을 할 때는 가장 비슷한 문서를 찾는 것이 의미가 퇴색될 수도 있다는 점이다. 또한 사용자는 본인이 질문한 것 외에 더 다양한 정보를 원할 수도 있다. 예를 든 것이 아래 그림이다.

요리사는 몸체가 큰 하얀 버섯들에 대해 질문했다. 가장 유사도가 큰 문서를 기반으로 답변을 생성한다면 '몸체가 크고', '하얀' 버섯에 대해서만 알려주게 된다. 하지만 MMR 이라는 기법을 사용하면 강한 독이 들어있는 버섯에 대한 정보를 알려주게 되는데, 요리사에 입장에서라면 이 정보가 질문에 대한 정확한 답변은 아니더라도 몰랐던 정보를 얻어갈 수도 있는 유용한 답변일 수 있게 된다. 

 

이렇듯 검색을 진행했을 때 어떤 답변을 할 것인가? 어떤 문서를 찾아줄 것인가? 가 Retrieval의 핵심 고민거리라고 할 수 있다고 한다.

 

위에서 예시로 들었던 Maximum Marginal Relevence, MMR 이라고 불리는 Retrieval 기법이다. 가장 비슷한 몇 개의 문서들을 k 개 골라놓고 (fetch_k), 가장 다양한 답변을 반환해주는 기법이다. 

 

다른 기법으로는 LLM Aided Retrieval, 즉 LLM의 도움을 받아서 검색을 실행하는 기법도 있고 Compression, 그리고 Metadata를 답변에 포함시키는 기법들을 소개해줬는데 역시나 너무 길어져서 생략해야 할 것 같다. 모두 하나같이 아주 흥미로운 내용들이었고, 이런 Retrieval 기법들을 섞어서 더 좋은 답변을 생성하는 것이 하나의 테크닉이라고 보인다.

 

 

여기까지가 주요 개념적인 내용들의 정리였다. 뒷부분은 Question Answering과 Chat 파트인데 랭체인의 사용법을 알려주는 내용이 주요한 것 같아서 이론 정리하고는 다소 동떨어져 보인다. 하지만 굉장히 재밌는 부분이었다.