명령 조정 형식 지정
명령 조정 (IT) 모델은 형식 지정자로 모든 명령 조정 예제에 추가 정보로 주석을 추가합니다. 학습 및 추론 시간이 필요합니다. 형식 지정 도구의 용도는 두 가지입니다.
- 대화에서 시스템, 사용자, 어시스턴트 역할을 지원합니다.
- 특히 멀티턴에서 대화의 턴 방식 설명 있습니다.
아래에서 Gemma에서 사용하는 제어 토큰과 그 사용 사례를 설명합니다. 참고 Google의 tokenizer에 맞게 예약되어 있습니다.
- 사용자 차례를 나타내는 토큰:
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)과 인간의 강화 학습 모두
모델이 시스템 명령으로 학습되지 않았습니다.
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 변이 코드 채우기 태스크에 맞게 특별히 조정됩니다.
특히 이들은 네 가지 형식 지정 제어 토큰에 대해 학습되며 FIM (fill-in-the-Middle) 코딩 작업을 위한 모델 프롬프트를 구성하는 데 사용됩니다.
컨텍스트 | 토큰 |
---|---|
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
끝에 공백이 있습니다.
접미사는 다음과 같습니다.
⏎
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 또는 파일 구분자 토큰을 변환하여 스트리밍을 중지하고 코드를 완성할 수 있습니다.