대규모 언어 모델(LLM) 적용에는 데이터를 구조화된 방식으로 표시해야 하는 여러 시나리오가 있으며, 그 중 정보 추출과 쿼리 분석이 대표적인 예입니다. 우리는 최근 업데이트된 문서와 전용 코드 저장소를 통해 정보 추출의 중요성을 강조했습니다. 쿼리 분석을 위해 관련 문서도 업데이트했습니다. 이러한 시나리오에서 데이터 필드에는 문자열, 부울 값, 정수 등이 포함될 수 있습니다. 이러한 유형 중에서 카디널리티가 높은 범주형 값(즉, 열거형)을 처리하는 것이 가장 어렵습니다.
Pictures
소위 "높은 카디널리티 그룹화 값"은 제한된 옵션에서 선택해야 하는 값을 의미합니다. 이러한 값은 임의로 지정할 수 없으며 사전 정의된 세트에서 나와야 합니다. 이러한 종류의 집합에는 때때로 "높은 카디널리티 값"이라고 부르는 유효한 값이 매우 많이 있을 수 있습니다. 이러한 값을 다루는 것이 어려운 이유는 LLM 자체가 이러한 실현 가능한 값이 무엇인지 알지 못하기 때문입니다. 따라서 우리는 이러한 실현 가능한 값에 대한 정보를 LLM에 제공해야 합니다. 가능한 값이 몇 개밖에 없는 경우를 무시하더라도 힌트에 이러한 가능한 값을 명시적으로 나열하면 이 문제를 해결할 수 있습니다. 그러나 가능한 값이 너무 많기 때문에 문제가 복잡해집니다.
가능한 값의 개수가 늘어날수록 LLM에서 값을 선택하는 난이도도 높아집니다. 한편, 가능한 값이 너무 많으면 LLM의 컨텍스트 창에 맞지 않을 수 있습니다. 반면에 가능한 모든 값이 컨텍스트에 들어갈 수 있더라도 이를 모두 포함하면 처리 속도가 느려지고 비용이 증가하며 많은 양의 컨텍스트를 처리할 때 LLM 추론 기능이 저하됩니다. `가능한 값의 개수가 늘어날수록 LLM에서 값을 선택하는 난이도가 높아집니다. 한편, 가능한 값이 너무 많으면 LLM의 컨텍스트 창에 맞지 않을 수 있습니다. 반면에 가능한 모든 값이 컨텍스트에 들어갈 수 있더라도 이를 모두 포함하면 처리 속도가 느려지고 비용이 증가하며 많은 양의 컨텍스트를 처리할 때 LLM 추론 기능이 저하됩니다. ` (참고: 원본 텍스트는 URL 인코딩된 것으로 보입니다. 인코딩을 수정하고 다시 작성된 텍스트를 제공했습니다.)
최근 쿼리 분석에 대한 심층적인 연구를 수행했으며, 관련 문서를 개정할 때 다음 사항을 추가했습니다. 카디널리티 값이 높은 페이지를 처리하는 방법에 대한 특별 섹션입니다. 이 블로그에서는 몇 가지 실험적 접근 방식을 살펴보고 성능 벤치마크 결과를 제공하겠습니다.
결과 개요는 LangSmith https://smith.langchain.com/public/8c0a4c25-426d-4582-96fc-d7def170be76/d?ref=blog.langchain.dev에서 볼 수 있습니다. 다음으로 자세히 소개하겠습니다.
Pictures
자세한 데이터 세트는 여기에서 볼 수 있습니다 https://smith.langchain.com/public/8c0a4c25-426d-4582-96fc -d7def170be76 /d?ref=blog.langchain.dev.
이 문제를 시뮬레이션하기 위해 특정 작가가 쓴 외계인에 관한 책을 찾고 싶다는 시나리오를 가정합니다. 이 시나리오에서 작성자 필드는 카디널리티가 높은 범주형 변수입니다. 가능한 값은 많지만 유효한 특정 작성자 이름이어야 합니다. 이를 테스트하기 위해 저자 이름과 공통 별칭이 포함된 데이터세트를 만들었습니다. 예를 들어, "Harry Chase"는 "Harrison Chase"의 별칭일 수 있습니다. 우리는 이러한 종류의 앨리어싱을 처리할 수 있는 지능형 시스템을 원합니다. 이 데이터세트에서는 작가 이름과 별칭 목록이 포함된 데이터세트를 생성했습니다. 10,000개의 무작위 이름은 너무 많지 않습니다. 엔터프라이즈 수준 시스템의 경우 수백만 개의 카디널리티를 처리해야 할 수도 있습니다.
이 데이터 세트를 사용하여 "해리 체이스의 외계인에 관한 책은 무엇입니까?"라는 질문을 합니다. 우리의 쿼리 분석 시스템은 이 질문을 주제와 저자라는 두 가지 필드를 포함하는 구조화된 형식으로 구문 분석할 수 있어야 합니다. 이 예에서 예상되는 출력은 {"topic": "aliens", "author": "Harrison Chase"}입니다. 우리는 시스템이 Harry Chase라는 이름의 저자가 없다는 것을 인식할 것으로 기대하지만, 사용자가 의미한 것은 Harrison Chase일 수도 있습니다.
이 설정을 사용하면 생성한 별칭 데이터세트를 테스트하여 실제 이름에 올바르게 매핑되는지 확인할 수 있습니다. 동시에 쿼리의 대기 시간과 비용도 기록합니다. 이런 종류의 쿼리 분석 시스템은 일반적으로 검색에 사용되기 때문에 우리는 이 두 가지 지표에 대해 매우 우려하고 있습니다. 이러한 이유로 우리는 모든 방법을 하나의 LLM 호출로 제한합니다. 향후 기사에서는 여러 LLM 호출을 사용하여 방법을 벤치마킹할 수 있습니다.
다음으로 다양한 방법과 성능을 소개하겠습니다.
Pictures
전체 결과는 LangSmith에서 볼 수 있으며 이러한 결과를 재현하는 코드는 여기에서 찾을 수 있습니다.
먼저 LLM에 대한 기본 테스트를 진행했습니다. 즉, 유효한 이름 정보를 제공하지 않고 LLM에 쿼리 분석을 직접 요청하는 것이었습니다. 예상대로 단 하나의 질문에도 정답이 나오지 않았습니다. 이는 작성자를 별칭으로 쿼리해야 하는 데이터 세트를 의도적으로 구성했기 때문입니다.
이 방법에서는 10,000개의 법적 저자 이름을 모두 프롬프트에 입력하고 쿼리 분석을 수행할 때 LLM에게 이것이 법적 저자 이름임을 기억하도록 요청합니다. 일부 모델(예: GPT-3.5)은 컨텍스트 창의 제한으로 인해 이 작업을 수행할 수 없습니다. 컨텍스트 창이 더 긴 다른 모델의 경우에도 정확한 이름을 선택하는 데 어려움을 겪었습니다. GPT-4는 26%의 경우에만 올바른 이름을 선택했습니다. 가장 일반적인 오류는 이름을 추출했지만 수정하지 않는 것입니다. 이 방법은 속도가 느릴 뿐만 아니라 비용도 많이 듭니다. 완료하는 데 평균 5초가 걸리고 총 비용은 $8.44입니다.
다음으로 테스트한 방법은 LLM에 전달하기 전에 가능한 값 목록을 필터링하는 것입니다. 이것의 장점은 가능한 이름의 하위 집합만 LLM에 전달하므로 LLM에서 고려해야 할 이름이 훨씬 적어 쿼리 분석을 더 빠르고 저렴하며 정확하게 완료할 수 있다는 것입니다. 그러나 이는 또한 새로운 잠재적 실패 모드를 추가합니다. 초기 필터링이 잘못되면 어떻게 될까요?
처음에 사용한 필터링 방법은 임베딩 방식으로 쿼리와 가장 유사한 이름 10개를 선택했습니다. 전체 쿼리를 이름과 비교하고 있는데 이는 이상적인 비교가 아닙니다.
이 접근 방식을 사용하면 GPT-3.5가 사례의 57%를 올바르게 처리할 수 있다는 것을 발견했습니다. 이 방법은 이전 방법보다 훨씬 빠르고 저렴하며 완료하는 데 평균 0.76초만 걸리고 총 비용은 $0.002에 불과합니다.
두 번째 필터링 방법은 TF-IDF에서 모든 유효한 이름의 3그램 문자 시퀀스를 벡터화하고, 벡터화된 유효한 이름을 벡터화하여 사용하는 것입니다. 사용자 입력 간의 코사인 유사성 모델 프롬프트에 추가할 가장 관련성이 높은 10개의 유효한 이름을 선택하는 데 사용됩니다. 또한 전체 쿼리를 이름과 비교하고 있는데 이는 이상적인 비교가 아닙니다.
이 접근 방식을 사용하면 GPT-3.5가 사례의 65%를 올바르게 처리할 수 있다는 것을 발견했습니다. 이 방법은 또한 이전 방법보다 훨씬 빠르고 저렴하여 완료하는 데 평균 0.57초밖에 걸리지 않으며, 총 비용은 $0.002에 불과합니다.
저희가 테스트한 마지막 방법은 LLM이 예비 쿼리 분석을 완료한 후 오류를 수정하는 것이었습니다. 먼저 프롬프트에 유효한 작성자 이름에 대한 정보를 제공하지 않고 사용자 입력에 대한 쿼리 분석을 수행했습니다. 이는 처음에 수행한 것과 동일한 기본 테스트입니다. 그런 다음 작성자 필드에서 이름을 가져와 가장 유사한 유효한 이름을 찾는 후속 단계를 수행했습니다.
먼저 임베딩 방법을 이용하여 유사성 검사를 수행했습니다.
이 접근 방식을 사용하면 GPT-3.5가 사례의 83%를 올바르게 처리할 수 있다는 것을 발견했습니다. 이 방법은 이전 방법보다 훨씬 빠르고 저렴하며 완료하는 데 평균 0.66초밖에 걸리지 않으며, 총 비용은 $0.001에 불과합니다.
마지막으로 유사성 검사를 위해 3그램 벡터라이저를 사용해 보겠습니다.
이 접근 방식을 사용하면 GPT-3.5가 사례의 74%를 올바르게 처리할 수 있다는 것을 발견했습니다. 이 방법은 또한 이전 방법보다 훨씬 빠르고 저렴하여 완료하는 데 평균 0.48초밖에 걸리지 않으며, 총 비용은 $0.001에 불과합니다.
카디널리티가 높은 범주형 값을 처리하기 위한 쿼리 분석 방법에 대해 여러 벤치마크를 수행했습니다. 실제 대기 시간 제약 조건을 시뮬레이션하기 위해 LLM 호출을 한 번만 수행하도록 제한했습니다. 우리는 유사성 기반 선택 방법을 포함하는 것이 LLM을 사용한 후에 가장 잘 수행된다는 것을 발견했습니다.
추가로 테스트할 만한 다른 방법이 있습니다. 특히 LLM 호출 전후에 가장 유사한 범주형 값을 찾는 방법은 다양합니다. 또한 이 데이터세트의 카테고리 기반은 많은 엔터프라이즈 시스템이 직면하는 것만큼 높지 않습니다. 이 데이터 세트에는 약 10,000개의 값이 있는 반면, 많은 실제 시스템에서는 수백만 개의 카디널리티를 처리해야 할 수도 있습니다. 따라서 더 높은 카디널리티 데이터에 대한 벤치마킹은 매우 가치가 있습니다.
위 내용은 LLM 초장기 컨텍스트 쿼리 성능 평가 실습의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!