LIT를 사용하여 Keras에서 Gemma 모델 분석

생성형 AI에서 보기 Google Colab에서 실행 GitHub에서 소스 보기 Codelab에서 알아보기

소개

생성형 AI 제품은 비교적 최근에 개발되었으며 애플리케이션의 동작은 이전 소프트웨어 형태와 다를 수 있습니다 따라서 사용 중인 머신러닝 모델을 탐색하고, 모델의 동작 예를 살펴보고, 예상치 못한 결과를 조사하는 것이 중요합니다.

학습 해석 가능성 도구 (LIT; 웹사이트, GitHub)는 ML 모델을 디버깅하고 분석하여 ML 모델이 작동하는 이유와 방식을 이해할 수 있는 플랫폼입니다.

이 Codelab에서는 LIT를 사용하여 Google의 Gemma 모델을 최대한 활용하는 방법을 알아봅니다. 이 Codelab에서는 해석 가능성 기법인 시퀀스 현저도를 사용하여 다양한 프롬프트 엔지니어링 접근 방식을 분석하는 방법을 보여줍니다.

학습 목표:

  1. 서열 현저도와 모델 분석에서의 용도 이해
  2. 프롬프트 출력 및 시퀀스 현저도를 계산하도록 Gemma용 LIT 설정
  3. LM Salience 모듈을 통해 시퀀스 현저도를 사용하여 프롬프트 설계가 모델 출력에 미치는 영향 파악
  4. LIT에서 프롬프트 개선사항 가설을 테스트하고 그 영향을 확인합니다.

참고: 이 Codelab에서는 Gemma의 KerasNLP 구현과 백엔드에 TensorFlow v2를 사용합니다. 따라 할 때 GPU 커널을 사용하는 것이 좋습니다.

시퀀스 특성과 모델 분석에서의 용도

Gemma와 같은 텍스트-텍스트 생성 모델은 토큰화된 텍스트 형태의 입력 시퀀스를 취하고 전형적인 후속 입력 또는 입력에 대한 새 토큰을 생성합니다. 이 생성은 한 번에 하나의 토큰만 발생하며 모델이 중지 조건에 도달할 때까지 새로 생성된 각 토큰을 입력 및 이전 세대에 추가합니다 (루프에서). 모델이 시퀀스 끝 (EOS) 토큰을 생성하거나 사전 정의된 최대 길이에 도달하는 경우를 예로 들 수 있습니다.

현저성 메서드는 입력의 어떤 부분이 출력의 여러 부분에 대해 모델에 중요한지 알려주는 Explainable AI (XAI) 기술 클래스입니다. LIT는 입력 토큰 시퀀스가 예측 라벨에 미치는 영향을 설명하는 다양한 분류 작업에 대한 현저한 메서드를 지원합니다. 시퀀스 특징은 이러한 메서드를 텍스트 간 생성 모델에 일반화하고 이전 토큰이 생성된 토큰에 미치는 영향을 설명합니다.

여기서는 모델의 경사를 분석하고 앞의 각 토큰이 출력에 미치는 영향의 규모를 제공하는 시퀀스 현저성에 Grad L2 Norm 메서드를 사용합니다. 이 방법은 간단하고 효율적이며 분류 및 기타 설정에서 잘 작동하는 것으로 보상되었습니다. 현저도 점수가 클수록 영향력이 커집니다. 이 방법은 해석 가능성 연구 커뮤니티 전반에서 널리 알려져 있고 널리 사용되고 있기 때문에 LIT 내에서 사용됩니다.

고급 경사 기반 현저도 메서드에는 Grad ⋅ 입력통합 경사가 있습니다. LIMESHAP와 같은 절제 기반 메서드도 사용할 수 있습니다. 이러한 메서드는 더 강력하지만 컴퓨팅 비용이 훨씬 많이 들 수 있습니다. 다양한 현저성 방법에 관한 자세한 비교는 이 도움말을 참고하세요.

특징의 과학에 관한 자세한 내용은 Salience에 관해 알아볼 수 있는 이 대화형 입문용 자료에서 확인할 수 있습니다.

가져오기, 환경 및 기타 설정 코드

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
bigframes 0.21.0 requires scikit-learn>=1.2.2, but you have scikit-learn 1.0.2 which is incompatible.
google-colab 1.0.0 requires ipython==7.34.0, but you have ipython 8.14.0 which is incompatible.

