[개발이야기#03] 파이썬/인공지능- 트랜스포머 모델을 활용한 '영 -> 한' 번역하기 (1) 학습용 데이터셋 준비(feat. 가야태자님)
글 작성일: 2024년 9월 9일 (월)
안녕하세요. 요거트 @yoghurty 입니다!
파이썬/인공지능 공부를 위해
가야태자 @talkit 님께서 연재해 주시는 "[개발이야기] 파이썬/인공지능" 포스팅을 따라하고 있습니다! ^^
지난번에는 버추얼 박스에 우분투 리눅스 설치 후 트랜스포머 모델을 활용하여 번역을 시도했었습니다. 성공을 하긴 했는데, 기존 모델을 사용하다 보니, 영어를 프랑스어, 독일어, 루마니아어로만 번역이 가능하더군요. ㅋ
👉 [개발이야기#02] 파이썬/인공지능 공부- 파이썬 설치 + 트랜스포머 모델을 활용한 번역(영 -> 프/독/루) (feat. 가야태자님)
👉 [개발이야기#01] 파이썬/인공지능 공부를 위한 개발 환경 구축 - 버추얼박스+우분투 설치 (feat. 가야태자님)
그래서 이번에는 트랜스포머 모델을 이용한 영문을 한글로 번역할 수 있는 (간단한)모델을 직접 만들어 보려고 합니다.
이를 위해 제가 참고하는 글은 다음의 두가지입니다.
- [개발이야기#017] 파이썬/인공지능 영어를 한글로 번역해보자. - 트랜스포머모델 두번째
- 친절한 영어-한국어 번역기 만들기 A Gentle Introduction to Creating an English-to-Korean translator with Transformers
앞으로 4회에 걸쳐서 진행할 내용은 다음과 같습니다!
(1) 학습용 데이터 셋 준비
- 두 번째 프로젝트를 위한 새로운 가상 환경 만들기
- 학습용 '영문<->한글' 데이터 셋 다운로드
- 데이터 셋을 정비 후 학습용train, 검증용valid, 테스트test 용도의 세 그룹으로 분할
(2) 컴퓨터가 학습을 할 수 있도록 학습용 데이터 사전 작업(토크나이징, tokenizing)
(3) 학습을 통한 모델 구축
(4) 구축된 모델을 이용한 영문->한글 번역 테스트
두 번째 프로젝트용 가상환경 생성 및 패키지 준비
영문을 한글로 번역하기 위한 두 번째 프로젝트 진행을 위해 새로운 가상환경을 engtokor 이름으로 만들고,
만든 가상환경을 작동시켜 줍니다.
가상환경에서 트랜스포머 모델을 활용하기 위해 다양한 패키지들을 설치해 줍니다.
conda create -n engtokor python=3.12
conda activate engtokor
pip install transformers
pip install datasets
pip install accelerate
pip install sentencepiece
pip install evaluate
pip install sacrebleu
학습용 '영문<->한글' 데이터 셋 준비
데이터셋 다운로드
이번에 영-한 번역기 학습을 위해 사용할 데이터셋은 'bongsoo/news_talk_en_ko' 이며,
허깅페이스라는 웹사이트에서 다운 받을 수 있습니다.
https://huggingface.co/datasets/bongsoo/news_talk_en_ko
다음과 같이 test3.py 파일을 만들어 허깅페이스 허브로 부터 데이터셋을 바로 다운받습니다.
from datasets import load_dataset
en_ko = load_dataset("bongsoo/news_talk_en_ko") # 실제 데이터셋 다운로드
print(en_ko)
총 1,299,999 개의 행(num_rows)이 표시되는데, 헤더에 있는 건도 사실상 데이터인 것을 보면, 우리가 학습에 사용할 데이터는 총 13만 건으로 보입니다.
또한, 모든 데이터가 train 이라는 하나의 그룹으로 되어있습니다.
학습 가능하도록 데이터셋 변환
다운 받은 데이터 셋은 바로 학습이 곤란하므로
- 헤더에 있는 데이터를 내리고, 헤더자리에 컬럼 명(en, ko) 추가합니다.
- 한 덩어리로 되어있는 데이터셋을 학습용train, 검증용valid, 테스트test 용도의 세 그룹으로 분할하여 재조직화 합니다.
각 그룹별 샘플의 수는 다음과 같이 나누어줍니다.
num_train = 1200000
num_valid = 90000
num_test = 10000
1회차 코드
from datasets import load_dataset
from datasets import Dataset
import pandas as pd
# 데이터셋을 다운 받는다.
en_ko = load_dataset("bongsoo/news_talk_en_ko")
en_ko.set_format(type="pandas")
df = en_ko["train"][:]
example_0 = list(df.columns)
example_0_df = pd.DataFrame({col: [value] for col, value in zip(('en', 'ko'), example_0)})
df.columns = ('en', 'ko')
en_ko_df = pd.concat([example_0_df, df],).reset_index(drop=True)
dataset = Dataset.from_pandas(en_ko_df)
# 각 데이터 셋의 샘플수를 정한다.
num_train = 1200000
num_valid = 90000
num_test = 10000
en_ko_df_train = en_ko_df.iloc[:num_train]
en_ko_df_valid = en_ko_df.iloc[num_train:num_train+num_valid]
en_ko_df_test = en_ko_df.iloc[-num_test:]
# 각 데이터 셋을 파일로 저장한다.
en_ko_df_train.to_csv("train.tsv", sep='\t', index=False)
en_ko_df_valid.to_csv("valid.tsv", sep='\t', index=False)
en_ko_df_test.to_csv("test.tsv", sep='\t', index=False)
# 저장한 파일에서 데이터셋을 읽어온다.
data_files = {"train": "train.tsv", "valid": "valid.tsv", "test": "test.tsv"}
dataset = load_dataset("csv", data_files=data_files, delimiter="\t")
# train 스플릿에서 영어 3개와 한국어 3개 샘플을 가져온다.
print(dataset['train']['en'][:3], dataset['train']['ko'][:3])
마무리
이번 작업은
영어를 한글로 번역할 수 있는 모델을 만들기 위해,
'영-한' 데이터 셋을 구하고
데이터 셋을 정비 후
학습용train, 검증용valid, 테스트test 의 세 그룹으로 분할 하였습니다.
다음 작업에서는
컴퓨터가 학습을 할 수 있도록 토크나이징(tokenizing)이라는 사전 작업을 해보도록 하겠습니다!
고맙습니다~ ^^
Thank you, friend!
I'm @steem.history, who is steem witness.
Thank you for witnessvoting for me.
please click it!
(Go to https://steemit.com/~witnesses and type fbslo at the bottom of the page)
The weight is reduced because of the lack of Voting Power. If you vote for me as a witness, you can get my little vote.
Upvoted! Thank you for supporting witness @jswit.
이 게시물은 @philhughes를 통해 Team 7에서 업보트/지원을 받았습니다. 저희 팀은 커뮤니티에 기여하는 콘텐츠를 지원합니다.
Your support is a great help in creating content that contributes to the community.
Thank you so much! :)
@steemcurator09
@philhughes
파이썬 배우다가 진도가 안나가네요. 프로젝트를 한번 해보면 금방 배우는데...
그렇죠! 그래서 저도 내친김에... 얼렁뚱땅 프로젝트 한 번 해보고 있습니다. ^^