TechY
OpenAI's structured output 본문
최근에 openai 의 structured output 지원이 공개되었는데 기존에 지원하던 json mode보다 더 강력한 구조화 출력이 지원된다.
공개 문서를 읽어보니 structured output 을 만든 방법을 간단하게 써줬길래 잊어버리고 싶지 않아 간단하게 정리해본다.
1. 학습을 많이 시킴
- gpt-4o-2024-08-06 모델이 structured output 을 지원하는데, 복잡한 스키마를 이해하고 이를 기반으로 출력을 생성하게끔 학습을 많이 시켰다고 한다.
- 하지만 LLM은 태생적으로 non-deterministic 하기에 deterministic 한 engineering-based approach 를 추가로 사용했다.
2. Constrained decoding
- 우선 constrained decoding 은 출력 토큰 생성 단계에서 확률값을 마스킹해주는 방식으로 출력의 형태를 조절하는 것이다.
- 유저가 입력으로 준 schema에 맞게 constrained decoding 을 해야하기에 dynamic constrained decoding이 된다.
- 이 과정에서 context-free gramma (CFG)를 사용한다.
- json 도 특정 문법을 따르는 언어라고 할 수 있다. 유저로부터 schema 가 주어지면 CFG를 통해 grammar 를 계산한다. (규칙을 만드는 과정으로 임의의 스키마에 대한 문법 규칙을 학습한다고 생각하면 된다)
- 이걸 계산해놓으면, 어떤 문장이 나왔을 때, 미리 계산된 문법을 따르는지를 확인할 수 있으며, 따르지 않게 하는 다음 토큰을 리스트 . 업할 수도 있다. 이러한 토큰들의 확률값을 0으로 만들어준다.
- 처음 모델 스키마를 structured output 으로 OpenAI에게 등록하면 이걸 CFG를 통해 계산하는 과정이 소요되기 때문에, 첫 schema를 등록할 때에는 latency가 높아진다고 한다. 그 이후에는 캐싱되어 빨라진다고 함
'[간단 정리]' 카테고리의 다른 글
[간단 정리] model calibration 에 대해 알아보자 (3) (2) | 2021.11.22 |
---|---|
[간단 정리] model calibration 에 대해 알아보자 (2) (0) | 2021.11.06 |
[간단 정리] model calibration 에 대해 알아보자 (1) (0) | 2021.11.04 |
[간단 정리] Neural-Network 는 multi-collinearity 의 영향을 받지 않는가? (0) | 2021.08.19 |
[간단 정리] Kernel Method 메모 (0) | 2021.02.18 |