무시할 수 있습니다.

LIT 및 Keras NLP 설치

이 Codelab에서는 keras (3) keras-nlp(0.8.0) 및 lit-nlp (1.1)의 최신 버전과 기본 모델을 다운로드할 Kaggle 계정이 필요합니다.

pip install -q -U lit-nlp
pip uninstall -y umap-learn
pip install -q -U keras-nlp
pip install -q -U keras

Kaggle 액세스

Kaggle에 로그인하려면 kaggle.json 사용자 인증 정보 파일을 ~/.kaggle/kaggle.json에 저장하거나 Colab 환경에서 다음을 실행하면 됩니다. 자세한 내용은 kagglehub 패키지 문서를 참고하세요.

import kagglehub

kagglehub.login()

Gemma의 라이선스 계약에도 동의해야 합니다.

Gemma용 LIT 설정

LIT 모델 설정

import os

os.environ["KERAS_BACKEND"] = "tensorflow"
import keras
import keras_nlp

# Run at half precision.
keras.config.set_floatx("bfloat16")
model_name = 'gemma_instruct_2b_en'
gemma_model = keras_nlp.models.GemmaCausalLM.from_preset(model_name)

다음 코드는 Gemma 모델에서 현저도를 지원하도록 LIT 래퍼를 초기화합니다. LIT 프레임워크는 이를 모델이라고 하지만 이 경우에는 위에서 로드한 동일한 기본 gemma_model의 다른 엔드포인트에 불과합니다. 이를 통해 LIT는 주문형으로 세대, 토큰화, 현저도를 계산할 수 있습니다.

from lit_nlp.examples.models import instrumented_keras_lms

batch_size = 1
max_sequence_length = 512
init_models = instrumented_keras_lms.initialize_model_group_for_salience
models = init_models(model_name, gemma_model,
                     batch_size=batch_size,
                     max_length=max_sequence_length)

LIT 데이터 세트 설정

Gemma는 텍스트 입력을 받아 텍스트 출력을 생성하는 텍스트 간 변환 생성 모델입니다. LIT의 모델은 데이터 세트가 생성을 지원하기 위해 다음 필드를 제공한다고 가정합니다.

  • prompt: KerasGenerationModel에 대한 입력입니다.
  • target: '정답' (골드) 답변 또는 모델에서 사전 생성된 응답과 같은 선택적 타겟 시퀀스입니다.

LIT에는 다음과 같은 몇 가지 다른 소스의 예와 함께 작은 sample_prompts 집합이 포함됩니다.

  • [GSM8K][GSM8K]: 퓨샷 예제를 사용해 초등학교 수학 문제를 해결합니다.
  • [Gigaword Benchmark][gigaword]: 짧은 기사 모음의 헤드라인이 생성됩니다.
  • [헌법 프롬프트][constitutional-prompting]: 가이드라인/경계선과 함께 객체를 사용하는 방법에 관한 새로운 아이디어 생성

또한 prompt 필드 및 선택적으로 target 필드가 있는 레코드가 포함된 .jsonl 파일([example][jsonl-example]) 또는 LIT의 Dataset API를 사용하여 모든 형식의 자체 데이터를 쉽게 로드할 수 있습니다.

아래 셀을 실행하여 샘플 프롬프트를 로드합니다.

from lit_nlp.examples.datasets import lm as lm_data

datasets = {
  'sample_prompts': lm_data.PromptExamples(
      lm_data.PromptExamples.SAMPLE_DATA_PATH
  ),
}

LIT UI 설정

LIT는 모델 동작의 인간 참여형(Human-In-The-Loop) 평가 및 프로빙을 지원하는 대화형 모델 이해 도구입니다. LIT UI는 다음을 가능하게 하여 이러한 상호작용을 용이하게 합니다.

  • 데이터 세트 및 모델 출력을 실시간으로 시각화,
  • 현저도 방법을 실행하여 모델 동작을 유도하는 입력 토큰 이해
  • 반사실적을 만들어 가설을 검증합니다.

LIT는 동일한 인터페이스 내에서 이 모든 작업을 지원하여 서로 다른 도구 간에 전환할 때 발생하는 마찰을 줄입니다. 이는 특히 이 Codelab의 후반부에서 집중적으로 살펴볼 프롬프트 엔지니어링과 같은 작업에 유용합니다.

