경단 프로젝트에서 기사 재생성 도메인을 맡아 개발하고 있는데, LLM의 문제점 몇 가지를 해결하고자 솔루션이 필요했다. 이번에 출전하는 대회에서도 아래 네가지에 대한 솔루션을 원했던 것 같다.
- 사실 관계 오류와 맥락 이해의 한계를 개선하기 위해 도입
- 최신 정보와 정확한 사실 관계 필요
- 생성물의 품질과 공정성 보장 및 인간-AI 협업 방식 정립 등 해결 과제 대응
- 생성 AI 기술의 혜택을 안전하고 효과적으로 제공하기 위한 방법 모색
이 배경에서 RAG라는 기술을 활용할 경우 외부 지식 베이스를 연결하여 사실 관계 파악에도 도움이 될 것이라 판단했고, 생성 능력 향상에 도움이 더욱이 될것이라 판단하여 RAG와 LangChain을 도입하게 되었다.
RAG 도입
RAG는, LLG의 단점 중에 ‘사실 관계 오류 가능성’과 ‘맥락 이해의 한계’를 개선하는 데 초점을 맞춘 방법이다.
RAG는 LLM에 외부 지식 베이스를 연결하여 모델의 생성 능력과 사실 관계 파악 능력을 향상시키는 기술이다. 즉 우리 기사 생성 도메인에서 필요한 것은 최근 기술과, 사실 관계성에 대한 보완이 필요하기에 RAG를 도입하게 되었다.
구체적으로 RAG는 다음과 같은 방식으로 LLM의 한계를 보완한다.
- 외부 지식 활용
- 대규모의 구조화된 지식 베이스(예: 위키피디아)를 모델에 연결
- 주어진 질의에 대한 관련 정보를 지식 베이스에서 검색 및 추출
- 증거 기반 생성
- 검색된 지식 정보를 증거로 활용하여 보다 사실에 기반한 답변 생성
- 생성된 답변의 출처를 명시함으로써 신뢰성 향상
- 맥락 이해력 향상
- 외부 지식을 통해 질의에 대한 배경 지식과 맥락 정보를 파악
- 단순한 패턴 매칭이 아닌 추론 능력을 바탕으로 한 답변 생성
RAG의 주요 구성 요소
질의 인코더(Query Encoder)
: 사용자의 질문을 이해하기 위한 언어 모델입니다. 주어진 질문을 벡터 형태로 인코딩합니다.지식 검색기(Knowledge Retriever)
: 인코딩된 질문을 바탕으로 외부 지식 베이스에서 관련 정보를 검색합니다. 예를 들어 Wikipedia, 뉴스 기사, 전문 서적 등 방대한 문서 집합에서 질문과 연관된 문단이나 구절을 찾아냅니다.지식 증강 생성기(Knowledge-Augmented Generator)
: 검색된 지식을 활용하여 질문에 대한 답변을 생성하는 언어 모델입니다. 기존의 LLM과 유사하지만, 검색된 지식을 추가 입력으로 받아 보다 정확하고 풍부한 답변을 생성할 수 있습니다.
RAG의 동작 과정 요약
- 사용자의 질문이 주어지면 질의 인코더가 이를 이해하기 쉬운 형태로 변환합니다.
- 지식 검색기가 인코딩된 질문을 바탕으로 외부 지식 베이스에서 관련 정보를 검색합니다.
- 검색된 지식은 지식 증강 생성기의 입력으로 전달됩니다.
- 지식 증강 생성기는 검색된 지식을 활용하여 사용자 질문에 대한 답변을 생성합니다.
RAG는 LLM의 강력한 언어 이해 및 생성 능력과 외부 지식 활용을 결합함으로써, 보다 정확하고 풍부한 정보를 제공할 수 있습니다. 특히 최신 정보나 특정 도메인 지식이 필요한 질문에 효과적으로 대응할 수 있다는 장점이 있습니다.
레퍼런스
활용 모듈
LangChain
GoogleCustom Search Engine: googleapiclient
WikiPedia Retriver: 아직 구현 못함.
Retriver의 역할
사용자가 입력한 쿼리에 대해 관련 정보를 검색하고 반환하는 역할을 한다.
쿼리 전처리, 데이터 소스 검색, 결과 정리 및 반환을 하는 역할이다.
GoogleCSERetriever
,WikipediaRetriever
를 활용한다.
아래와 같이 쿼리에 대해서 관련된 정보를 검색하고 반환해준다.
예제는 Google Custom Search Engine이다.
대규모 벡터 데이터 베이스
→ 우리 프로젝트는 복잡도가 낮은 편이고, 처음 사용하기 때문에 일단 Chroma가 맞다고 판단했다.
Retriver로 단순히 데이터만 가져오면🤔 → LangChain, 벡터 데이터 베이스 도입하자!
검색 성능이 떨어지는 문제가 있었으며, 의미론적 검색을 개선할 필요가 있었다.
✔️ 검색 성능 개선 - LangChain
검색 추론 능력을 높이고자 LangChain 도구의 필요성을 느꼈다. 이를 활용할 경우에는 문맥을 더 잘 이해하고, 사용자 쿼리에 대해서 더 관련성 높은 결과를 제공할 수 있게 된다.
✔️의미론적 검색 및 실시간 업데이트 - ChromaDB
ChromaDB는 텍스트를 벡터로 변환하여 의미론적 유사성을 기반으로 검색을 수행한다. 이는 단순히 키워드를 매칭하는 것 뿐만 아니라 더 나은 검색 결과를 제공하게 된다.
따라서 우리는 LangChain과 벡터 데이터베이스를 도입하도록 결정했다.
LangChain,ChromaDB를 활용한 예시
만약 이 두가지를 활용한다면 아래와 같이 플로우가 수정된다.
Chroma DB를 활용한 흐름 설명
- 질문 입력: 사용자가 "국내 총 생산량이 뭐야?"라는 질문을 입력합니다.
- Google 검색: Google Custom Search API를 사용하여 질문과 관련된 결과를 검색합니다.
- 벡터화 및 저장: 검색 결과를 텍스트 임베딩으로 변환하고 ChromaDB에 저장합니다.
- 검색 수행: 저장된 문서들 중에서 주어진 쿼리와 유사한 문서를 ChromaDB를 사용하여 검색합니다.
LangChain까지 활용한 흐름 설명
그런데 위 흐름은 또다른 문제 있다. 정보 통합 과정에서 LLM을 적극적으로 활용할 필요가 있다.
- 주어진 흐름: Google 검색 -> 벡터화 및 저장 -> 유사도 기반 검색
- LangChain 방법: Google 검색 + LLM 분석 -> 벡터화 및 저장 -> LLM 기반 정보 통합 및 검색
LangChain을 활용한 방법은 LLM의 강력한 언어 이해 및 생성 능력을 적극적으로 활용하여, 더 정교하고 신뢰성 있는 결과를 제공한다.
주요 차이점(LangChain까지 활용한 흐름과 Chroma DB만 활용한 흐름 차이)
1. LLM의 역할:
- 이전 흐름에서는 LLM이 직접적인 검색에 사용되지 않으며, 검색 결과를 단순히 벡터화하여 저장하고 검색하는 데 초점을 맞춥니다.
- LangChain을 활용한 방법에서는 LLM이 검색 과정에서 적극적으로 사용됩니다. Google Custom Search API를 통해 검색한 결과를 LLM을 사용하여 분석하고, 필요한 정보를 추출하는 데 도움을 줍니다.
2. 검색 및 정보 통합:
- 이전 흐름에서는 검색 결과를 벡터화하여 ChromaDB에 저장한 후, 쿼리와 유사한 문서를 검색하는 단순한 접근 방식을 취합니다.
- LangChain을 활용한 방법에서는 LLM이 검색 결과를 통합하여 더 신뢰성 있고 일관된 정보를 제공합니다. LLM이 검색된 문서를 분석하고 요약하는 데 사용되므로, 더 나은 품질의 출력을 기대할 수 있습니다.
3. 정보의 처리 방식:
- 이전 흐름에서는 검색 결과의 벡터화와 저장에 초점을 맞추며, 이후 검색은 단순한 유사도 기반 검색입니다.
- LangChain을 활용한 방법에서는 검색 과정에서 LLM의 능력을 활용하여 정보의 품질을 높이고, 검색된 정보를 통합하여 최종 출력물의 품질을 개선합니다.
구현 완료 ㅋㅋ
https://github.com/Gyeongdan/gyeongdan-server-fastapi/pull/78
'ML' 카테고리의 다른 글
[만들면서 배우는 생성 AI]생성 모델링 (0) | 2024.06.05 |
---|---|
과적합(Overfitting)을 막는 방법들 (1) | 2024.06.05 |
역전파(BackPropagation) 이해하기 (1) | 2024.06.05 |
딥 러닝의 학습 방법 (1) | 2024.06.05 |
행렬곱으로 이해하는 신경망 (0) | 2024.06.05 |