Gemma 형식 및 시스템 안내

명령 조정 형식 지정

명령 조정 (IT) 모델은 형식 지정자로 모든 명령 조정 예제에 추가 정보로 주석을 추가합니다. 학습 및 추론 시간이 필요합니다. 형식 지정 도구의 용도는 두 가지입니다.

  1. 대화에서 시스템, 사용자, 어시스턴트 역할을 지원합니다.
  2. 특히 멀티턴에서 대화의 턴 방식 설명 있습니다.

아래에서 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 또는 파일 구분자 토큰을 변환하여 스트리밍을 중지하고 코드를 완성할 수 있습니다.