[deep learning] 딥러닝 3 : 언어모델 활용 & Fine-tuning

Hyeon·2024년 4월 20일

에이블스쿨

목록 보기
5/11

언어모델 이해

NLP

Natural Language Processing
인간 언어와 관련된 모든 것 이해하는데 초점을 맞춘 언어학 및 기계 학습 분야
자연어의 목표 : 맥락(context) 파악

  • 기존의 NLP : RNN 기반
    문장이 길수록 앞 단어 정보를 잊어버리는 문제 존재 (장기 의존성 문제)
    병렬 처리가 어려움

Transformer

기존 RNN 모델 단점 극복
이전 문장들을 잘 기억
문맥상 집중해야할 단어를 잘 캐치 (맥락 파악 좋음)

attention score을 통해서 문맥 단어 캐치
-> 맥락 파악 우수

Hugging face
: 라이브러리와 모델을 제공하는 플랫폼
: 자연어 처리(NLP) 및 인공 지능(AI) 분야에서 가장 인기 있는 오픈 소스 라이브러리와 모델을 제공하는 플랫폼

모델 사용법
1.계정생성하기
https://huggingface.co/
2.

  • 모델 확인
  • summarization 클릭

  • kobart-news 클릭하기( 신문기사 문서요약 텍스트)
    : python code로 활용방법코드 복붙필요
#python 활용 코드

from transformers import PreTrainedTokenizerFast, BartForConditionalGeneration
#  Load Model and Tokenize
tokenizer = PreTrainedTokenizerFast.from_pretrained("ainize/kobart-news")
model = BartForConditionalGeneration.from_pretrained("ainize/kobart-news")
# Encode Input Text
input_text = '국내 전반적인 경기침체로 상가 건물주의 수익도 전국적인 감소세를 보이고 있는 것으로 나타났다. 수익형 부동산 연구개발기업 상가정보연구소는 한국감정원 통계를 분석한 결과 전국 중대형 상가 순영업소득(부동산에서 발생하는 임대수입, 기타수입에서 제반 경비를 공제한 순소득)이 1분기 ㎡당 3만4200원에서 3분기 2만5800원으로 감소했다고 17일 밝혔다. 수도권, 세종시, 지방광역시에서 순영업소득이 가장 많이 감소한 지역은 3분기 1만3100원을 기록한 울산으로, 1분기 1만9100원 대비 31.4% 감소했다. 이어 대구(-27.7%), 서울(-26.9%), 광주(-24.9%), 부산(-23.5%), 세종(-23.4%), 대전(-21%), 경기(-19.2%), 인천(-18.5%) 순으로 감소했다. 지방 도시의 경우도 비슷했다. 경남의 3분기 순영업소득은 1만2800원으로 1분기 1만7400원 대비 26.4% 감소했으며 제주(-25.1%), 경북(-24.1%), 충남(-20.9%), 강원(-20.9%), 전남(-20.1%), 전북(-17%), 충북(-15.3%) 등도 감소세를 보였다. 조현택 상가정보연구소 연구원은 "올해 내수 경기의 침체된 분위기가 유지되며 상가, 오피스 등을 비롯한 수익형 부동산 시장의 분위기도 경직된 모습을 보였고 오피스텔, 지식산업센터 등의 수익형 부동산 공급도 증가해 공실의 위험도 늘었다"며 "실제 올 3분기 전국 중대형 상가 공실률은 11.5%를 기록하며 1분기 11.3% 대비 0.2% 포인트 증가했다"고 말했다. 그는 "최근 소셜커머스(SNS를 통한 전자상거래), 음식 배달 중개 애플리케이션, 중고 물품 거래 애플리케이션 등의 사용 증가로 오프라인 매장에 영향을 미쳤다"며 "향후 지역, 콘텐츠에 따른 상권 양극화 현상은 심화될 것으로 보인다"고 덧붙였다.'
input_ids = tokenizer.encode(input_text, return_tensors="pt")
# Generate Summary Text Ids
summary_text_ids = model.generate(
    input_ids=input_ids,
    bos_token_id=model.config.bos_token_id,
    eos_token_id=model.config.eos_token_id,
    length_penalty=2.0,
    max_length=142,
    min_length=56,
    num_beams=4,
)
# Decoding Text
print(tokenizer.decode(summary_text_ids[0], skip_special_tokens=True))

