Inspectus: 대규모 언어 모델(LLM)을 위한 시각화 도구

Inspectus: 대규모 언어 모델을 위한 시각화 도구

Inspectus: 대규모 언어 모델(LLM)을 위한 시각화 도구

소개

대규모 언어 모델(LLM)은 인공지능 연구와 개발에서 중요한 역할을 하고 있습니다. 그러나 이러한 모델의 내부 동작 방식을 이해하는 것은 여전히 쉽지 않으며, 연구가 필요한 분야입니다.

Inspectus는 이러한 대규모 언어 모델의 동작 방식을 이해하기 위한 시도 중 하나로, 대규모 언어 모델(LLM)의 다양한 동작들을 시각화하고 분석할 수 있는 도구입니다. Jupyter 노트북에서 원활하게 작동하며, 직관적인 Python API를 제공합니다. Inspectus는 여러 가지 시각화 뷰를 제공하여 언어 모델의 행동에 대한 다양한 통찰을 제공합니다.

예를 들어, Attention Matrix는 토큰 간의 어텐션 점수(Attentiion Score)를 시각화하고, Query Token Heatmap과 Key Token Heatmap은 각각 선택된 Key 토큰과 Query 토큰 간의 어텐션 점수(Attention Score)를 보여줍니다.

Inspectus는 기존의 시각화 도구와 비교하여 몇 가지 독특한 기능을 제공합니다. BERTViz와 같은 다른 도구와 비교했을 때, Inspectus는 사용자가 선택한 토큰에 대한 더 세부적인 어텐션 점수에 대해서 시각화를 할 수 있습니다. 또한, Inspectus는 다양한 차원(레이어 및 헤드)에 대한 주의 점수를 합산하여 시각화할 수 있어, 모델의 내부 구조를 보다 명확하게 이해할 수 있습니다.

주요 구성 요소

  • Attention Matrix: 각 토큰이 처리 중 다른 토큰에 얼마나 주의(attention)를 기울이는지를 시각화합니다.

  • Query Token Heatmap: 선택된 Key 토큰과 각 Query들 간의 어텐션 점수의 합계를 보여줍니다.

  • Key Token Heatmap: 선택된 Query 토큰과 각 Key들 간의 어텐션 점수의 합계를 보여줍니다.

  • Dimension Heatmap: 각 차원(Layer 및 Head)에서 항목마다 어텐션 점수의 합을 정규화(normalize)하여 보여줍니다.

사용 방법

설치

pip install inspectus

기본 사용법


import inspectus

# attn: Attention map; 2-4D 텐서 또는 Huggingface transformers의 attention map
inspectus.attention(attn, tokens)

Huggingface 모델을 사용한 시각화 예시

from transformers import AutoTokenizer, GPT2LMHeadModel, AutoConfig
import torch
import inspectus

# 토크나이저 및 모델 초기화
context_length = 128
tokenizer = AutoTokenizer.from_pretrained("huggingface-course/code-search-net-tokenizer")
config = AutoConfig.from_pretrained("gpt2", vocab_size=len(tokenizer), n_ctx=context_length, bos_token_id=tokenizer.bos_token_id, eos_token_id=tokenizer.eos_token_id)
model = GPT2LMHeadModel(config)

# 입력 텍스트 토크나이징
text = 'The quick brown fox jumps over the lazy dog'
tokenized = tokenizer(text, return_tensors='pt', return_offsets_mapping=True)
input_ids = tokenized['input_ids']
tokens = [text[s: e] for s, e in tokenized['offset_mapping'][0]]

with torch.no_grad():
    res = model(input_ids=input_ids.to(model.device), output_attentions=True)

# Inspectus 라이브러리를 사용하여 attention map 시각화
inspectus.attention(res['attentions'], tokens)

커스텀 어텐션 맵

import numpy as np
import inspectus

# 쿼리와 키 토큰 간의 어텐션 값
attn = np.random.rand(3, 3)

# 어텐션 값 시각화
inspectus.attention(attn, ['a', 'b', 'c'], ['d', 'e', 'f'])

라이선스

이 프로젝트는 MIT License로 공개 및 배포되고 있습니다.

더 읽어보기

:github: Inspectus GitHub 저장소

Inspectus 문서 (WIP)

공식 문서는 아직 작업 중(WIP, Work In Progress)으로, GitHub 저장소에서 노트북 예시들을 참고해주세요.




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:kr:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:gift: 아래:arrow_lower_right:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck: