[개발이야기#017] 파이썬/인공지능 영어를 한글로 번역해보자. - 트랜스포머모델 두번째

in #kr2 years ago

안녕하세요 가야태자 @talkit 입니다.

자연어 처리를 인공지능으로 해보려고 책도 보고 인터넷도보고 하고 있습니다.

책에는 조금 뒤쪽에서 가능할 것 같아서 인터넷을 뒤졌습니다. ^^

제가 지금 보고 있는 문서는 친절한 영어-한국어 번역기 만들기 Jo, Joonu ([email protected])
https://metamath1.github.io/blog/posts/gentle-t5-trans/gentle_t5_trans.html

입니다.

비록 그래픽 카드는 안가지고 있지만, 저글에 나와 있는 시간보다 오래 걸리겠지만 해보겠습니다.

CPU로 안되면 다음 글에서 ^^ Colab이라는 구글 서비스를 이용해서 그래픽 카드로 한번 해볼 생각입니다.

일단 어제 사용하던 conda환경은 책 공부용으로 남겨 놓고

다시 콘다 환경을 하나 만들겠습니다.

새로운 가상황경 생성

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

글에서 가르쳐 주는대로 찾으시면되고, 실제 파일은 위 URL 입니다.

저기서 Files and Versions 을 클릭 합니다.

그리고, 파일 리스트에서 오른쪽 마우스를 누르시고, 주소를 복사 합니다.

wget https://huggingface.co/datasets/bongsoo/news_talk_en_ko/blob/main/news_talk_en_ko_train_130000.tsv

위 명령어를 입력 합니다.

리눅스에서 파일 받을때는 wget이 진리 입니다. ^^

head news_talk_en_ko_train_130000.tsv

위 명령어를 이용해서 한번 파일을 봐보겠습니다.


파일이 이상하네요 ^^

다시 다운로드 받도록 하겠습니다.

아까 그 화면에서 파일을 누르시고,

위 화면에서 download의 URL을 복사 하십시오.

wget https://huggingface.co/datasets/bongsoo/news_talk_en_ko/resolve/main/news_talk_en_ko_train_130000.tsv?download=true -O  news_talk_en_ko_train_130000.tsv

-O 옵션은 내가 원하는 파일로 저장해주는 옵셥입니다. ^^

(engtokor) user@user-VirtualBox:~$ head news_talk_en_ko_train_130000.tsv
Skinner's reward is mostly eye-watering.        스키너가 말한 보상은 대부분 눈으로 볼 수 있는 현물이다.
Even some problems can be predicted.    심지어 어떤 문제가 발생할 건지도 어느 정도 예측이 가능하다.
Only God will exactly know why. 오직 하나님만이 그 이유를 제대로 알 수 있을 겁니다.
Businesses should not overlook China's dispute. 중국의 논쟁을 보며 간과해선 안 될 게 기업들의 고충이다.
Slow-beating songs often float over time.       박자가 느린 노래는 오랜 시간이 지나 뜨는 경우가 있다.
I can't even consider uninsured treatments.     보험 처리가 안 되는 비급여 시술은 엄두도 못 낸다.
Including Jesus, thirteen people eat together.  예수까지 합치면 모두 열세 명이 함께 식사를 하는 것이다.
Uncertified companies should use government-created platforms.  인증을 받지 못한 기업은 정부가 만든 플랫폼을 활용해야 한다.
At least someone won't be missed.       적어도 누군가 보고 싶은 일이 일어나진 않을 듯 합니다.
Children's evaluations show that they work.     아이들 평가를 해보면 효과가 있다는 것을 알 수 있다.

다시 확인해보니 tsv 파일의 데이터가 잘 보입니다. ^^

일단 여기 까지 해보셨으면

test3.py 파일을 하나 만듭니다.

from datasets import load_dataset
en_ko = load_dataset("bongsoo/news_talk_en_ko") # 실제 데이터셋 다운로드
print(en_ko)
python3 test3.py

일단 위 문서와 같이 데이터가 내려왔습니다.

해당 문서를 데이터 프레임에 넣습니다.

import pandas as pd
en_ko.set_format(type="pandas") # 허깅페이스 데이터셋을 판다스 포맷으로 세팅
df = en_ko["train"][:] # 'train'키의 모든 행을 DataFrame df에 할당
print(df.head()) # 잘 담겼는지 확인한다.

test3.py 코드에 추가 해주었습니다.

여기까지도 잘 되었습니다.

지금 현재는 해더가 데이터로 되어 있어서 이것은 en, ko로 수정해주는 코드를 추가 합니다.

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)
print(en_ko_df.head())

