MemAlign과 MLflow를 사용하여 LLM 심사위원과 인간 전문가 간의 격차를 좁히기.
작성자: Stepan Nosov, Pavle Martinović, 테자스 순다레산, 알키스 폴리조티스 , Nemanja Petrovic
3월에 발표된 Genie Code는 Databricks의 자율 AI 파트너로, 데이터 과학 및 머신러닝을 위해 특별히 제작되었습니다. 이는 데이터 팀이 탐색적 데이터 분석을 수행하고, 피처를 생성 및 검증하며, 모델을 훈련 및 평가하고, 모델 배포를 관리 및 최적화하는 데 도움을 줍니다.
Genie Code가 특별한 이유는 Databricks와의 깊은 통합 때문입니다. Genie Code는 Unity Catalog의 데이터, 비즈니스 컨텍스트, 그리고 Model Serving과 같은 ML 인프라를 이해합니다. 이러한 컨텍스트를 통해 더 정확한 제안을 제공하고, 더 의미 있는 조치를 취하며, 조직에 더 잘 맞는 워크플로우를 생성할 수 있습니다.
이는 중요한 질문을 제기합니다. Genie Code가 이 모든 컨텍스트를 효과적으로 사용하고 ML 모범 사례를 따르는 결과물을 생성하도록 어떻게 보장할까요? 예를 들어, MLflow와 같은 도구를 언제 어떻게 사용하여 모델 품질을 추적해야 하는지 알아야 합니다. 생성된 코드는 고객이 해결하려는 문제에 크게 의존하므로, 생성된 코드의 품질을 평가하는 것은 결코 쉽지 않습니다.
이 게시물에서는 Genie Code의 전통적인 ML 기능을 위한 평가 파이프라인을 구축한 방법과, MLflow의 새로운 오픈 소스 정렬 프레임워크인 MemAlign을 사용하여 LLM 심사위원과 인간 전문가 간의 큰 격차를 해소한 방법을 설명합니다. 개선된 심사위원들은 우리가 놓쳤을 수도 있는 Genie Code의 ML 지침의 격차를 식별하고 수정하는 데 도움을 주었습니다.
견고한 평가 프레임워크는 다음을 위해 필요합니다:
전통적인 ML 노트북 평가는 코드 품질, ML 모범 사례, 데이터 기반 적응/맞춤화 평가를 포함하므로 가장 복잡한 평가 작업 중 하나입니다. ML 노트북 평가와 같이 광범위하고 복잡한 작업을 처리하기 위해, 우리는 LLM 심사위원(LLM-as-a-judge)을 사용합니다. 이는 좋은 노트북이 정확히 어떤 모습인지 인간에 의해 학습된 LLM "전문가"입니다. 우리는 대부분의 ML 워크플로우에 나타나는 9가지 차원을 따라 ML 노트북을 평가하도록 프롬프트된 9명의 심사위원을 만들었습니다.
| 차원 | 평가 항목 |
|---|---|
| 라이브러리 설치 | 올바른 종속성을 설치하고 가져옵니다. |
| 탐색적 데이터 분석 | 분포, 결측값, 타겟 동작, 모델에 영향을 미칠 수 있는 문제를 이해하기 위해 데이터셋을 탐색합니다. |
| 데이터 대체 | 데이터 유출 없이 결측값을 적절하게 처리합니다. |
| 피처 엔지니어링 | 작업에 적합한 방식으로 피처를 선택, 변환 및 인코딩합니다. |
| 모델 훈련 | 교차 검증 및 하이퍼파라미터 튜닝과 같은 건전한 관행을 사용하여 적합한 모델을 훈련합니다. |
| 모델 사용 | 훈련된 모델을 올바르게 재사용하여 예측을 생성하거나 추론을 수행합니다. |
| 메트릭 평가 | ML 작업에 유용한 메트릭을 사용하여 모델 성능을 평가합니다. |
| MLflow 로깅 | MLflow를 사용하여 실험, 메트릭 및 아티팩트를 추적합니다. |
| 셀 구성 | 노트북을 명확하고 읽기 쉬우며 잘 문서화된 셀로 구성합니다. |
각 차원에 대해 우리는 1에서 3까지의 점수를 할당하고 "해당 없음"에 대해 0을 할당하는 채점 기준표(인간 평가자와 LLM 심사위원 간에 재사용됨)를 작성했습니다.
세분화 정도를 보여드리기 위해, 다음은 "데이터 대체" 차원에 사용하는 특정 기준표입니다.
심사위원들과 함께, 우리는 다양한 데이터셋 크기, 도메인 및 복잡성 수준에 걸쳐 다양한 ML 작업(분류, 회귀, 예측)을 포괄하는 평가 테스트 케이스 세트를 유지합니다. 각 테스트 케이스에는 Genie Code에게 지정된 데이터셋에서 해결해야 할 ML 작업을 알려주는 사용자 프롬프트가 포함됩니다("flight_delays_prediction 및 flight_deplays_actual 테이블에 항공기 비행 데이터가 있습니다. 내일 어떤 비행기가 지연될지 예측할 수 있습니까?"). 평가 루프는 각 테스트 케이스에 대해 Genie Code를 사용하여 노트북(또는 여러 개)을 생성한 다음, 모든 해당 차원을 따라 각 노트북에 점수를 매기는 것으로 구성됩니다.
Genie Code 아티팩트를 평가하기 위해 인간 대신 LLM 심사위원을 사용함으로써, 우리는 본질적으로 하나의 어려운 문제를 다른 문제로 바꾸었습니다. 즉, 기본 심사위원은 당면한 작업에 미숙하고 인간 평가와 일치하지 않습니다. 우리의 문제 진술은 LLM 심사위원의 점수가 인간 평가자의 점수와 일치하도록 만드는 것입니다.
LLM 심사위원 평가를 위한 평가 세트에는 인간 전문가가 모든 해당 차원을 채점하고, 점수와 짧은 설명을 제공하여 우리의 '정답(ground truth)' 역할을 하는 50개의 Genie Code 생성 노트북("테스트 케이스")이 포함되어 있습니다. 두 점수 사이의 회색 영역에서는 평가자가 자신의 판단을 표현할 수 있었지만, 스키마는 이러한 경우가 거의 없도록 작성되었습니다.
인간-기계 정렬의 척도는 각 차원 점수 간의 평균 절대 오차(MAE)입니다. 결과는 혼합되었으며, 일부 차원은 강한 정렬을 보였지만(4개 차원의 MAE가 0.10 이하), 다른 차원에서는 상당한 불일치가 나타났습니다.
이러한 격차는 인간과 LLM이 동일한 기준표를 같은 방식으로 해석하지 않기 때문에 발생합니다. 인간 평가자는 미묘하게 결함이 있는 대체 전략이나 '작동하지만' 논리적으로 불건전한 훈련 루프를 발견할 수 있지만, LLM 심사위원은 종종 그러한 기술적 뉘앙스를 놓칩니다. 또한 심사위원이 고전적인 긍정 편향을 겪고 있다는 것을 발견했습니다. 너무 '정중'하여 객관적인 결과를 얻는 데 방해가 되었습니다.
동일한 기준표가 주어졌을 때 LLM 심사위원과 인간이 동일한 결과를 내지 못한다는 것, 즉 불일치가 명백해졌습니다. 이것이 바로 MemAlign이 해결하도록 설계된 시나리오입니다.

