명령어 조정 형식 지정
명령어 조정 (IT) 모델은 학습 및 추론 시 모두 모든 명령어 조정 예시를 추가 정보로 주석 처리하는 특정 포맷터로 학습됩니다. 형식 지정기에는 두 가지 목적이 있습니다.
- 대화에서 시스템, 사용자, 어시스턴트 역할과 같은 역할을 나타냅니다.
- 특히 멀티턴 대화에서 대화의 차례를 구분합니다.
아래에서는 Gemma에서 사용하는 제어 토큰과 사용 사례를 지정합니다. 제어 토큰은 토큰라이저에서 예약되어 있으며 토큰라이저에만 적용됩니다.
- 사용자 차례를 나타내는 토큰:
user
- 모델 전환을 나타내는 토큰:
model
- 대화 차례의 시작을 나타내는 토큰:
<start_of_turn>
- 대화 턴의 끝을 나타내는 토큰:
<end_of_turn>
다음은 대화의 예입니다.
<start_of_turn>user
knock knock<end_of_turn>
<start_of_turn>model
who is there<end_of_turn>
<start_of_turn>user
Gemma<end_of_turn>
<start_of_turn>model
Gemma who?<end_of_turn>
토큰 "<end_of_turn>\n"
는 턴 구분자이고 프롬프트 접두사는 "<start_of_turn>model\n"
입니다. 즉, '크레이머의 법칙이란 무엇인가요?'와 같은 질문으로 모델에 프롬프트를 표시하려면 다음과 같이 모델에 입력해야 합니다.
"<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model"
자체 데이터로 사전 학습된 Gemma 모델을 미세 조정하려는 경우 학습 및 추론 사용 사례 간에 일관성이 있는 한 제어 토큰에 이러한 스키마를 사용할 수 있습니다.
시스템 안내
감독 기반 미세 조정 (SFT)과 인간 피드백 기반 강화 학습 (RLHF) 모두에서 모델은 시스템 안내로 학습되지 않았습니다. 따라서 Gemma와 관련된 유일한 형식 지정 토큰은 <start_of_turn>
, <end_of_turn>
, user
, model
입니다. 예를 들면 다음과 같습니다.
<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model
Cramer's Rule is ...<end_of_turn>
FIM 태스크 형식 지정
CodeGemma 2B 및 7B 변형은 코드 채우기 작업에 맞게 특별히 조정되었습니다.
특히, fill-in-the-middle (FIM) 코딩 태스크의 모델 프롬프트를 구성하는 데 사용할 수 있는 4가지 형식 지정 제어 토큰을 기반으로 학습됩니다.
컨텍스트 | 토큰 |
---|---|
FIM 접두사 | <|fim_prefix|> |
FIM 접미사 | <|fim_suffix|> |
FIM 중간 | <|fim_middle|> |
파일 구분자 | <|file_separator|> |
FIM 토큰을 사용하여 CodeGemma가 코드 채우기를 실행할 수 있도록 커서 위치와 주변 컨텍스트를 정의합니다. 다중 파일 컨텍스트에는 파일 구분자 토큰을 사용합니다.
예시 - FIM 프롬프트 구성
이 섹션에서는 Keras CodeGemma 빠른 시작의 예시를 재사용하여 FIM 작업의 프롬프트를 구성하는 방법을 보여줍니다.
다음 코드를 살펴보세요.
import |⏎ # Line 1
if __name__ == '__main__':⏎ # Line 2
sys.exit(0) # Line 3
|
는 코드를 완료해야 하는 커서의 위치를 나타냅니다. 커서 앞에 공백이 있고 1번과 2번 줄 끝에 캐리지 리턴이 있습니다.
그러면 접두사는 다음과 같습니다.
import
끝에 공백 1개가 추가됩니다.
접미사는 다음과 같습니다.
⏎
if __name__ == '__main__':⏎
sys.exit(0)
시작 부분에 새 줄이 있습니다.
프롬프트는 다음과 같이 구성해야 합니다.
<|fim_prefix|>import <|fim_suffix|>⏎
if __name == '__main__':⏎
sys.exit(0)<|fim_middle|>
참고:
- FIM 토큰과 접두사 및 접미사 사이에는 공백이 추가되어서는 안 됩니다.
- FIM 중간 토큰은 모델이 계속 채우도록 준비하기 위해 맨 끝에 있어야 합니다.
- 접두사 또는 접미사는 파일에서 현재 커서가 있는 위치 또는 모델에 제공할 컨텍스트의 양에 따라 비어 있을 수 있습니다.
모델 출력 이해
위 예시의 모델 응답은 다음과 같습니다.
<|fim_prefix|>import <|fim_suffix|>⏎
if __name__ == "__main__":\n sys.exit(0)<|fim_middle|>sys\n<|file_separator|>
모델은 입력 프롬프트를 반복하고 sys
를 코드 완성으로 제공합니다.
FIM 작업에 CodeGemma 모델을 사용하는 경우 응답 토큰을 스트리밍하고 FIM 또는 파일 구분자 토큰을 구분자로 사용하여 스트리밍을 중지하고 결과 코드 완성을 가져옵니다.