해당 코드까지도 잘 실행이 됩니다.

여기부터는 저도 인공지능 전문가는 아니어서 잘 이해가 안가는데 ^^

허깅스페이스용 데이터셋을 생성한다고 하네요.

from datasets import Dataset

dataset = Dataset.from_pandas(en_ko_df)

print(dataset)

위에서 구한 파일을 학습용 검증용 테스트용으로 파일을 나는 코드 입니다.

# 각 데이터 셋의 샘플수를 정한다.
num_train = 1200000
num_valid = 90000
num_test = 10000


#설정된 크기만큼 DataFrame을 자른다.
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:]


#다시 tsv파일로 저장한다.
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")


print(dataset)

아래와 같이 원하는대로 잘 분리가 되었습니다.

DatasetDict({
    train: Dataset({
        features: ['en', 'ko'],
        num_rows: 1200000
    })
    valid: Dataset({
        features: ['en', 'ko'],
        num_rows: 90000
    })
    test: Dataset({
        features: ['en', 'ko'],
        num_rows: 10000
    })
})

영어 세문장, 한국어 세문장을 가져오는 코드라고 합니다.

print(dataset['train']['en'][:3], dataset['train']['ko'][:3])

코드가 [:3] 부분과 ['en'] 부분의 순서를 바꿔도 상관 없다고 하네요.

허깅 페이스 (Hugging face)

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
from transformers import DataCollatorForSeq2Seq
from transformers import Seq2SeqTrainingArguments, Seq2SeqTrainer
from datasets import load_dataset, load_metric

import numpy as np
import torch
import multiprocessing

device = 'cuda' if torch.cuda.is_available() else 'cpu'
print(device)

model_ckpt = "KETI-AIR/ke-t5-base"
max_token_length = 64

관련 코드 입니다. 여기서 model_ckpt가 미리 학습된 모델이라고 하네요.

오늘은 여기까지 진행을 하고 다음주 주말에 이어서 진행 하겠습니다.

아마 제가 지금 다음 과정이 무지 궁금하기에 주중에 할 수도 있겠지만, 그 다음주가 감리가 잡혀 있어서 T.T 아마 주말에 조금 깔작하고 ,추석 쉬고 이어서 진행하지 않가 싶네요 ^^

새로운 한주도 즐거운 한주 되십시오.

감사합니다.



Posted through the ECblog app (https://blog.etain.club)

Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

🌟👏 Wow, thank you so much for sharing this detailed guide on creating a multilingual dataset and training a seq2seq model using Hugging Face! 🤩 I'm excited to learn from your experience and replicate it.

I'll make sure to follow along and try out the code snippets. Your explanations are clear and concise, making it easy for me (and others) to understand.

🎉 Can't wait to dive in next week and continue exploring the world of NLP with you! 😊

(And don't worry about the vote request - I'll make sure to cast my vote for xpilar.witness at https://steemitwallet.com/~witnesses.) 💖

잘 보고 따라하고 있습니다~ 고맙습니다! ^^

Coin Marketplace

STEEM 0.04
TRX 0.31
JST 0.074
BTC 62924.84
ETH 1655.02
USDT 1.00
SBD 0.42