이 UI 레이아웃은 다른 생성형 언어 모델에 사용할 수 있습니다. 여기 나열된 기능 이외의 기능에 관심이 있다면 여기에서 전체 목록을 확인할 수 있습니다.

from lit_nlp.api import layout
modules = layout.LitModuleName

LM_SALIENCE_LAYOUT = layout.LitCanonicalLayout(
    left={
        'Data Table': [modules.DataTableModule],
        'Datapoint Editor': [modules.DatapointEditorModule],
    },
    upper={  # if 'lower' not specified, this fills the right side
        'Salience': [modules.LMSalienceModule],
    },
    layoutSettings=layout.LayoutSettings(leftWidth=40),
    description='Custom layout for language model salience.',
)

이 셀은 LIT 서버를 초기화합니다. 샘플 프롬프트에서 모델을 실행하고 결과를 캐시하므로 몇 초 정도 걸릴 수 있습니다.

from lit_nlp import notebook as lit_notebook

lit_widget = lit_notebook.LitWidget(
    models=models,
    datasets=datasets,
    layouts={'default': LM_SALIENCE_LAYOUT},
    default_layout='default',
)

이제 UI를 표시할 수 있습니다.

lit_widget.render(height=800)
<IPython.core.display.Javascript object>

새 탭에서 LIT를 전체 페이지로 열 수도 있습니다. 이 셀을 실행하고 표시되는 링크를 클릭합니다.

lit_widget.render(open_in_new_tab=True)
<IPython.core.display.Javascript object>

LIT에서 젬마에 대한 퓨샷 프롬프트 분석

오늘날 프롬프팅은 과학만큼이나 예술이며, LIT는 Gemma와 같은 대규모 언어 모델의 프롬프트를 경험적으로 개선하는 데 도움이 될 수 있습니다. 앞으로 LIT를 사용하여 Gemma의 행동을 탐색하고 잠재적인 문제를 예측하며 안전성을 개선하는 방법에 관한 예를 확인할 수 있습니다.

복잡한 프롬프트에서 오류 식별

고품질 LLM 기반 프로토타입과 애플리케이션에 필요한 가장 중요한 프롬프팅 기법 중 두 가지는 퓨샷 프롬프팅 (프롬프트에서 원하는 동작 예시 포함)과 생각의 사슬 (LLM의 최종 출력 전의 설명 또는 추론 형식 포함)입니다. 하지만 효과적인 프롬프트를 만들기란 어려운 경우가 많습니다.

취향에 따라 음식을 좋아하는지 평가하도록 도와주는 예를 생각해 보세요. 초기 프로토타입 체인 프롬프트 템플릿은 다음과 같습니다.

def analyze_menu_item_template(food_likes, food_dislikes, menu_item):
  return f"""Analyze a menu item in a restaurant.

## For example:

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Onion soup
Analysis: it has cooked onions in it, which you don't like.
Recommendation: You have to try it.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Baguette maison au levain
Analysis: Home-made leaven bread in france is usually great
Recommendation: Likely good.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Macaron in france
Analysis: Sweet with many kinds of flavours
Recommendation: You have to try it.

## Now analyze one more example:

Taste-likes: {food_likes}
Taste-dislikes: {food_dislikes}
Suggestion: {menu_item}
Analysis:"""

이 메시지에서 문제를 발견하셨나요? LIT를 사용하면 LM Salience 모듈을 사용하여 프롬프트를 검토할 수 있습니다.

디버깅에 시퀀스 현저성 사용

이 모듈에서는 모델이 답을 생성할 때 확인하는 프롬프트의 일부를 강조 표시합니다. 현저도는 가능한 가장 작은 수준 (즉, 각 입력 토큰에 대해)으로 계산되지만, LIT는 토큰 특성이 행, 문장 또는 단어와 같이 보다 해석 가능한 큰 스팬으로 집계될 수 있습니다. 현저도와 이를 사용하여 의도하지 않은 편향을 식별하는 방법에 관한 자세한 내용은 Saliency Explorable에서 확인할 수 있습니다.

프롬프트에 프롬프트 템플릿 변수의 새로운 예시 입력을 제공하는 것으로 시작해 보겠습니다.

food_likes = """Cheese"""
food_dislikes = """Can't eat eggs"""
menu_item = """Quiche Lorraine"""

