- LLM 이전의 추천 시스템은 일반적으로 협업 필터링(collaborative filtering) 같은 수학적 접근법을 사용했다.
- 협업 필터링: 사용자의 사용 패턴을 다른 모든 사용자의 사용 패턴과 비교해 추천을 도출한다.
- LLM을 사용한다면 사용 패턴뿐만아니라 사용자의 인구통계학적 정보, 도서 외 관심사, 최근 경험 등의 정보를 정돈되지 않은 텍스트 데이터로 제공한다.
콘텐츠 출처#
- 정적 콘텐츠: 항상 동일한 정보
- 예시:
다음에 어떤 책을 읽으면 좋을까? 재미로 읽을 만한 책을 말하는 거야, 교과서 같은 것 말고.
- 동적 컨텐츠: 질문 대상에 대한 맥락, 즉 무엇에 대해 묻고 있는지에 대한 세부 정보를 제공한다.
- 예시:
다음에는 어떤 책을 읽으면 좋을까? 참고로 최근에 '모비딕'을 읽었어.
정적 콘텐츠#
명확한 질문#
- 일관성(consistency): 모든 입력이 유사한 방식으로 처리되고 모든 결정이 유사한 기준에 따라 내려진다.
- 일관성은 LLM 애플리케이션의 중요한 속성이다.
- 명확화(clarification)의 두 가지 형태
- LLM이 따라야 할 지시문을 작성할 때는 다음의 원칙을 고려하는 것이 좋다.
- 부정적 표현보다는 긍정적 표현을 사용하고, 하지 말아야 할 것보다는 할 것을 지시한다. ‘살인하지 말라’고 말하기보다는 ‘생명을 지키라’고 말하는 것이 좋다.
- 왜 그런 지시를 했는지 이유를 들어 설명하는 것이 좋다. ‘살인하지 말라’고 말하는 것보다 ‘살인은 다른 사람의 생존권을 침해하는 행위이므로 살인하지 말라’고 말하는 것이 좋다.
- 절대적인 표현은 피하는 것이 좋다. ‘살인하지 말라’보다 ‘정말 필요하다는 확신이 들 때만 살인을 허용하라’고 말하는 것이 좋다.
- 이 원칙은 LLM에게 지침을 줄 떄 ‘항상’, ‘절대’, ‘오직’과 같은 강한 절대적 표현 대신 예외나 상황에 따른 조정을 허용하는 유연한 언어를 사용하라는 의미다.
퓨샷 프롬프트#
- 퓨샷 프롬프트: 프롬프트에 예시를 추가하는 것
- 제로샷 프럼프트: 예제 없이 명시적 지시 사항만 제공되는 프롬프트
- 퓨샷 프롬프트 장점
- LLM은 패턴을 계속 이어 나가려는 경향이 강하기 떄문에, 예시에 포함된 패턴을 명시적으로 기술한 원칙보다 우선해서 따를 가능성이 크다.
- 퓨샷 프롬프트는 모델의 응답에 대한 기대치까지 형성하는 데 도움이 될 수 있다.
- 퓨샷 프롬프트 단점
- 콘텍스트 증가에 따라 확장성이 떨어진다.
- 예시의 길이가 길면, 모델의 콘텍스트 윈도만으로 해당 프롬프트를 처리하기 충분하지 않을 수 있다.
- 모델 콘텍스트 윈도가 충분히 크더라도, 트랜스포머 아키텍처 특성상 예시들이 원래 작업에 방해가 될 수 있다.
- 따라서, 퓨샷 프롬프트는 전체 질문을 명확히 하지 않아도 출력 형식만 빠르고 간단하게 보여주는 데 적합하다.
- 모델이 예제에 편향되게 만든다.
- 앵커링: 초기의 불안전한 정보를 갖고 있을 때, 초기 정보는 무엇이 일반적이고 정상적인가에 대한 선입견을 만들게 되고 이후 판단은 이 선입견에 기반한 기대에 과도하게 영향을 받는다.
- 잘못된 패턴을 유도할 수 있다.
- 예시에 의도하지 않은 패턴을 학습하려고 할 수 있다.
- 작성 해놓은 예시가 오름차순 또는 내림차순으로 정렬되어 있을 경우, 모델이 정렬을 학습해버릴 수 있다.
동적 컨텐츠#
- 콘텍스트를 수집할 때 고려사항
- 레이턴시: 긴급도가 낮으면 충분한 시간을 사용할 수 있고, 긴급도가 중간 정도이면 몇 초 정도 레이턴시는 허용될 수 있으며, 긴급도가 높은 경우 밀리초 단위까지도 중요하다.
- 사전 준비 가능성: 레이턴시가 민감한 애플리케이션이라면 언젠가 필요한 때를 대비해 콘텍스트를 추정하여 미리 준비하면 좋다.
- 비교 가능성: 수집한 콘텍스트 항목을 비교할 수 있어야 한다.
- 어떤 항목이 더 유용한가? 어떤 항목이 다른 항목을 의존하는가? 어떤 항목이 다른 항목을 무효화시키는가?
- 이유: 콘텍스트를 수집할 때 브레인스토밍 방식으로 사용할 수 있는 양보다 더 많이 확보하고, 나중에 골라내는 식을 사용하는게 좋기 때문이다.
동적 컨텍스트 검색#
- 콘텍스트를 찾는 방법 2가지
- 방법1: 마인드맵 그리기.
- 방법2: 어떤 콘텍스트를 수집할 수 있는지 묻고, 얼마나 관련성 있는지 검토한다.
- 관련성과 관련된 2가지 기준
- 거리: 애플리케이션에서 즉시 접근할 수 있는 정보인가? 사용자에게 직접 질문하거나 동의하에 외부 시스템에 접근해 얻을 수 있는가?
- 안정성: 자주 변하는 정보인가?
검색 증강 생성#
- RAG(Retrival-Augmented Generation): 당면한 문제와 관련한 정보를 먼저 검색한 후 모델이 학습 당시에 접근할 수 없었던 정보까지 얻을 수 있도록 프롬프트를 구성하는 방식
- RAG의 핵심적인 요소는 검색이다. 정리되지 않은 방대한 양의 정보를 조사해 관련 내용을 선별하여 콘텍스트에 포함시켜야 할 때 거치는 과정이다.
- RAG는 무관한 정보를 검색하면 콘텍스트에서 더 유용한 정보를 밀어낼 위험이 있다.
- 이를 완화시키기 위해서는 스니펫을 검색할 때 뒤따라 나올 결과와 관련 있는 내용만 검색하는 것이다.
- 어휘 기반 검색
- 가장 간단한 기법 중 하나는 자카드 유사도이다.
- 장점: 빠르게 실행된다. 추가 메모리 사용량이 없다.
- 단점: 정밀도가 떨어진다. 보편적인 단어도 동일하게 계산한다.
- tf-idf나 BM25를 사용하면 자주 등장하지 않는 단어에 자주 등장하는 단어보다 높은 점수를 부여하는 방식으로 단어의 중요도를 고려한다.
- 신경망 기반 검색
- 신경망 기반 검색 vs. 어휘 기반 검색
- 어휘 기반 검색 장점
- 수십년 간 사용되어 왔으며, 현재도 대부분의 온라인 검색 서비스에서 핵심 기술로 활용되고 있다.
- 문서와 질의가 일치하지 않을 때, 그 원인을 파악하기 쉽다. 어간 추출 방식을 수정하거나 문서에 동의어를 보강하는 방식으로 해결할 수 있다.
- 사용자 기대에 맞춰 관련성을 조정할 수 있다.
- 신경망 검색 장점
- 어휘 검색은 단어에 기반해 일치 여부를 판단하는 반면 신경망 검색은 개념 기반으로 일치 여부를 판단한다.
- 요약은 맥락에 집중하여 관련 정보에 대한 간략한 요약을 제공함으로써 방대한 양의 콘텍스트를 처리한다.
- 계층적 요약: 분할 정복 방식으로 먼저 코퍼스를 콘텍스트 윈도 크기를 초과하지 않는 의미 단위로 분할한 뒤 각 단위를 개별적으로 요약한다.
- 일반적이며 특정한 요약: 최종 애플리케이션 작업을 염두에 두고 요약을 요청한다.
- 만약 질문이 바뀐다면 전체 데이터를 처음부터 다시 요약해야 한다.
comments powered by