MemAlign은 MLflow 내의 프레임워크로, 아주 적은 양의 인간 자연어 피드백만으로도 인간 평가자와 LLM 심사위원 간의 정렬을 수행할 수 있습니다. 이는 인간 피드백을 읽어 형성된 두 가지 유형의 "기억"을 통해 달성됩니다.
추론 시 MemAlign은 모든 의미론적 가이드라인을 가져오고 현재 입력에 가장 관련성 높은 에피소드 예시를 검색하여 작업 컨텍스트를 구성합니다. 심사위원은 이 모든 것을 원래의 평가 기준과 함께 컨텍스트에 로드하고, 축적된 지식을 사용하여 향후 모든 노트북에 더 정확한 점수를 부여합니다.
MemAlign이 돋보이는 핵심 특성은 적은 수의 예시만으로도 높은 성능을 발휘한다는 점입니다. 이는 MemAlign이 자연어 피드백의 풍부한 학습 신호에서 학습 내용을 효과적으로 추출하여 이중 메모리 시스템에 통합하기 때문입니다.
다음은 "데이터 대체(data imputation)" 차원에 대해 생성된 의미론적 메모리 스니펫의 예시입니다. 이는 이전에 정의한 평가 기준의 공백을 일반적으로 앵커 포인트, 예시 및 반례를 제공하여 채웁니다.
또한, 앞서 언급했듯이 프롬프트에 반영된 의미론적 메모리는 채점 시 심사위원의 에피소드 메모리에서 가져온 관련 예시로 보완되어, 심사위원이 최적화된 지침을 해석하는 데 더 많은 컨텍스트를 제공합니다.
ML 훈련-테스트 패러다임을 따라, 데이터 유출과 별도의 테스트 세트를 레이블링할 필요성을 피하기 위해 50개의 테스트 케이스(노트북)에 K-겹 교차 검증(K=4)을 적용했습니다. 각 폴드에 대해 다음을 수행했습니다.
추가 레이블링된 데이터 없이 신뢰 구간을 계산하기 위해, 원본 50개에서 100개의 부트스트랩 샘플을 복원 추출하여 생성했습니다. 이를 10,000번 반복하고 사람과 기계 점수 간의 MAE를 추적하여, 통계적으로 유의미한 변화를 정의하는 95% CI를 사용하여 사람-기계 정렬에 대한 신뢰 구간을 계산했습니다.
평가 파이프라인은 전체 프로세스를 조율하는 단일 MLflow 스니펫으로 구현됩니다.
MemAlign 최적화 도구는 단 몇 줄의 코드로 테스트 케이스의 트레이스를 기반 으로 LLM 심사위원을 정렬할 수 있습니다. 우리는 이 새로운 "정렬된" 심사위원을 사용하여 새로운 MAE를 계산했습니다. 단일 차원에서 심사위원을 정렬하는 데 폴드당 약 25초가 소요되므로, 정렬 자체는 병목 현상이 아닙니다.