prompt = analyze_menu_item_template(food_likes, food_dislikes, menu_item)
print(prompt)

fewshot_mistake_example = {'prompt': prompt}  # you'll use this below
Analyze a menu item in a restaurant.

## For example:

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Onion soup
Analysis: it has cooked onions in it, which you don't like.
Recommendation: You have to try it.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Baguette maison au levain
Analysis: Home-made leaven bread in france is usually great
Recommendation: Likely good.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Macaron in france
Analysis: Sweet with many kinds of flavours
Recommendation: You have to try it.

## Now analyze one more example:

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis:

위의 셀이나 별도의 탭에서 LIT UI를 연 경우 LIT의 데이터 포인트 편집기를 사용하여 이 프롬프트를 추가할 수 있습니다.

1_Datapoint_editor.png

또 다른 방법은 원하는 메시지로 위젯을 직접 다시 렌더링하는 것입니다.

lit_widget.render(data=[fewshot_mistake_example])
<IPython.core.display.Javascript object>

놀라운 모델 완성도에 주목하세요.

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis: A savoury tart with cheese and eggs
Recommendation: You might not like it, but it's worth trying.

모델이 먹을 수 없다고 분명히 밝힌 것을 먹으라고 제안하는 이유는 무엇인가요?

시퀀스 현저성은 퓨샷 예제에 있는 근본적인 문제를 강조하는 데 도움이 될 수 있습니다. 첫 번째 예에서 분석 섹션 it has cooked onions in it, which you don't like의 사고 체인 추론은 최종 권장사항 You have to try it와 일치하지 않습니다.

LM Salience 모듈에서 '문장'을 선택한 후 추천 행을 선택합니다. 이제 UI가 다음과 같이 표시됩니다.

3_few_shots_mistake..png

이제 첫 번째 예의 '권장사항'을 Avoid로 수정하고 다시 시도해 보겠습니다. LIT에는 샘플 프롬프트에 이 예가 미리 로드되어 있으므로 이 작은 유틸리티 함수를 사용하여 가져올 수 있습니다.

def get_fewshot_example(source: str) -> str:
  for example in datasets['sample_prompts'].examples:
    if example['source'] == source:
      return example['prompt']
  raise ValueError(f'Source "{source}" not found in the dataset.')
lit_widget.render(data=[{'prompt': get_fewshot_example('fewshot-fixed')}])
<IPython.core.display.Javascript object>

이제 모델 완성은 다음과 같습니다.

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis: This dish contains eggs and cheese, which you don't like.
Recommendation: Avoid.

여기서 얻어야 할 중요한 교훈은 초기 프로토타입을 통해 미리 생각하지 못할 위험을 파악하는 데 도움이 되고, 오류가 발생하기 쉬운 언어 모델의 특성으로 인해 오류를 사전에 설계해야 한다는 것입니다. 이에 대한 자세한 내용은 AI를 사용한 설계에 관한 People + AI 가이드북에서 확인할 수 있습니다.

수정된 퓨샷 프롬프트가 더 낫지만 여전히 옳지 않습니다. 사용자에게 계란을 피하라고 올바르게 안내했지만 이유가 옳지 않습니다. 실제로 사용자가 계란을 먹을 수 없다고 했는데 계란을 좋아하지 않는다고 합니다. 다음 섹션에서는 이러한 개선 방법을 알아봅니다.

가설을 테스트하여 모델 동작 개선

LIT를 사용하면 동일한 인터페이스 내에서 프롬프트의 변경사항을 테스트할 수 있습니다. 이 경우 구성을 추가하여 모델의 동작을 개선해 봅니다. 헌법이란 모델 생성을 안내하는 원칙이 포함된 설계 프롬프트를 말합니다 최근의 방법에서는 헌법 원칙의 대화형 파생도 가능합니다.

이 아이디어를 바탕으로 프롬프트를 더욱 개선해 보겠습니다. 프롬프트 상단에 생성 원칙에 관한 섹션을 추가합니다. 이 섹션은 이제 다음과 같이 시작됩니다.

Analyze a menu item in a restaurant.

* The analysis should be brief and to the point.
* The analysis and recommendation should both be clear about the suitability for someone with a specified dietary restriction.

## For example:

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Onion soup
Analysis: it has cooked onions in it, which you don't like.
Recommendation: Avoid.

...

