오늘의 추천 글
안녕하세요 주간SaaS 입니다.
생성형 AI 기술을 운영 환경에 적용할 때 가장 큰 걱정은 모델의 환각 문제(Hallucination)입니다. 그래서 이를 보완하는 다양한 장치들을 고민하는 데 많은 노력과 시간을 들이기도 합니다. 오늘 소개하는 글은 스포티파이(Spotify) 재무 엔지니어링팀이 수많은 시행착오 끝에 검증해 낸 '다수결 투표'와 '점수 보정' 방식을 통해 반복적인 작업을 자동화함과 동시에 결과의 신뢰성도 높인 사례를 담고 있습니다. 개인적으로 이 글이 결국 AI 서비스의 신뢰도가 화려한 최신 기술이 아니라 집요한 디테일과 현실적인 검증 과정에서 완성된다는 점을 보여준다고 생각합니다.
TL;DR (요약) GenAI로부터 응답을 받는 것은 빠르고 직관적입니다. 하지만 그 응답의 '신뢰도 수준(confidence level)'은 어떨까요? 금융 분야와 같은 특정 애플리케이션에서는 신뢰도 점수가 반드시 필요합니다. 금융 자동화와 관련된 문서 파싱(document-parsing) 작업에서 우리는 신뢰도 수준을 다루기 위해 보정 모델, 로그 확률, 다수결 투표라는 세 가지 접근 방식을 테스트했습니다. 그 결과, 다수결 투표가 가장 성능이 뛰어난 기술로 밝혀졌습니다. 아이디어 자체는 비교적 간단하지만, 구체적인 구현 과정에는 복잡한 문제들이 숨어 있었습니다.
들어가며
GenAI 기술의 도입은 내부 업무 효율성 개선을 포함하여 현재 비즈니스 환경에 혁명적인 변화를 가져왔습니다. 과거에는 인간에게 부담이 되었던 반복적인 작업들이 이제 GenAI에 의해 자동화될 수 있습니다. 기존의 결정론적(deterministic) 방법이나 머신러닝(ML) 모델과 비교할 때, GenAI를 사용하는 것은 다음과 같은 이점이 있습니다.
• 빠른 개발: 신속한 학습, 테스트 및 구현으로 개발 시간을 단축합니다.
• 확장성과 유연성: 간단한 프롬프트 조정만으로 새로운 케이스를 쉽게 통합하고 확장할 수 있습니다.
• 유지보수 용이성: 많은 경우, GenAI 기반 솔루션은 기존 ML 모델보다 유지보수가 쉬워 장기적으로 비용 효율적입니다.
이러한 장점에도 불구하고, GenAI는 신뢰도 점수의 부재와 환각(hallucinations) 현상으로 인해 정확성과 신뢰성 측면에서 심각한 도전에 직면해 있습니다. 신뢰도 수준은 신뢰를 구축하고 의사 결정을 알리는 데 매우 중요하지만, AI 기술에 내재된 기능은 아닙니다. 이 글에서는 금융 자동화 사용 사례를 위해 GenAI 애플리케이션에서 신뢰도 점수를 생성한 방법, 구체적인 접근 방식, 중요한 구현 세부 사항, 그리고 직면한 과제와 한계에 대해 살펴보겠습니다.
금융 자동화 애플리케이션에서의 신뢰도 평가
우리 팀은 스포티파이(Spotify)의 재무 엔지니어링(Financial Engineering) 조직에 속해 있으며, 자동화를 통해 재무 프로세스의 효율성을 높이는 것을 목표로 합니다. 최근 우리는 송장(invoice) 처리를 간소화하기 위한 대규모 이니셔티브의 일환으로 송장 파싱 자동화 작업을 진행했습니다. 전 세계 수많은 공급업체로부터 들어오는 송장은 다양한 언어, 포맷, 구조를 가지고 있습니다. 이러한 복잡성 때문에 결정론적 모델은 수많은 예외 케이스(edge cases)와 모호하고 불완전한 데이터를 처리하는 데 어려움이 있어 적합하지 않았습니다. 반면, GenAI는 훨씬 더 다재다능하고 적응력이 뛰어난 것으로 입증되었습니다. 또한 송장 파싱과 같은 복잡한 작업에 대해 적절한 추론을 수행할 수 있습니다. 하지만 이 작업에 GenAI 모델을 도입할 때 중요한 문제가 발생했습니다. 바로 '인간 개입(human-in-the-loop)' 결정을 지원하고 IT 일반 통제(ITGC) 및 사베인스-옥슬리 법(SOX)과 같은 규제 요구 사항을 충족하기 위해 신뢰도 점수를 생성해야 한다는 것이었습니다. 모델의 결과물을 신뢰하기 위해서는 특정 임계값을 넘어야 했습니다. 이러한 요구를 해결하기 위해 우리는 다음 접근 방식들을 연구하고 GenAI 모델 출력에 대한 신뢰도 점수를 생성하는 신뢰할 수 있는 방법을 구현했습니다.
평가된 접근 방식들
1. 보정기 (Calibrator)
"보정기(Calibrator)"는 별도의 단일 GenAI 모델을 사용하여 다른 모델이 생성한 결과물을 평가하고 신뢰도 점수를 부여하는 방식을 말합니다. 이 접근법은 다른 모델의 출력에 대해 독립적이고 편향되지 않은 평가를 제공합니다. 또한 보정기 모델은 피드백을 통해 학습할 수 있어 시간이 지남에 따라 잠재적으로 개선될 수 있습니다. 하지만 보정기가 생성한 신뢰도 점수는 해석하기 어렵고 때로는 직관에 반하는 경우가 있습니다. 게다가 여러 번 실행했을 때 점수가 일관되지 않았습니다. 기술에 대한 신뢰가 중요한 금융 애플리케이션에서 불명확한 점수 산정과 불일치는 용납될 수 없습니다.
2. 로그 확률 (Logprobs)
Logprobs, 즉 로그 확률(logarithmic probabilities)은 생성된 출력의 각 토큰(단어 또는 단어의 일부와 같은 텍스트 단위)에 대한 로그 변환 확률입니다. 이 확률은 모델이 해당 토큰을 선택하는 데 얼마나 확신을 가지고 있는지를 나타냅니다. 로그 확률이 높을수록(음수 값이 작을수록) 모델이 그 선택에 더 확신을 가지고 있음을 의미합니다. 그러나 이 방법론은 항상 투명하지 않으며, 제공자(provider)마다 다르고 많은 모델의 경우 어떻게 계산되었는지 알 수 없습니다. 전체 응답의 신뢰도는 해당 토큰들의 로그 확률을 결합하여 추론할 수 있습니다. 우리는 출력 길이에 따른 정규화를 위해 로그 확률을 합산하는 대신 평균을 냈습니다. 그 후 토큰들의 평균 로그 확률을 지수화(exponentiating)하여 신뢰도 점수를 계산했습니다. 우리는 애플리케이션의 다양한 추출 필드에 대해 이 접근 방식을 테스트했습니다. 아래 그림은 하나의 숫자 필드(송장 총액)와 하나의 텍스트 필드(송장 번호)에 대한 결과를 정확도와 비교하여 도식화한 것입니다. 로그 확률 기반 신뢰도 점수와 정확도 사이에는 뚜렷한 상관관계가 발견되지 않았으며, 이러한 결론은 다른 텍스트 및 숫자 필드에서도 동일하게 나타났습니다. 상관관계의 부재는 로그 확률을 평균내는 것이 전체적인 신뢰도를 측정하는 신뢰할 수 있는 척도가 아님을 시사합니다.
![[Figure 1: 송장 총액 및 송장 번호 추출에 대한 정확도 대 로그 확률 기반 신뢰도 점수] (편집자 주: 원문의 그래프는 로그 확률 점수와 정확도 간의 상관관계가 낮음을 보여줍니다.)](https://cdn.maily.so/du/saascenter/202511/1764211250055887.png)
3. 다수결 투표 (Majority voting)
다수결 투표는 여러 프롬프트나 여러 GenAI 모델 중에서 가장 공통적인 응답을 선택하여 최종 출력을 결정하는 앙상블(ensemble) 방식입니다. 예를 들어, 5개의 모델에게 이미지를 분류하도록 요청했을 때 4개는 "고양이", 1개는 "개"라고 제안한다면 최종 출력은 "고양이"가 됩니다. 신뢰도 점수는 동의한 모델의 비율에 따라 계산될 수 있으며, 이 경우 80%(5개 모델 중 4개)가 됩니다. 우리는 5개의 GenAI 모델과 다수결 투표를 사용하여 동일한 애플리케이션을 테스트했고, 신뢰도 점수와 정확도 사이에 강력한 양의 상관관계가 있음을 관찰했습니다. 동일한 두 필드를 아래에 도식화했으며, 이 결론은 다른 필드에서도 유효합니다.
![[Figure 2: 송장 총액 및 송장 번호 추출에 대한 정확도 대 다수결 투표 기반 신뢰도 점수] (편집자 주: 원문의 그래프는 다수결 투표 점수가 높아질수록 정확도도 높아지는 뚜렷한 상관관계를 보여줍니다.)](https://cdn.maily.so/du/saascenter/202511/1764211306973225.png)
다수결 투표의 신중한 기술 (The careful art of majority voting)
평가 결과, 우리는 다수결 투표만이 정확도와 강력한 양의 상관관계를 보이고 비교적 일관성이 있으며 해석 가능했기 때문에 우리 애플리케이션에 적합한 유일한 선택이라고 결론지었습니다. 개념은 간단하지만, 실제 구현 과정에서 많은 요소를 신중하게 고려해야 한다는 것을 깨달았습니다.
모델 수 결정하기
최적의 모델 수는 작업의 복잡성, 모델의 다양성, 가용 자원, 특정 프로젝트의 목표 및 제약 사항과 같은 요소에 따라 달라집니다. 더 큰 규모의 앙상블은 개별 모델의 오류를 줄여 일반적으로 더 높은 안정성과 정확도를 제공합니다. 그러나 계산 복잡성을 증가시키며, 모델들이 너무 유사할 경우 수확 체감(diminishing returns)이 발생할 수 있습니다. 반면 작은 앙상블은 효율적이지만 안정성이 떨어집니다. 관련 문헌에서는 종종 최적의 앙상블로 4~7개의 모델을 사용할 것을 제안합니다. 우리의 사용 사례에서는 5~6개의 서로 다른 LLM(거대언어모델)을 활용했습니다. 우리는 이 숫자가 충분한 다양성을 제공하며 속도와 다양성 사이의 좋은 균형을 이룬다는 것을 발견했습니다.
투표 가중치 부여
최종 점수를 계산하기 위해 가중치가 적용된 다수결 투표(weighted majority voting) 방식을 구현했습니다. 각 모델의 가중치는 모델의 정확도를 기반으로 했으며, 합이 1이 되도록 정규화했습니다. 이 방법은 가중치가 없는 투표와 달리 투표 과정에서 동점이 발생할 확률을 최소화합니다. 또한 성능이 더 좋은 모델에 더 큰 영향력을 부여함으로써 정확도를 향상시킵니다. 우리는 선형 가중치(가중치가 모델 정확도와 선형적으로 상관관계가 있는 경우)와 지수 가중치(상위 모델이 절반에 가깝거나 그 이상의 가중치를 갖는 경우)를 모두 평가했습니다. 두 방법 모두 유사한 성능을 보였습니다. 우리는 더 균형 잡히고 일관된 결과를 생성하며 설명하기 쉬운 선형 가중치를 애플리케이션에 사용하기로 결정했습니다.
신뢰도 점수 보정 (Calibrating confidence score)
신뢰도와 정확도 사이에 양의 상관관계가 있긴 하지만, 그 관계가 일대일(one-to-one)은 아니며 필드마다 다를 수 있습니다. 다양한 필드에서 과도한 확신(over-confidence)이나 과소 확신(under-confidence)을 교정하기 위해, 확률적 출력을 보정하는 데 흔히 사용되는 기술인 플랫 스케일링(Platt scaling)을 적용했습니다. 이 보정 과정은 아래 차트의 두 가지 예시처럼 원시 신뢰도 점수를 조정하여 정확도와 더 잘 일치하도록 만듭니다.
![[Figure 3: 송장 총액 및 송장 번호 추출에 대한 보정 전후의 정확도 대 다수결 투표 기반 신뢰도 점수]](https://cdn.maily.so/du/saascenter/202511/1764211424939626.png)
다수결 투표 — 한계, 도전, 그리고 탐구
긴 텍스트 필드
다수결 투표는 숫자나 짧은 텍스트 응답에는 효과적이지만, 주소나 품목 설명과 같은 긴 텍스트 필드에서는 어려움에 직면합니다. 문구의 다양성 때문에 직접적인 문자열 일치(string matching)를 사용하여 모델 간의 합의를 얻을 가능성이 낮기 때문입니다. 이 문제를 해결하기 위해 우리는 다음과 같은 두 가지 방법으로 다수결 응답을 얻으려 시도했습니다.
- 임베딩 유사도(Embedding similarity): 임베딩의 코사인 유사도(cosine similarity)를 기반으로 유사한 텍스트 응답을 클러스터로 그룹화합니다. 가장 큰 클러스터가 다수결 투표의 결과가 됩니다. 이 접근 방식은 거리 임계값(distance thresholds)을 신중하게 조정해야 합니다.
- GenAI 선택(GenAI selection): 별도의 GenAI 모델이 여러 응답 중에서 다수결 투표 결과를 선택하는 방식입니다. 이 접근 방식은 선택 모델(selector)이 사실적 정확성과 일관성을 우선시하도록 하기 위해 광범위한 프롬프트 엔지니어링이 필요합니다.
테스트 결과, 두 접근 방식 모두 긴 텍스트 필드에 대해 유사한 출력을 식별할 수 있었습니다. 그러나 "0"과 "O"를 구분하지 못하는 것과 같은 일부 철자 차이를 잡아내지 못했고, 이는 금융 애플리케이션에서 심각한 오류로 이어질 수 있습니다. 따라서 우리는 이를 프로덕션(상용) 환경에 구현하지 않기로 결정했습니다. 대안으로, 우리는 긴 텍스트 필드를 더 작고 관리하기 쉬운 구성 요소로 나누었습니다(예: 주소를 거리, 도시, 주, 우편번호로 분할). 이는 다수결 투표 중 모델 간의 합의 가능성을 높였습니다. 하지만 긴 텍스트 필드에 대한 더 강력한 솔루션을 개발하는 것은 여전히 추가 연구가 필요한 핵심 영역입니다.
입도(Granularity) 문제
앙상블에 사용되는 모델 수가 제한적이기 때문에 다수결 투표는 입도(granularity) 문제를 야기합니다. 7개의 모델(일반적인 범위의 상한선)을 사용할 경우, 표 하나가 추가될 때마다 신뢰도 수준이 약 14%씩 계단식으로 변합니다. 이는 세밀한 신뢰도 수치(예: 통과를 위해 95% 신뢰도 필요)가 필요한 애플리케이션에는 충분히 정밀하지 않습니다.
입도를 개선하기 위해 우리는 순열(permutation) 방식을 실험했습니다. 모델당 여러 개의 프롬프트를 사용함으로써 총 응답 수는 X에서 X * Y로 증가했습니다(여기서 X는 모델 수, Y는 모델당 프롬프트 수). 우리는 7개의 GenAI 모델과 5개의 서로 다른 프롬프트를 테스트하여 총 35개의 응답을 생성했습니다. 결과는 아래 표와 같습니다.
![[Table 1: 순열 방식 적용 유무에 따른 다수결 투표 비교]](https://cdn.maily.so/du/saascenter/202511/1764211672746282.png)
순열 방식은 우리 시스템의 통과율(pass rate)을 잠재적으로 높일 수 있었습니다. 만약 신뢰도 임계값이 90%였다면, 기존 방식은 거짓 거부(false rejection)를 초래했겠지만, 순열 방식은 성공적으로 올바른 출력을 반환했을 것입니다. 하지만 이 방식은 모델 실행 횟수를 크게 증가시켜 비용이 선형적으로 증가하고, 완료 시간은 35개 중 가장 느린 모델에 의존하게 되며, 잠재적인 실패 가능성도 높아집니다. 비록 실험을 통해 귀중한 통찰력을 얻고 임계값과 그 영향에 대해 비즈니스 측과 심도 있는 논의를 할 수 있었지만, 비용 효율적인 장기 솔루션을 위해서는 추가 연구가 필요합니다.
결론
이 글에서 우리는 금융 애플리케이션에 GenAI를 사용할 때 발생하는 독특한 과제인 '신뢰도 점수 결정'에 대해 살펴보았습니다. 우리는 탐구했던 다양한 접근 방식들과 성공적으로 구현된 기술에 대해 논의했습니다. 하지만 언제나 그렇듯, 악마는 디테일에 있으며 구현의 많은 측면은 신중한 고려가 필요합니다. 마지막으로, 우리의 접근 방식에는 여전히 과제와 한계가 존재합니다. 몇 가지 해결책을 탐구했지만 일부 문제는 향후 연구 과제로 남아 있습니다. 우리는 새로운 개발들이 이 혁신적인 기술을 계속 발전시킬 것이라고 낙관하며, 우리의 탐구가 스포티파이 팀뿐만 아니라 업계 전반의 실무자들에게도 영감을 주기를 바랍니다.
의견을 남겨주세요