본문 바로가기
AI/NLP

[NLP] Captum 라이브러리로 언어 모델 해석

by didi0di 2023. 12. 1.
728x90

LLM, sLLM이 화두가 되며 최근 회사에서도 이러한 LLM을 기반으로 한 서비스 개발에 관심이 많다.

확실히 language Generation Task에서는 LLM 기반 모델의 성능이 확실히 뛰어나지만,

비용이나 자원 이슈 등 여러가지 사항 때문에 이러한 거대언어모델을 모든 서비스에 적용을 하기는 현실적으로 어려운 상황이다.

 

따라서 분류 같은 간단한 task에서는 여전히 BERT나 ElECTRA 같은 PLM(Pre-trained Language Model)을 fine-tuning해서 문제를 해결하는 경우도 아직 많이 있다.

 

이처럼 사전 학습된 PLM 모델을 내가 원하는 task를 수행하기 위해 fine-tuning을 한 경우에, 

모델이 잘 학습을 한 것인지? 어떤 부분을 보고 예측을 하는 건지? 모델 해석이 필요한 경우가 있다.

 

최근 광고성 문자(LMS)를 필터링하기 위해 PLM의 하나인 Ko-ELECTRA를 파인튜닝해서 이진 분류 문제를 해결해보려고 했는데,

모델이 어떤 부분을 보고 발송 가능 문자와 발송 불가능 문자를 구분하는지 해석을 해보고자 Captum 이라는 라이브러리를 이용해서 모델 해석을 해보았다.

 

https://captum.ai/

 

Captum · Model Interpretability for PyTorch

Model Interpretability for PyTorch

captum.ai

 

 

이미지 분류나 문장 분류에서 입력으로 사용된 원본 이미지/문장에서 활성화되는 부분을 시각화 하는 것은 모델의 이해를 위해 매우 중요한 작업이다. CAM(Class Activation Map), Grad-CAM 등 부터 근래에 발표된 Integrated Gradient 까지 pixel attribution method 들을 이용하는 것은 이러한 이유라고 볼 수 있다.

 

 페이스북이 개발한 Captum PyTorch로 구현된 NLP모델이나 컴퓨터 비전 모델의 예측 결과를 이해하도록 돕는 오픈소스 라이브러리다. 위에서 언급한 pixel attribution method 들을 적용하는 통일된 방법을 제공하기 때문에 pytorch로 구현된 모델이라면 쉽게 활용해 볼 수 있다. 

 

 

PyTorch 공식 홈페이지에서 Captum 관련 설명을 볼 수 있으며, Captum 라이브러리를 활용하여 예측 결과를 시각화하는 예제가 있다.

공식 Github에서 다양한 use case를 정리해둔 tutorial도 제공하고 있다.

 

- PyTorch 공식 홈페이지 Captum 예제 :  https://tutorials.pytorch.kr/recipes/recipes/Captum_Recipe.html

 

Captum을 사용하여 모델 해석하기

번역: 정재민 Captum을 사용하면 데이터 특징(features)이 모델의 예측 또는 뉴런 활성화에 미치는 영향을 이해하고, 모델의 동작 방식을 알 수 있습니다. 그리고 Integrated Gradients 와 Guided GradCam 과 같

tutorials.pytorch.kr

 

- Captum Github : https://github.com/pytorch/captum/tree/master

 

GitHub - pytorch/captum: Model interpretability and understanding for PyTorch

Model interpretability and understanding for PyTorch - GitHub - pytorch/captum: Model interpretability and understanding for PyTorch

github.com

 

- Tutorials: https://github.com/pytorch/captum/tree/master/tutorials

 

 

내가 주로 참고한 부분은 언어 모델 해석쪽.

 

 

 

electra에 captum을 적용하는 부분은 아래 깃헙의 electra_fine_tune_interpret_captum_ig.ipynb  코드를 참고 했다.

https://github.com/elsanns/xai-nlp-notebooks/tree/master

 

GitHub - elsanns/xai-nlp-notebooks

Contribute to elsanns/xai-nlp-notebooks development by creating an account on GitHub.

github.com

 

 

captum을 이용해서 attribution score를 구하면, 해당 언어 모델이 task를 수행하는데 (ex. 해당 클래스로 분류하는데) 어떤 token이 기여를 많이 했는지를 확인 할 수 있다.

 

또한  captum에서 제공하는 visualization 함수를 이용해 layer 별 혹은 모든 layer를 통합한 attribution score를 활용해

실제 문장의 token에 맵핑해서 결과를 시각화 할 수 있다.

 

from captum.attr import LayerIntegratedGradients, visualization

 

 

아래는 시각화 예시.

728x90

댓글