9개 차원 중 3개에서 통계적으로 유의미한 개선이 나타났습니다.
이 3가지 차원은 초기에 크게 불일치했던 4가지 차원 중 하나입니다. 약한 초기 정렬은 LLM과 인간이 공유된 평가 기준에 대해 근본적으로 다른 이해를 가지고 있음을 나타내며, MemAlign에서 주입된 메모리는 그들이 "같은 페이지"에 도달할 수 있도록 충분한 컨텍스트를 제공하는 것으로 보입니다.
MemAlign의 이중 메모리 구조는 두 메모리가 실제로 심사위원 정렬에 기여하는지 의문을 갖게 했습니다. 특히, 에피소드 메모리는 가장 유사한 주석이 달린 노트북 세트를 참조점으로 제공하여(최근접 이웃 검색 활용) 심사위원을 돕는 역할을 합니다. 그러나 검색된 노트북(최근접 이웃)이 실제로는 현재 노트북과 유사하지 않고, 단지 가장 덜 유사한 경우라면 어떨까요? 이러한 노트북을 심사위원의 컨텍스트에 로드하는 것은 도움이 되기보다는 혼란을 야기할 수 있습니다. 우리가 평가하는 문제 공간(ML 노트북)은 매우 광범위하며, 우리는 처음에 50개의 노트북 세트만으로는 심사위원이 회상할 수 있는 충분히 밀집된 메모리 세트를 얻기에 부족할 것이라고 가정했습니다.
에피소드 메모리가 없으면 상황은 상당히 악화됩니다.

이는 우리가 예상했던 것과는 반대였습니다. 우리는 처음에 우리의 희소한 주석 세트가 심사위원을 혼란스럽게 할 것이라고 가정했지만, 에피소드 메모리가 없으면 거의 모든 차원이 악화되었습니다. 유일한 예외는 데이터 탐색이었습니다. 여기서는 에피소드 예시를 제외하는 것이 실제로 도움이 되었을 수 있습니다. 주석자가 동의하지 않은 특정 노트북이 없었기 때문에 심사위원은 추출된 가이드라인만 가지고 작업할 수 있었고, 노이즈가 적은 신호를 사용할 수 있었습니다.
요점: 입력이 크고 복잡하더라도 에피소드 메모리는 심사위원의 성능을 크게 향상시킵니다. 의미론적 메모리와 에피소드 메모리 모두 MemAlign 기능에 필수적입니다.
코딩 에이전트가 제 역할을 하는지 판단하는 것도 충분히 어렵지만, 전통적인 ML 워크플로우를 구축하고 실행하는 자율 AI 파트너를 평가하는 것은 또 다른 수준의 복잡성을 가집니다. AI 제품의 빠른 반복으로 인해 전문가가 에이전트의 "지속적인 통합"을 모니터링할 시간이 충분하지 않습니다. 유일하게 실현 가능한 확장 가능한 솔루션은 LLM 심사위원이지만, 우리는 여전히 LLM 심사위원을 통제하기 위한 인간 배심원이 필요합니다.
MemAlign을 적용함 으로써, 가장 중요했던 차원에서 심사위원 오류를 74~89% 줄였습니다. 그러나 모든 ML/LLM 작업과 마찬가지로, 결과는 입력하는 정보만큼만 좋으므로 레이블링이 적절한지 확인해야 합니다.
핵심 사항:
MemAlign은 MLflow와 함께 제공되며 약 50개의 레이블링된 예시만으로도 효과적이었습니다. LLM 평가 결과가 전문가의 판단과 일치하지 않는다면, 오후 시간을 투자할 가치가 있습니다.
(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)
블로그를 구독하고 최신 게시물을 이메일로 받아보세요.