[무료다운로드] 생성형 AI 코딩으로 프로그램 만들어보기
BIM 칼럼니스트 강태욱의 이슈 & 토크
이번 호에서는 트랜스포머(transformer) 기반 생성형 AI 모델로 다국어 번역기, 문장 분류, 이미지 설명 텍스트 생성 프로그램의 개발 방법을 간략히 살펴본다. 트랜스포머는 텍스트, 이미지 등 데이터를 숫자로 표현한 토큰으로 인코딩한 후, 목표 라벨 데이터 결과와 차이가 적은 방향으로 가중치인 어텐션(attension) 벡터를 갱신하여 학습 모델을 만드는 기술이다.
■ 강태욱
건설환경 공학을 전공하였고 소프트웨어 공학을 융합하여 세상이 돌아가는 원리를 분석하거나 성찰하기를 좋아한다. 건설과 소프트웨어 공학의 조화로운 융합을 추구하고 있다. 팟캐스트 방송을 통해 이와 관련된 작은 메시지를 만들어 나가고 있다. 현재 한국건설기술연구원에서 BIM/GIS/FM/BEMS/역설계 등과 관련해 연구를 하고 있으며, 연구위원으로 근무하고 있다.
이메일 | laputa99999@gmail.com
페이스북 | www.facebook.com/laputa999
홈페이지 | https://dxbim.blogspot.com
팟캐스트 | http://www.facebook.com/groups/digestpodcast
트랜스포머는 현재 문장 성격 및 특징 분류, 다국어 번역, 비전 이미지 설명 및 생성, 음성인식, Voice to Text, 음악 작곡, 글 분류, 글 자동 요약 등 다양한 영역에서 사용된다. 이번 호에서는 관련 기능을 트랜스포머로 간단히 구현해 본다.
그림 1. 트랜스포머 개념 및 아키텍처
트랜스포머의 이론적 개념 등은 다음의 링크를 참고한다.
머신러닝 딥러닝 신경망 개념, 종류 및 개발 : https://daddynkidsmakers.blogspot.com/2017/02/blog-post_24.html
어텐션 기반 트랜스포머 딥러닝 모델 이해, 활용 사례 및 파이토치(Pytorch)를 통한 간단한 사용방법 소개 : https://daddynkidsmakers.blogspot.com/2021/10/blog-post.html
간단한 트랜스포머 동작 원리와 파이토치 기반 비전 트랜스포머 ViT 소개 : https://daddynkidsmakers.blogspot.com/2023/02/pytorch-vit.html
오디오, 영상, 텍스트, 센서, 3D깊이맵 멀티모달 딥러닝 모델 페이스북 이미지바인드(imagebind) 설치 및 사용기 : https://daddynkidsmakers.blogspot.com/2023/05/imagebind.html
개발 준비
파이썬(Python), 쿠다(CUDA) 등이 설치되어 있다는 가정 하에, 다음 명령어를 이용해 관련 패키지를 설치한다.
pip install transfomers sentencepiece
간단한 텍스트 생성형 AI 개발
다음과 같이 트랜스포머 모델에서 사전학습된 distilgpt2를 사용해 간단한 텍스트 생성형 AI 코드를 개발해 본다.
from transformers import AutoTokenizer, AutoModelWithLMHead
tokenizer = AutoTokenizer.from_pretrained("distilgpt2")
model = AutoModelWithLMHead.from_pretrained("distilgpt2")
input_ids = tokenizer.encode("I like gpt because it's", return_tensors='pt')
greedy_output = model.generate(input_ids, max_length=12)
print(tokenizer.decode(greedy_output[0], skip_special_tokens=True))
실행 결과 <그림 2>와 같이 ‘I like gpt because it's’ 이후 문장을 자연스럽게 생성한다.
그림 2
텍스트의 빈칸 단어 예측
다음은 MLM(Mask Language Model) 방식으로 학습된 모델을 이용해, [MASK] 토큰으로 정의된 단어를 문장 맥락을 고려해 예측하는 코드이다.
from transformers import pipeline
unmasker = pipeline('fill-mask', model='albert-base-v2')
unmasker("mlm and nsp is the [MASK] task of bert.")
결과는 <그림 3>과 같다. 빈칸의 단어가 잘 예측된 것을 확인할 수 있다.
그림 3
이미지 설명 텍스트 생성
이제 주어진 이미지를 설명하는 텍스트를 생성해 본다. 목표는 입력 이미지에 대해 두 마리의 고양이가 누워있음을 표현하는 텍스트를 얻는 것이다.
그림 4
■ 자세한 기사 내용은 PDF로 제공됩니다.
작성일 : 2024-01-04