TECH 으로 돌아가기
TECH HACKER NEWS 오늘 6분 읽기 24 READS

판정 모델을 억지로 챗봇으로: jevchat이 보여주는 생성의 원리

판정 모델을 억지로 챗봇으로: jevchat이 보여주는 생성의 원리
SOURCE IMAGE · HACKER NEWS

대규모 언어 모델이 문장을 만들어내는 과정을 한 꺼풀 벗겨 보면, 결국 '다음에 올 기호는 무엇인가'라는 질문을 수없이 반복하는 일이다. 개발자 카일 페냐가 공개한 실험용 프로젝트 jevchat은 이 원리를 거의 우스꽝스러울 만큼 노골적으로 드러낸다. 이 프로젝트는 'Jev'라는 판정형 모델을 텍스트 생성기로 바꿔놓는다. Jev는 본래 문장을 술술 써 내려가는 생성 모델이 아니라, 주어진 선택지에 점수를 매기는 판단 도구에 가깝다. jevchat은 여기에 '사용자 질문과 지금까지 쓰인 답변을 볼 때, 다음 기호는 무엇이어야 하는가'라는 단 하나의 질문을 매 단계 던져 억지로 챗봇처럼 굴게 만든다.

한 글자씩 확률을 뽑아 쌓는 구조

동작 방식은 단순하다. 선택지는 알파벳 집합에 '생성 중단(STOP)' 옵션을 더한 것이고, Jev는 각 선택지에 확률을 돌려준다. 샘플러는 그 확률 분포를 정규화한 뒤 다음 기호 하나를 뽑아 답변에 이어 붙이고, 다시 같은 질문을 던진다. STOP이 뽑히면 멈춘다. 결국 한 글자를 생성할 때마다 API 호출이 최소 한 번씩 발생하는 셈이라, 제작자 스스로 '비용이 다소 비현실적'이며 결과물은 '포복절도할 수준'이라고 표현한다. 재미로 만든 실험이라는 점을 숨기지 않는다. 이 프로젝트 자체가 클로드의 도움을 받아 만들어졌는데, 제작자가 샘플링 알고리즘과 전략을 설명하면 모델이 이를 구현하는 방식으로 진행됐다고 한다.

실용성과 별개로, jevchat은 텍스트 생성이 매 스텝의 확률 분포에서 표본을 추출하는 반복 과정이라는 사실을 눈으로 확인시켜 준다. 답변은 샘플링되는 대로 화면에 실시간으로 나타나며, 초당 기호 수와 문자 수, 호출당 소요 밀리초, 누적 시간 같은 생성 속도 지표가 함께 표시된다. 마지막 스텝에서 Jev가 높은 점수를 준 상위 기호 몇 개도 보여주기 때문에, 샘플러가 어떤 분포에서 다음 글자를 뽑고 있는지 관찰할 수 있다. 온도(temp)나 정지 편향(stop-bias) 같은 값을 명령어로 조정하고, 알파벳을 바꾸고, 대화를 초기화하는 등의 조작도 지원한다.

무엇을 묻느냐가 성능을 가른다

이 실험에서 가장 배울 점이 많은 대목은 '같은 질문을 어떻게 제시하느냐'가 결과 품질을 크게 좌우한다는 발견이다. jevchat에는 두 가지 제시 방식이 있다. symbol 방식에서는 선택지가 'a', 'i', ' the' 같은 기호 자체이며, Jev는 그 기호를 머릿속에서 기존 답변에 이어 붙인 뒤에야 판단해야 한다. 실제로 초기 지시문에는 '개별 옵션이 아니라 이어 붙인 결과에 대해 문법과 철자를 판정하라'는 안내가 들어 있었다.

반면 hypothesis 방식에서는 선택지 자체를 '이어 붙이기가 끝난 완성된 문자열'로 제시한다. 즉 조합 작업을 미리 끝내 두고, Jev에게는 완성된 후보 문자열들의 순위만 매기게 한다. 이는 판정 모델이 원래 잘하도록 설계된 바로 그 일이다. 제작자는 이 변경이 프로젝트에서 가장 큰 개선이었다고 밝힌다. 문자 단위 알파벳에서 최상위(top-1) 적중률이 대략 세 배로 뛰고, 정답 기호에 실리는 확률 질량이 두 배로 늘었으며, 그러면서도 옵션마다 설명을 붙이던 symbol 방식보다 입력 토큰은 오히려 적게 든다. 모델의 실제 강점에 맞춰 질문의 형태를 다듬는 것만으로 성능이 크게 달라진다는, 프롬프트 설계의 일반 원리를 압축해 보여주는 결과다.

실무자가 참고할 만한 지점

샘플링 전략도 여러 가지가 준비돼 있다. choice는 전체 알파벳을 한 번에 묻고, bisect는 알파벳을 정렬한 뒤 '앞쪽인가 뒤쪽인가'를 이진 탐색처럼 좁혀가다 그룹이 작아지면 그 안에서 한 번 choice로 묻는다. 빔 서치도 쓸 수 있는데, 이때는 살아 있는 빔마다 스텝당 한 번씩 점수를 소모하며, 빔 폭이 1을 넘으면 온도·top_p·top_k가 더 이상 적용되지 않고 확률 순으로 빔을 정렬한다. 알파벳(무엇에 대한 분포인가)과 전략(분포를 어떻게 얻는가)이라는 두 축을 독립적으로 갈아끼울 수 있다는 점이 이 실험의 확장성을 만든다.

엔지니어링 측면에서도 참고할 대목이 있다. 전체 158개의 테스트가 모두 오프라인으로 돌아간다는 점이다. 생성 루프는 스크립트로 짠 가짜 클라이언트로, HTTP 계층은 httpx의 MockTransport로 대체해 API 키도 네트워크도 없이 검증한다. 실제로 API를 호출하는 부분은 벤치마크(bench) 기능으로 분리해 두었다. 비용이 큰 외부 의존성을 테스트 경계 밖으로 밀어내는, 재현 가능한 테스트 설계의 전형이다. jevchat은 그 자체로 쓸 만한 챗봇은 아니지만, 판정 모델과 생성 모델의 경계, 그리고 질문 방식이 결과를 바꾸는 방식을 손에 잡히게 보여준다는 점에서 들여다볼 가치가 있다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/kyle-pena-nlp/jevchat/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...