딥러닝 기반 자연어처리 모델
- 딥러닝: 은닉층(neural net)을 사용.
- 자연어를 입력받아 확률로 출력한 뒤, 후처리를 하는 구조
- BERT와 GPT 모델이 대표적인 예시
학습방식
- 모델 준비 : 레이블을 달아 놓은 자료가 있어야 한다.
- 패턴 학습
- 모델의 업데이트
- 반복
트랜스퍼 러닝
- 특정 task를 학습한 모델을 다른 task에 재사용하는 기법
- 백지 상태보다 모델의 학습 속도가 빨라짐.
- upstream task를 먼저 하고, downstream task를 하는 방식
Upstream Task
- 먼저 해결해야 하는 task
- 대규모 말뭉치의 문맥을 이해하는 과제
- 다음 단어 맞추기, 빈칸 채우기 등
- upstream task 진행과정을 프리트레인이라고 부름.
글만 있으면 다량의 학습 데이터를 싼값에 만들수 있다.
이처럼 데이터 내에서 정답을 만들고, 학습하는 과정을 자기지도 학습(self-supervised learning) 이라고 한다.
다음 단어 맞히기 “언어 모델”
- 다음 단어 맞히기: 특정 단어 다음에 올 단어를 맞추는 것.
- “티클 모아 ___” 을 맞춰 보시오.
- 이를 통해 업스트립 태스크를 수행한 모델을 언어 모델이라고 함.
빈칸 채우기와 “마스크 언어 모델”
- 빈칸 채우기 : 문장 가운데 빈 칸이 있고, 가장 적합한 단어를 맟추는 것
- “오는 말이 _____야, 가는 말도 곱다.”
- 이를 통해 업스트립 태스크를 수행한 모델을 마스크 언어 모델이라고 함.
Downstream Task
- 나중에 진행하는 task
- 자연어 처리의 구체적인 문제들
- 문서 분류, 개체명 인식 등
종류
- 파인튜닝 : 다운스트림된 task data 전체를 사용. 모델 전체를 Update
- 프롬프트 퓨닝 : 다운스트림된 task data 전체를 사용. 모델 일부를 Update
- 인컨텍스트 러닝 : 다운스트림된 task data 일부를 사용. 모델 Update 안함.
- 제로샷 러닝 : 모델이 바로 다운스트림 task 수행
- 원샷 러닝 : 다운스트림된 task data 1건만 참고 후 다운스트림 task 구현
- 퓨샷 러닝 : 다운스트림된 task data 일부만 참고 후 다운스트림 task 구현
파인튜닝의 예시
학습 파이프라인 소개
과정
- 각종 설정값 정하기
- 모델, 데이터, 학습 결과 저장소 정하기
- 하이퍼파라미터 설정
- 데이터 다운로드
- 네이버 영화리뷰 말뭉치 이용
- 모델 준비
- 트랜스포머 패키지 사용
- 토크나이저 준비
- 문장을 토큰 시퀀스로 분석하는 토큰화 작업이 필요
- 이때 사용하는 도구가 토크나이저
- 데이터 로더 준비하기
- 데이터 로더 : 데이터를 배치 단위로 모델에 밀어 넣어 줌.
- 배치란? 모델의 가중치를 한번 업데이트시킬 때 사용되는 샘플들의 묶음을 의미
- 인스턴스를 뽑아 배치 구성
- 여러 인스턴스를 데이터셋이라고 함.
- 리스트 → 텐서로의 변환
- pyTorch 사용
- 데이터 로더 : 데이터를 배치 단위로 모델에 밀어 넣어 줌.
- task 정의
- pyTorch lightning 모델을 사용
- task가 들어가 있으며, 모델, 최적화방법, 학습 과정등이 정의됨.
- pyTorch lightning 모델을 사용
- 모델 학습
- 배치 단위로 이뤄짐.
- 입력 → 출력을 정답과 비교 → 차이 최소화 하는 방향으로 업데이트
- 한 과정을 스텝이라고 함.
- trainer 사용
- 배치 단위로 이뤄짐.
- 패키지 :
ratsnlp사용 - 여기서는 실제 실습을 진행하지 않음.
개발환경 구성
- 개발은 Google Colab으로 진행한다.
- 여기선 구글 드라이브와 연동만 하면 된다.
python
from google.colab import drive
drive.mount("/gdrive", force_remount=True)
python
with open('/gdrive/My Drive/test.txt', 'w') as f:
f.writelines("test")