2023-2024초 기준
1. 유저는 input을 매우 짧게 입력한다.
- 최근 Retrieval는 대부분 semantic search 기반으로 이루어져있기 때문에 질문(input query) 또한 적절한 컨텍스트를 담고 있어야, 효과적임
- semantic search: 전통적인 keyword search는 사용자가 입력한 키워드를 그대로 검색하는 반면에 semantic search는 검색어의 의미를 분석하고 이해하여, 검색어와 직접적으로 연결되지 않은 정보도 찾아낼 수 있음.
- ex: 유저가 ‘피자 가게’를 검색했을 때,
- keyword search: 키워드 기반이므로 ****‘피자'와 '가게'라는 단어가 포함된 결과를 가져옴
- semantic search: 의미 기반이므로 {피자라는 음식을 판매하는 가게}라는 뜻을 지닌 '피자집', '피자 판매점' 등과 같은 결과도 가져옴
- 그런데 대부분의 유저들은 ‘단순 키워드’를 input으로 입력함. 기존의 검색 서비스(Google, Naver 등)에 익숙하기 때문임.
- 실제로 ‘신한 AI’에서는 유저가 ‘조선’이라고만 입력했던 사례가 있었으며, 실제 인텐트는 ‘조선업 관련주’였음
- 그렇기에 semantic search만으로 모든 쿼리를 대응하기보다는 BM25와 같은 keyword search 알고리즘도 섞어주는 것이 좋음(ex: 앞단에 쿼리 분류기를 두어, 키워드 기반의 query는 bm25가, 문장/서술 기반의 query는 semantic search를 활용하는 방법 or 모든 쿼리에 대해 두 검색 모듈이 같이 검색하고 가중치를 조절하는 방법)
- bm25(Best Matching 25): 순위 결정 함수로, 문서와 검색 쿼리 간의 관련성을 측정하는 데 사용됨. BM25에서 문서의 최종 점수는 각 단어의 BM25 점수의 합으로 계산되며, 이렇게 계산된 점수를 기반으로 문서는 순위를 매기게 되며, 사용자의 검색 쿼리와 가장 관련성이 높은 문서가 먼저 반환함. 이 알고리즘은 TF-IDF(Term Frequency-Inverse Document Frequency)를 기반으로 하며, 특히 텍스트 문서의 검색에서 중요한 역할을 함.
- Term Frequency (TF): TF는 특정 단어가 문서 내에서 얼마나 자주 등장하는지를 측정하며, 이 값이 높을수록 문서와 해당 단어와의 관련성이 높아진다는 가정에 기반함. 그러나 단어의 빈도가 높아질수록 그 단어의 중요성이 무한대로 증가한다는 TF-IDF의 한계를 보완하기 위해, BM25는 TF 값을 일정 범위 내에서 제한하며, 이를 위해 TF 값에 상한선을 설정하는 식을 사용함.
- Inverse Document Frequency (IDF): IDF는 전체 문서 집합에서 특정 단어를 포함하는 문서가 얼마나 적은지를 측정함. 이 값이 높을수록 해당 단어는 일반적이지 않고 특별하다는 뜻이므로, 문서의 관련성을 판단하는 데 더 큰 가중치를 부여함.
- Document Length Normalization (DLN): DLN은 문서의 길이를 고려합니다. 일반적으로 긴 문서는 짧은 문서에 비해 더 많은 단어를 포함하므로, 단순히 TF 값을 사용하면 긴 문서가 짧은 문서보다 높은 점수를 받을 수 있습니다. 이를 보완하기 위해, DLN은 문서의 길이를 고려하여 TF 값을 정규화함.
- DPR(Dense Passage Retrieval): 텍스트 데이터를 벡터로 임베딩하고, 이 벡터 간의 유사성을 계산하여 문서를 검색함.
- 문서와 질문 임베딩: DPR은 트랜스포머 기반의 인코더를 사용하여 문서와 질문을 각각 벡터로 임베딩함. 이 과정에서는 문서와 질문의 문맥 정보와 의미 정보가 벡터에 포함됨.
- 벡터 간 유사도 계산: 임베딩된 문서와 질문 벡터 간의 유사도를 계산하여 가장 관련성이 높은 문서를 찾아냄. 이 유사도는 일반적으로 내적(dot product)을 사용하여 계산되며, 이 값이 높을수록 문서와 질문이 의미적으로 유사하다는 것을 나타냄.
- 문서 검색: 계산된 유사도를 기반으로 가장 관련성이 높은 문서를 검색함. 이 과정에서는 최근접 이웃 검색 알고리즘을 사용하여 효율적인 검색을 수행함.
2. 기업 문서는 DB에 넣기 어려움
- 개조식 문서: 개조식 문서는 각 문단 간 컨텍스트를 파악하기 어려움. 그렇기에 더욱 정교한 문서 청킹이 요구됨.
- 수백페이지로 구성된 문서: 수백페이지로 구성된 문서의 경우, 사실상 전체 문서의 컨텍스트를 파악하는게 불가능함. 또한 이러한 문서의 경우 사실상 개조식+표/이미지로 구성된 경우가 많다. 따라서 이러한 문서 또한 적절히 분할하는 것이 좋음.
- 표/이미지로 구성된 문서: 가장 어려운 문서임. 사실상 컨텍스트가 없다고 봐도 될 수준의 문서들이 많고, 표와 이미지 내의 정보를 정확하게 추출해내는 것이 쉽지 않기 때문임. 표 추출 로직과 이미지 내 정보를 추출하는 OCR 기술 or 멀티모달이 추가로 검토되어야 함.
3. RAG를 사용해도, Zero hallucination은 어려운 상황
- 야놀자
- rule-based filtering으로 해결해줄 수 밖에 없음. "이건 괜찮고 이건 절대 안돼" 이런식으로 최대한 할루시네이션 결과물들을 걸러줘야함.
- 어떤 프롬프트가 좋은지 evaluation 체크를 해줘야함.
- 인풋 필터링 (전처리)를 해주고, 아웃풋 필터링 (후처리)도 해주고 있음. 아웃풋이 원하는 결과물이라면 그 결과물들을 계속 학습시키면서 모델을 고도화시키기.
- Evaluation을 GPT-4를 사용해서 함. 사람보다 싸고 scalable함.
- 100% 정확한 정보들만 추출하기 위해 RAG 사용
- 쏘카
- 별도의 isolation: LLM에게 모르는 데이터가 들어오면 바로 인간 상담사에게 연결
- 파인튜닝한 여러 LLM들을 통해 시나리오 기반으로 응대하는 방식으로 zero hallucination 추구
- RAG와 vector search로 응대 로직을 짜서 최대한 정확한 정보들만 추출
- 두나무
- 답변에 대한 신뢰도를 향상시키기 위해 생성AI가 내뱉은 답변에 대한 근거 document 사용자에게 제시. (사용자가 LLM의 오류를 서비스로 그대로 받아들이는 것을 방지하기 위해)
- 원지랩스
- 후처리 Learning GPT 만듦. 방금 나눈 대화를 학습해야하는지 아닌지 판단하고 좋은 데이터만 계속 학습시켜서 모델을 똑똑하게 만들기.
https://discuss.pytorch.kr/t/2023-12-18-12-24-ml-top-ml-papers-of-the-week/3111?utm_source=geeknews
https://discuss.pytorch.kr/t/2023-12-18-12-24-ml-top-ml-papers-of-the-week/3111
https://discuss.pytorch.kr/t/rag-1-2/3135?utm_source=geeknews