:트랜스포머 핵식 원리와 허깅페이스 패키지 활용법
: 문장을 형태소(토큰화), 백터화 한다.
:자연어 처리 모델으 자연어를 입력받아서 해당 입력이 특정 범주일 확률을 반환하는 확률 함수이다.
: 데이터 패턴을 스스로 익히는 인공지능의 한 갈래입니다. 여기서 딥이란 많은 은닉층을 사용한다는 의미입니다.
: 특정 테스크르르 학습한 모델을 다른 태스크 수행에 재사용하는 기법을 가리킵니다.
: 본질은 분류입니다. 학습방식은 모두 파인튜닝 입니다.
이 책에서 진행하는 모든 실습은 ratsnlp라는 오픈소스 패키지를 사용합니다.
https://github.com/ratsgo/ratsnlp
:모델을 만들려면 가장 먼저 각종 설정값을 정해야 한다.
하이퍼파라미터: 모델 구조와 학습 등에 직접 관계된 설정값을 가리킵니다.(러닝 레이트, 베치 크기)
다운로드 툴킷 코포라 오픈소스 파이썬 패키지 사용합니다.
https://github.com/ko-nlp/korpora
Korpora: Korean Corpora Archives
최근 자연어 처리에 관심이 높아지면서 정부와 기업은 물론 뜻있는 개인에 이르기까지 데이터를 무료로 공개하는 추세입니다. 하지만 데이터가 곳곳에 산재해 있다보니 품질 좋은 말뭉치임에도 그 존재조차 잘 알려지지 않은 경우가 많습니다. 파일 포맷과 저장 형식 등이 각기 달라 사용이 쉽지 않습니다. 개별 사용자들은 다운로드나 전처리 코드를 그때그때 개발해서 써야 하는 수고로움이 있습니다.
Korpora는 이 같은 불편함을 조금이나마 덜어드리기 위해 개발한 오픈소스 파이썬 패키지입니다. Korpora는 말뭉치라는 뜻의 영어 단어 corpus의 복수형인 corpora에서 착안해 이름 지었습니다. Korpora는 Korean Corpora의 준말입니다. Korpora가 마중물이 되어 한국어 데이터셋이 더 많이 공개되고 이를 통해 한국어 자연어 처리 수준이 한 단계 업그레이드되기를 희망합니다.
대규모 말뭉치를 활용한 프리트레인에는 많은 리소스가 필요합니다.
미국 자연어 처리 기업 허깅페이스에서 만든 트랜스포머라는 오픈소스 파이썬 패키지를 주목해야 합니다.
https://github.com/huggingface/transformers
자연어 처리 모델의 입력은 대개 토큰입니다. 여기서 토큰은 문장보다 작은 단위입니다.
파이토치에서 데이터 로더 라는게 포함돼 있다.
데이터 로더 : 데이터를 배치단위로 모델에 밀어 넣어주는 역활을 합니다. 전체 데이터 가운데 일부 인스턴스를 뽑아 배치를 구성합니다.
컬레이트 : 배치 모양 등을 정비해 최종 입력으로 만들어 주는 과정 (차이썬 리스트 -> 파이토치 텐서로 변환)
이 책에서는 모델 학습을 할 때 파이토치 라이트닝이라는 라이브러리를 사용합니다.
이 책에서는 파이토치 라이트닝이 제공하는 lightning 모듈을 상속받아 task를 정의합니다.
task에는 앞서 준비한 모델과 최적화 방법, 학습과정 등이 정의돼 있습니다.
트레이너 : 파이토치 라이트닝에서 제공하는 객체로 실제 학습을 수행합니다. (하드웨어 설정, 학습기록로깅, 체크포인트 저장 등 )
# (1)의존성 패키지 설치
!pip install ratsnlp
# (2)구글 드라이브 연결
from google.colab import drive
drive.mount('/gdrive', force_remount=True)
# (3)NSMC 다운로드
from Korpora import Korpora
nsmc = Korpora.load("nsmc", force_download=True)
> [out put] Korpora 는 다른 분들이 연구 목적으로 공유해주신 말뭉치들을
손쉽게 다운로드, 사용할 수 있는 기능만을 제공합니다.
말뭉치들을 공유해 주신 분들에게 감사드리며, 각 말뭉치 별 설명과 라이센스를 공유 드립니다.
해당 말뭉치에 대해 자세히 알고 싶으신 분은 아래의 description 을 참고,
해당 말뭉치를 연구/상용의 목적으로 이용하실 때에는 아래의 라이센스를 참고해 주시기 바랍니다.
# Description
Author : e9t@github
Repository : https://github.com/e9t/nsmc
References : www.lucypark.kr/docs/2015-pyconkr/#39
Naver sentiment movie corpus v1.0
This is a movie review dataset in the Korean language.
Reviews were scraped from Naver Movies.
The dataset construction is based on the method noted in
[Large movie review dataset][^1] from Maas et al., 2011.
[^1]: http://ai.stanford.edu/~amaas/data/sentiment/
# License
CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
Details in https://creativecommons.org/publicdomain/zero/1.0/
[nsmc] download ratings_train.txt: 14.6MB [00:00, 92.0MB/s]
[nsmc] download ratings_test.txt: 4.90MB [00:00, 38.1MB/s]
# 말뭉치 전처리
import os
def write_lines(path, lines):
with open(path, 'w', encoding='utf-8') as f:
for line in lines:
f.write(f'{line}\n')
write_lines("/content/train.txt", nsmc.train.get_all_texts())
write_lines("/content/test.txt", nsmc.test.get_all_texts())
# 디렉터리 만들기
import os
os.makedirs("/gdrive/My Drive/nlpbook/bbpe", exist_ok=True)
# 바이트 수준 BPE 어휘 집합 구축축
from tokenizers import ByteLevelBPETokenizer
bytebpe_tokenizer = ByteLevelBPETokenizer()
bytebpe_tokenizer.train(
files=["/content/train.txt","/content/test.txt"],
vocab_size=10000,
special_tokens=["[PAD]"]
)
bytebpe_tokenizer.save_model("/gdrive/My Drive/nlpbook/bbpe")
# 확인
!cat /gdrive/My\ Drive/nlpbook/bbpe/vocab.json
!head /gdrive/My\ Drive/nlpbook/bbpe/merges.txt
<본 내용과 도움이 되는 블로그 >
출처 :
https://velog.io/@binmuxiz/1.-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EB%B0%98-%EC%9E%90%EC%97%B0%EC%96%B4-%EC%B2%98%EB%A6%AC-%EB%AA%A8%EB%8D%B8
https://velog.io/@binmuxiz/%ED%8A%B8%EB%9E%9C%EC%8A%A4%ED%8D%BC-%EB%9F%AC%EB%8B%9D