lit_widget.render(data=[{'prompt': get_fewshot_example('fewshot-constitution')}])
<IPython.core.display.Javascript object>

이 업데이트를 통해 예를 다시 실행하면 매우 다른 출력이 표시됩니다.

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis: This dish containts eggs, which you can't eat.
Recommendation: Not suitable for you.

그런 다음 프롬프트 현저도를 재검토하여 이러한 변화가 일어나는 이유를 파악할 수 있습니다.

3_few_shot_constitution.png

권장사항이 훨씬 더 안전합니다. 또한 '나에게 적합하지 않음'은 분석 (일명 연쇄적 사고)과 함께 식이 제한에 따라 적합성을 명확하게 명시하는 원칙의 영향을 받습니다. 이렇게 하면 올바른 이유로 출력되고 있다는 확신을 더할 수 있습니다.

모델 탐색 및 탐색에 기술 이외의 팀 포함

해석 가능성은 XAI, 정책, 법률 등에서 전문성을 아우르는 팀의 노력이 필요합니다.

전통적으로 초기 개발 단계의 모델과 상호작용하려면 상당한 기술적 전문성이 필요했기 때문에 일부 공동작업자가 모델에 액세스하고 조사하기가 더 어려웠습니다. 지금까지 이러한 팀이 초기 프로토타입 제작 단계에 참여할 수 있는 도구는 존재하지 않았습니다.

LIT를 통해 이 패러다임이 변할 수 있기를 바랍니다. 이 Codelab에서 살펴본 것처럼 LIT의 시각적 매체와 상호작용 기능을 통해 현저도를 검사하고 예시를 탐색하면 다양한 이해관계자가 결과를 공유하고 전달하는 데 도움이 될 수 있습니다. 이를 통해 모델 탐색, 프로빙, 디버깅을 위해 더 다양한 팀원을 참여시킬 수 있습니다. 이러한 기술적 방법을 접하면 모델의 작동 방식에 대한 이해도를 높일 수 있습니다. 또한 초기 모델 테스트에 대한 보다 다양한 전문 지식은 개선할 수 있는 원치 않는 결과를 파악하는 데 도움이 될 수 있습니다.

요약

요약하면 다음과 같습니다.

  • LIT UI는 대화형 모델 실행을 위한 인터페이스를 제공하므로 사용자가 직접 출력을 생성하고 '만약' 시나리오를 테스트할 수 있습니다. 이는 다양한 프롬프트 변형을 테스트하는 데 특히 유용합니다.
  • LM Salience 모듈은 현저도를 시각적으로 표현하고 제어 가능한 데이터 세부사항을 제공하므로 모델 중심의 구성 (예: 토큰) 대신 인간 중심의 구성 (예: 문장 및 단어)에 대해 커뮤니케이션할 수 있습니다.

모델 평가에서 문제가 있는 예시를 발견하면 디버깅을 위해 LIT로 가져옵니다. 모델링 작업과 논리적으로 관련되어 있다고 생각할 수 있는 가장 합리적인 콘텐츠 단위를 분석하는 것부터 시작하고, 시각화를 사용하여 모델이 프롬프트 콘텐츠에 올바르게 또는 잘못 적용되는 위치를 확인한 다음, 표시되는 잘못된 동작을 더 자세히 설명하기 위해 콘텐츠의 더 작은 단위까지 상세히 살펴볼 수 있습니다.

마지막으로 Lit는 지속적으로 발전하고 있습니다. 여기에서 기능을 자세히 알아보고 의견을 공유해 주세요.

부록: LIT에서 시퀀스 효과를 계산하는 방법

LIT는 다단계 프로세스에서 시퀀스 현저도를 계산합니다.

  1. 입력 문자열 (프롬프트와 모델의 세대 또는 '골드' 타겟 시퀀스)이 주어지면 모델 입력을 위해 토큰화합니다.
  2. 입력 토큰을 한 칸 왼쪽으로 이동하여 '타겟' 시퀀스를 계산합니다.
  3. 임베딩을 추출하고 생성 시퀀스와 '타겟' 시퀀스 간의 토큰별 손실을 계산합니다.
  4. 손실을 마스킹하여 설명하려는 토큰을 분리합니다.
  5. tf.GradientTape.gradient() 함수를 사용하여 마스킹된 손실과 관련하여 입력 임베딩의 경사를 계산합니다.
  6. 경사를 처리하여 각 입력 토큰에 단일 점수를 제공합니다. 예를 들어 각 위치에서 기울기의 L2 norm을 구합니다.

