NVIDIA LogitsProcessorZoo: 모듈러 로짓 프로세서를 사용한 언어 모델 생성 제어
언어 모델에서 로짓이란 무엇인가?
로짓은 언어 모델이 어휘의 각 토큰에 대해 생성하는 원시적이며 정규화되지 않은 점수로, 소프트맥스 함수를 통해 확률로 변환되어 다음 토큰 선택을 안내합니다.
생성 과정은 다음과 같이 작동합니다: 모델은 각 토큰에 대한 로짓을 출력하고; 소프트맥스를 적용하면 확률 분포로 변환되며; 샘플링 또는 argmax가 다음 토큰을 선택합니다. 🤗 Transformers 라이브러리의 generate() 메서드가 이러한 단계를 자동으로 처리합니다.
왜 로짓을 처리해야 하나?
로짓을 처리하면 개발자는 토큰 선택 전에 확률 분포를 수정하여 제약을 적용하고, 과도한 일반화를 피하며, 특정 작업 요구사항에 모델 출력을 맞출 수 있습니다.
원시 로짓은 필요한 제약이 부족할 수 있으며, 일반적인 응답을 생성하거나, 길이 제한, 문구 포함, 다중 선택 형식과 같은 작업과 맞지 않을 수 있습니다.
NVIDIA's LogitsProcessorZoo
NVIDIA's LogitsProcessorZoo는 Hugging Face Transformers와 호환되는 모듈러 로짓 프로세서의 모음으로, 시퀀스 길이 제어, 프롬프트 인용, 강제 문구 포함, 다중 선택 답변 선택을 가능하게 합니다.
이 라이브러리는 pip install logits-processor-zoo를 통해 설치할 수 있으며, LogitsProcessorList를 통해 generate() 메서드와 함께 작동합니다.
GenLengthLogitsProcessor
GenLengthLogitsProcessor는 엔드‑오브‑시퀀스(EOS) 토큰의 가능성을 조정하여 생성된 시퀀스의 길이를 제어합니다.
부스트 팩터를 증가시키면 모델이 더 빨리 EOS를 내보내 shorter outputs를 생성할 가능성이 높아지고, 감소시키거나 음수 값을 사용하면 EOS 생성을 억제하여 longer outputs를 생성합니다. 이 프로세서는 중지하기 전에 문장을 완료하도록 구성할 수도 있습니다.
게시물의 예시 사용:
[GenLengthLogitsProcessor(runner.tokenizer, boost_factor=0.1, p=2, complete_sentences=True)]
코드는 짧은 이야기를 생성하며,
[GenLengthLogitsProcessor(runner.tokenizer, boost_factor=-10.0, p=0, complete_sentences=False)]
코드는 더 긴 이어짐을 생성합니다.
CiteFromPromptLogitsProcessor
CiteFromPromptLogitsProcessor는 프롬프트에 나타나는 토큰을 증가 또는 감소시켜 모델이 입력을 정확히 반영하는 콘텐츠를 생성하도록 유도합니다.
이는 문단 기반 질문 답변이나 특정 세부 사항을 포함한 요약과 같은 작업에 유용합니다.
예시 사용:
[CiteFromPromptLogitsProcessor(runner.tokenizer, example_prompts, boost_factor=5.0)]
사용자 리뷰 프롬프트와 함께 사용하면 가격에 대한 리뷰의 의견을 반복하는 응답이 생성됩니다.
ForceLastPhraseLogitsProcessor
ForceLastPhraseLogitsProcessor는 모델이 출력을 마치기 전에 사용자가 지정한 문구를 포함하도록 강제합니다.
이는 인용, 보고서 또는 특정 문자열로 끝나야 하는 구조화된 출력의 형식을 일관되게 유지하는 데 도움이 됩니다.
예시 사용:
[ForceLastPhraseLogitsProcessor(phrase, runner.tokenizer, batch_size)]
phrase가 "\n\nReferences:"로 설정되면 참조 블록이 추가되고, "\n\nThanks for trying our RAG application!"로 설정되면 마무리 노트가 추가됩니다.
MultipleChoiceLogitsProcessor
MultipleChoiceLogitsProcessor는 다중 선택 질문에 대해 제공된 선택지 중 정확히 하나만 선택하도록 모델을 안내하고, 다른 모든 토큰을 억제합니다.
이는 출력이 엄격한 답변 형식에 맞도록 보장하며, 퀴즈, 설문 조사, 의사 결정 시스템에 유용합니다.
예시 사용:
MultipleChoiceLogitsProcessor(
runner.tokenizer,
choices=["0", "1", "2", "3"],
delimiter=\n\n" .
)
전화 기능에 대해 묻는 프롬프트와 함께 사용하면 선택된 옵션만 반환되며, 예를 들어 "1)"와 같습니다.
마무리
로짓 프로세서는 언어 모델 출력을 효과적으로 제어할 수 있는 유연성을 제공하여, 정확성, 제약 준수, 또는 작업별 동작이 중요한 시나리오에서 매우 유용합니다.
추가 탐색을 위한 리소스에는 Transformers 생성 가이드, 생성 전략 문서, LogitsProcessor API 참조, 그리고 예시와 사용 사례가 포함된 NVIDIA LogitsProcessorZoo 저장소가 있습니다.
이러한 도구를 사용하면 개발자는 정확한 생성 요구 사항을 충족하도록 AI 워크플로를 개선할 수 있습니다.