주의사항

  • 이때 파이프라인으로는 파인튜닝이 되지 않는다.
    미세부분 하이퍼파라미터로 조정하기 위해서는 파이프라인 x
  • 현모델은 python 활용코드가 존재하지만, 다른 모델은 친절하게 코드가 적용되지 않는 경우 존재
  • 모델 활용 코드 익히고서 다른 모델에서도 적용해보기

언어 모델링 코드

#python 활용 코드


# 1.함수불러오기
from transformers import PreTrainedTokenizerFast, BartForConditionalGeneration

# 2.토크나이저 & 모델 불러오기
tokenizer = PreTrainedTokenizerFast.from_pretrained("ainize/kobart-news")
model = BartForConditionalGeneration.from_pretrained("ainize/kobart-news")

# 3.입력값 적기
input_text = '국내 전반적인 경기침체로 상가 건물주의 수익도 전국적인 감소세를 보이고 있는 것으로 나타났다. 수익형 부동산 연구개발기업 상가정보연구소는 한국감정원 통계를 분석한 결과 전국 중대형 상가 순영업소득(부동산에서 발생하는 임대수입, 기타수입에서 제반 경비를 공제한 순소득)이 1분기 ㎡당 3만4200원에서 3분기 2만5800원으로 감소했다고 17일 밝혔다. 수도권, 세종시, 지방광역시에서 순영업소득이 가장 많이 감소한 지역은 3분기 1만3100원을 기록한 울산으로, 1분기 1만9100원 대비 31.4% 감소했다. 이어 대구(-27.7%), 서울(-26.9%), 광주(-24.9%), 부산(-23.5%), 세종(-23.4%), 대전(-21%), 경기(-19.2%), 인천(-18.5%) 순으로 감소했다. 지방 도시의 경우도 비슷했다. 경남의 3분기 순영업소득은 1만2800원으로 1분기 1만7400원 대비 26.4% 감소했으며 제주(-25.1%), 경북(-24.1%), 충남(-20.9%), 강원(-20.9%), 전남(-20.1%), 전북(-17%), 충북(-15.3%) 등도 감소세를 보였다. 조현택 상가정보연구소 연구원은 "올해 내수 경기의 침체된 분위기가 유지되며 상가, 오피스 등을 비롯한 수익형 부동산 시장의 분위기도 경직된 모습을 보였고 오피스텔, 지식산업센터 등의 수익형 부동산 공급도 증가해 공실의 위험도 늘었다"며 "실제 올 3분기 전국 중대형 상가 공실률은 11.5%를 기록하며 1분기 11.3% 대비 0.2% 포인트 증가했다"고 말했다. 그는 "최근 소셜커머스(SNS를 통한 전자상거래), 음식 배달 중개 애플리케이션, 중고 물품 거래 애플리케이션 등의 사용 증가로 오프라인 매장에 영향을 미쳤다"며 "향후 지역, 콘텐츠에 따른 상권 양극화 현상은 심화될 것으로 보인다"고 덧붙였다.'
# 4.토크나이저로 입력값을 변환
input_ids = tokenizer.encode(input_text, return_tensors="pt")
# 5.옵션 지정 및 모델 사용
summary_text_ids = model.generate(
    input_ids=input_ids,
    bos_token_id=model.config.bos_token_id,
    eos_token_id=model.config.eos_token_id,
    length_penalty=2.0,
    max_length=142,
    min_length=56,
    num_beams=4,
)
# 6.결과 후처리
print(tokenizer.decode(summary_text_ids[0], skip_special_tokens=True))

언어 모델링 절차
1)전처리
2)모델사용
3)후처리

tokenizer & embedding