부록: 프로그래매틱 방식으로 Salience 계산

LIT 도구가 내부적으로 실행되는 위와 동일한 단계를 사용하여 Python에서 직접 중요도 점수를 계산할 수 있습니다. 다음 3단계로 구성됩니다.

  1. 예시를 준비하고 모델 tokenizer를 실행합니다.
  2. 설명할 (예측된) 토큰을 선택하는 마스크를 준비합니다.
  3. 현저함 래퍼를 호출합니다.

LIT의 입력 예시 만들기

{'prompt': 'Keras is a',
 'target': ' deep learning library for Python that provides a wide range of tools and functionalities for building, training, and evaluating deep learning models.\n\n**'}

호출 규칙 관련 참고사항: tokenizer와 salience 래퍼 모두 LIT의 모델 API를 사용합니다. 여기서 .predict() 함수는 예시 목록 (dicts)을 가져와서 응답 생성기 (dicts)를 반환합니다. 이 방법은 큰 데이터 세트나 속도가 느린 모델로 작업할 때 훨씬 더 유연하지만, 하나의 예시에 대해서만 예측을 하려면 지금은 예를 list(model.predict([example])[0]와 같이 래핑해야 합니다.

설명 대상을 선택할 수 있도록 토큰을 가져옵니다.

array(['<bos>', 'K', 'eras', '▁is', '▁a', '▁deep', '▁learning',
       '▁library', '▁for', '▁Python', '▁that', '▁provides', '▁a', '▁wide',
       '▁range', '▁of', '▁tools', '▁and', '▁functionalities', '▁for',
       '▁building', ',', '▁training', ',', '▁and', '▁evaluating', '▁deep',
       '▁learning', '▁models', '.', '\n\n', '**'], dtype='<U16')

현저도를 계산하려면 설명할 (예측된) 토큰을 지정하는 대상 마스크를 만들어야 합니다. 대상 마스크는 토큰과 길이가 같은 배열이며 설명하려는 토큰의 위치에 1이 있습니다. ▁training▁evaluating를 타겟으로 사용해 보겠습니다.

타겟 마스크 준비

{'prompt': 'Keras is a',
 'target': ' deep learning library for Python that provides a wide range of tools and functionalities for building, training, and evaluating deep learning models.\n\n**',
 'target_mask': array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0.],
       dtype=float32)}

현저도 모델 호출

{'grad_l2': array([45.75, 36.75, 61, 5.40625, 4.09375, 5.625, 6.46875, 7.3125, 3.375,
        5.03125, 3.23438, 4.5625, 2.375, 3.40625, 2.75, 1.97656, 3.95312,
        3.42188, 14.125, 4.53125, 11.375, 12.625, 18.5, 4.5625, 6.5, 0, 0,
        0, 0, 0, 0, 0], dtype=bfloat16),
 'grad_dot_input': array([-4.03125, 3.04688, -7.03125, -0.800781, 0.769531, -0.679688,
        -0.304688, 2.04688, 0.275391, -1.25781, -0.376953, -0.0664062,
        -0.0405273, -0.357422, 0.355469, -0.145508, -0.333984, 0.0181885,
        -5.0625, 0.235352, -0.470703, 2.25, 3.90625, -0.199219, 0.929688,
        0, 0, 0, 0, 0, 0, 0], dtype=bfloat16),
 'tokens': array(['<bos>', 'K', 'eras', '▁is', '▁a', '▁deep', '▁learning',
        '▁library', '▁for', '▁Python', '▁that', '▁provides', '▁a', '▁wide',
        '▁range', '▁of', '▁tools', '▁and', '▁functionalities', '▁for',
        '▁building', ',', '▁training', ',', '▁and', '▁evaluating', '▁deep',
        '▁learning', '▁models', '.', '\n\n', '**'], dtype='<U16')}

이제 됐습니다. grad_l2grad_dot_input 필드의 점수는 tokens에 맞춰 정렬되며 LIT UI에 표시되는 것과 동일합니다.

마지막 몇 개 점수는 0입니다. 모델이 왼쪽에서 오른쪽으로 읽는 언어 모델이므로 타겟 스팬의 오른쪽에 있는 토큰은 예측에 영향을 미치지 않습니다.