KT 에이블스쿨 : 딥러닝 심화 4일차 - PandasAI, ChatGPT 파인튜닝, 언어모델링(NLP), 허깅페이스
딥러닝 심화
24.04.19 (금)
어느새 딥러닝 마지막날 ,, ㅠ
ChatGPT - PandasAI를 실습할 유통 판매데이터
거의 모든 비즈니스는 아래의 3가지 데이터셋으로 이뤄짐
- 제화 : 회사가 제공하는 기업 데이터 (상품 마스터데이터)
- 고객 : 고객에 의해 생기는 고객 데이터 (고객 마스터데이터)
- 트랜젝션 데이터(transaction) : 고객과 회사의 상호작용으로 인해 생긴 데이터
-
ex) 제화 = 금융상품 / 요금제+스마트폰
고객 = 가입, 구매
트랜젝션 = 구매이력
ChatGPT - 파인튜닝
-
Data Analytics
데이터셋 엑셀파일을 올리면서, 질문하면 그래프 시각화, 상관관계 분석을 해줌
게다가 비즈니스 관점에서 해석해서 알려줌
질문이 구체적일수록 상세하게 답변해줌 = 데이터분석 상세 방법을 알아야함
자연어처리 NLP
자연어처리할때 !! 맥락 !!을 이해하는게 중요함
context ~~~!!! 단순 text가 아니라, context가 중요
- 기존의 NLP 는 RNN 기반
- 오랫동안 언어모델을 위한 주요한 접근 방식
- 단점 : 병렬처리 어려움, 장기 의존성 문제, 확장성 제한
- 언어모델이 전체적인 맥락을 파악하는게 어려웠음
- Transformer : 자연어처리는 이게 최고 (현재)
-
구글이 2017년에 만듬 (오픈AI가 2018년부터 시작)
- RNN 모델의 단점을 극복 : 특히 장기 의존성 문제 해결
- Transformer 덕분에 LLM이 발전하게 됨
- 구글이 만든 허깅페이스에서 다양한 transformer 모델, Pipeline 등을 공유
-
특징
- 이전 문장들을 잘 기억
- Attention score를 이용해 문맥상 집중해야할 단어를 잘 캐치 ⇒ 문맥을 파악하는데 탁월함
- Pipeline 함수
- raw 데이터를 주고 ⇒ 데이터 전처리 ⇒ 모델 사용 ⇒ 결과 후 처리까지 해줌
- Pipeline 함수를 쓰면 이 전체 과정을 알아서 처리해줌
- Transformer 실습
- Sentiment analysis : 문장의 긍정, 부정 분류
- Zero-shot 분류 : 학습되지 않은걸 유추해 분류
- Summarization : 요약
- Translation : 번역
- Text-generation : 몇글자 입력하면 이어서 문장을 생성함
AI 관련 공유 사이트
- 캐글 : 데이터셋 공유 사이트
- 깃허브 : 코드 소스
- 허깅페이스 : NLP, AI 모델 공유
허깅페이스
transformers 라이브러리와 모델 허브 제공
summarizer = pipeline(task = "summarization", model="ainize/kobart-news")
- 선택과정
- model > task 중 summarization
- laungage : korean
- 모델 섹션에서 sort : most download 로 모델 고름
- 그 중 실습에선 “kobart-news” 선택
https://huggingface.co/ |
https://huggingface.co/ainize/kobart-news |
특정 모델의 상세페이지 들어가면 예제랑, 미리 테스트할 수 있는 부분이 있음
- kobart-news의 모델 예제 코드는 전과정을 쪼갠것 - 파인튜닝 가능
- 파이프라인은 하나의 함수로 쉽게 쓸수있음. but, 파인튜닝 불가능
언어 모델링 절차
from transformers import PreTrainedTokenizerFast, BartForConditionalGeneration
tokenizer = PreTrainedTokenizerFast.from_pretrained("ainize/kobart-news")
model = BartForConditionalGeneration.from_pretrained("ainize/kobart-news")
- 토크나이저
- 문장, 이미지인 비정형 데이터를 정형화하기 위해서 토큰화해, 머신이 이해할수있도록 바꾸는 것
- 토큰화하는 방법은 우리가 설정 가능
- 한글자 단위, 문자단위, 형태소 단위, 부분단위 등
- 토큰 : 문장에서 의미있는 분석 단위
- 토큰나이징 : 문장을 의미있는 분석 단위로 쪼개는 것
- input_IDs : 토큰화된걸 숫자로 변환한 것 + 문자가 없는 구간은 0으로 패딩씌움
- Attention masks : 문자가 있는지 없는지 확인용
- 문자가 없는 구간 (=패딩이 씌인 0인 구간)은 0이고,
- 문자가 있는 곳은 1로 표시
- 토크나이저 : 로우 데이터(문장)을 의미있는 최소 분석단위(토큰)로 쪼개기하는 녀석
- 쉽게말하면 정수 인코딩 처럼 숫자(인덱스)로 바꿈
- 인코딩 : 입력 문장 → 토큰화
디코딩 : 출력 토큰 → 문장
- 모델 사용
- 1. 임베딩 벡터 (Embedding Vector)
- 토크나이저로 토큰을 인덱스화 했다면, 임베딩 벡터로 의미가 있는 숫자로 변환함
- 유사도를 파악해 의미 부여함
-
유사도를 어떻게 파악 ? 벡터를 사용함
Queen 퀸은 킹이랑 비슷한데, 여자인것.
⇒ 킹이 있는 벡터와 여자라는 벡터를 계산해서 퀸의 벡터자리를 계산함 토큰은 스칼라, 단일값임 (토큰 된 인덱스의 숫자는 의미가 없는 그냥 구분자역할임)
임베딩을 하면 토큰값을 의미있게 바꿈.토큰(스칼라)를 벡터화해서 1차원이됨
문장으로 합치면 2차원이됨
문장이 여러개로 차원을 이루면 3차원이됨 ( = 언어모델은 3차원 데이터셋으로 이뤄짐 )- 2. 트랜스포머
2. 모델을 사용하기 위해서, 입력 데이터 전처리와 옵션 지정
ex) input_text 등
3. 모델을 사용(predict)
4. 결과 후 처리
- 파이프라인은 위 4가지 절차를 하나로 묶어서 사용할 수 있게한 것.
- 파이프라인을 쓰면 쉽고 빠르게 모델을 사용할 수 있지만,
- 내 상황에 맞춰서 fine turning을 할 수는 없음
언어모델 Fine - Tuning
- 파인 튜닝 수행 절차
- 1. 사전 훈련된 모델 선택
- GPT, BERT는 파라미터 개수가 많아서, 모델이 무거움 = 파인튜닝이 어렵다
- 2. 데이터 준비 : 전처리, 텍스트 토큰화, re사이징
- 모델별 토큰방법이 다를수있기에, 세트로 불러와야함
- 3. 모델 수정 : 출력 레이어의 뉴런 수를 분류하려는 클래스의 수와 일치시킴
- 4. 추가 학습 : 미세조정을 위한 작은 학습률 사용
- 사전 훈련 과정에서 학습한 파라미터를 유지하면서, 새로운 학습에 맞춰 조정됨
Q) 강사님 fine tuning 사용하는 조건이 이미 학습된 모델이 있어야 한다고 하는거면
yolo도 pretrained 옵션이 있는데 그럼 이런 객체탐지 모델도 fine tuning이 가능한건가요?
A) 맞음. Yolo 의 파라미터로 pretrained = False하면 맨땅에 해딩하는 것,
pretrained = True 하면 fine tuning 하는것
댓글
댓글 쓰기