tokenizer이란?

  • 분석을 위해 문장을 단위로 쪼개기
  • 토큰이라는 인덱스를 부여 (101,19204..)
  • 언어모델을 만들 때, 문장을 단위로 쪼개야하며 해당 과정을 토크나이징
  • 분석 목적이나 활용 방식에 따라 쪼개는 단위가 다르다.
  • 문장은 비정형이며, 정형 데이터로 변환하는 과정에서 반드시 필요한 과정이 토큰화

단계
1. 의미 있는 단위로 쪼개기
2. 숫자화 하기(토큰) integer encoding - 이미 사전으로 만들어놓은 상황

음절단위, 어절 단위로 토큰화 가능

embedidng vector이란?
(유사도: 얼마나 유사한지 수치화 한 것, 코사인 유사도가 가장 일반적)

  • 의미가 있는 숫자로 변환하는 것
    : 토큰은 단순히 인덱스가 부여된 값이었지만,유사도를 통해 숫자를 의미로 부여하는 작업이 embedding vector

  • 사람이 쓰는 자연어를 머신이 이해할 수 있는 숫자의 나열 vector로 변환하기

  • 단어나 문장 각각을 벡터로 변환해 벡터 공간(Vector space)으로 끼워넣는다

  • 대표적인 임베딩 기법은 Word2Vec
    (단어를 전체 단어들간의 관계에 맞춰 해당 단어의 특성을 갖는 벡터로 바꾸면 단어들 사이의 유사도를 계산하는 일이 가능)

  • 토큰 : 문장을 단위로 쪼개는 것 & 인덱스를 부여하며 의미 없는 구분자 역할
    (토큰화된 단위를 임베딩 벡터로)

  • 임베딩 : 1차원된 값(벡터)
    (토큰 하나하나 마다 1차원으로 만들며 의미를 부여하는 것 ,워드 임베딩이라고 한다.)

  • 문장으로 변환 : 2차원

  • 데이터셋 : 3차원

언어모델 Fine-tuning

Fine: 가중치 결정 / 미세 / 세밀하게
tuning: 조정

LLM 모델 학습의 어려움

  • 방대한 양의 리소스 필요
  • 학습을 시키는데 시간이 오래 걸림
  • 과적합,일반화 문제
  • 데이터 전처리 , 수집 어려움

Fine-tuning 이란?

  • 사전 훈련이 된 모델을 미세 조정하는 작업

Fine-tuning 절차는?

1)사전 훈련된 모델 선택
2)데이터 준비
3)모델 수정
4)추가 학습

1)사전 훈련된 모델 선택

DistilBERT

  • 맥락을 잘 파악하는 모델
  • 기존 BERT 모델의 크기와 복잡성을 줄이는 동시, 성능의 많은 부분을 유지한 경량화된 모델
    (BERT의 97%성능을 보임)

2)데이터 준비

트랜스포머 모델이 요구하는 입력 데이터의 형식

  • input_ids : 토큰화 된 입력 시퀀스를 숫자 ID로 변환한 것
  • attention_mask : : 모델이 패딩 된 부분을 무시하고 실제 유용한 데이터에만 집중할 수 있도록 함
  • padding : 토큰의 길이를 맞추기 위해서, 짧은 문장은 0으로 채움.

tensorflow모델 입력 위한 dataset변환

  • 토큰화 데이터셋을 모델 입력에 필요한 feature와 label 추출
  • 텐서플로우 데이터셋 객체로 변환하기

3)모델 수정

  • 오차의 역전파란? 가중치를 업데이트하는 과정
  • gradient(오차의 기울기) = 가중치 => 역전파 통해 적용

    -> output layer의 수만 지정하면 OK

4)추가 학습

  • 작은 학습률 지정: 학습률은 작게 둔다(이미 학습된 파라미터가 있는 상황에서 추가학습하여 미세조정하기 때문)
  • 데이터 크기 epochs : 소요시간 및 성능 고려하여 조정
  • 예측 및 성능 평가
  • 추가로 허깅페이스에 모델을 등록하고 사용할 수 있음
  • 데이터셋부터 구축하고 싶다면, 강사님 코드 양식 참고하여 데이터셋 설정 가능

0개의 댓글