Gemma 형식 및 시스템 안내

명령 조정을 위한 형식 지정

명령 조정 (IT) 모델은 학습 및 추론 시점에 모든 명령 조정 예시에 추가 정보를 주석으로 추가하는 특정 형식 지정 도구로 학습됩니다. 형식 지정 도구의 목적은 다음 두 가지입니다.

  1. 대화에서 역할 표시(예: system, user, assistant)
  2. 대화, 특히 여러 차례의 대화에서 방향 전환

아래에는 Gemma에서 사용하는 제어 토큰과 그 사용 사례가 나와 있습니다. 제어 토큰은 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)과 인간 피드백 기반 강화 학습 (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 변형은 코드 인필 작업에 맞게 특별히 조정되었습니다.

특히 이러한 객체는 중간 채우기 (FIM) 코딩 태스크에 대한 모델 프롬프트를 구성하는 데 사용할 수 있는 네 가지 형식 지정 제어 토큰에 관해 학습됩니다.

컨텍스트 토큰
FIM 접두사 `<
FIM 접미사 `<
FIM 중간 `<
파일 구분자 `<

CodeGemma가 코드 필링을 실행할 수 있도록 FIM 토큰을 사용하여 커서 위치와 주변 컨텍스트를 정의합니다. 여러 파일 컨텍스트에는 파일 구분자 토큰을 사용합니다.

예 - 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 또는 파일 구분자 토큰을 구분 기호로 사용하여 스트리밍을 중지하고 결과적으로 코드가 완성되도록 합니다.