TRL (Transform, Retrieve, and Label) : 진화된 자연어 처리 학습 방법

오늘 소개할 자연어 처리(Natural Language Processing, NLP) 기술은 TRL입니다. 인공지능(AI)에서 중요한 연구 분야입니다. 컴퓨터가 사람의 언어를 이해하고 처리하는 능력은 다양한 응용 분야에서 중요한 역할을 하고 있습니다. 그러나 자연어 처리는 그 자체로 복잡하며, 특히 비지도 학습(Unsupervised Learning)은 많은 어려움을 겪고 있습니다. TRL(Transform, Retrieve, and Label)은 이러한 문제를 해결하기 위한 새로운 접근법입니다.

TRL의 핵심 개념

TRL은 ‘Transform’, ‘Retrieve’, ‘Label’의 세 단계로 이루어진 학습 방법입니다. 이는 원본 텍스트 데이터를 변환(Transform)하고, 가장 관련성이 높은 정보를 검색(Retrieve)한 후, 해당 정보에 라벨(Label)을 붙이는 과정을 통해 학습을 진행합니다.

Transform

‘변환’ 단계에서는 원본 텍스트 데이터를 새로운 형태로 변환합니다. 이는 일반적으로 텍스트를 벡터나 다른 형식의 표현으로 변환하는 과정을 포함합니다.

예를 들어, 단어를 벡터로 변환하는 Word2Vec이나 문장을 벡터로 변환하는 Sentence2Vec 등의 기술이 이 단계에서 사용될 수 있습니다.

Retrieve

‘검색’ 단계에서는 변환된 데이터 중에서 가장 관련성이 높은 정보를 찾습니다. 이는 일반적으로 효율적인 검색 알고리즘을 사용하여 수행됩니다.

예를 들어, K-Nearest Neighbor(K-NN) 알고리즘은 검색 단계에서 널리 사용되는 방법입니다. 이 알고리즘은 벡터 공간에서 가장 가까운 ‘K’개의 이웃을 찾는 방법을 사용하여, 가장 관련성이 높은 정보를 찾습니다.

Label

‘라벨링’ 단계에서는 검색된 정보에 대한 라벨을 생성합니다. 이는 일반적으로 분류(Classification)나 회귀(Regression)와 같은 지도 학습(Supervised Learning) 방법을 사용하여 수행됩니다.

예를 들어, 로지스틱 회귀(Logistic Regression)나 SVM(Support Vector Machine)과 같은 분류 알고리즘이 이 단계에서 사용될 수 있습니다.

수학적 표현

먼저, 변환(Transform) 단계에서는 텍스트 데이터를 벡터 형식으로 변환합니다. 이는 일반적으로 임베딩 함수 f를 사용하여 수행됩니다:

x' = f(x)

여기서 x는 원본 텍스트 데이터, x’는 변환된 벡터 데이터입니다.

다음으로, 검색(Retrieve) 단계에서는 변환된 데이터 x’ 중에서 가장 관련성이 높은 정보를 찾습니다. 이는 일반적으로 가장 가까운 이웃을 찾는 함수 g를 사용하여 수행됩니다:

y' = g(x')

여기서 y’는 x’에 가장 가까운 이웃 데이터입니다.

마지막으로, 라벨링(Label) 단계에서는 검색된 데이터 y’에 대한 라벨을 생성합니다. 이는 일반적으로 지도 학습 함수 h를 사용하여 수행됩니다:

y = h(y')

여기서 y는 y’에 대한 라벨입니다.

이러한 과정을 통해, TRL은 원본 텍스트 데이터 x를 라벨 y로 변환하는 전체 과정을 학습할 수 있습니다.

응용 분야

TRL은 다양한 자연어 처리 작업에 적용될 수 있습니다. 예를 들어, 문서 분류(Document Classification), 감성 분석(Sentiment Analysis), 텍스트 분석(Text Mining) 등의 작업에서 사용할 수 있습니다.

또한, TRL은 다양한 데이터 형식에 적용될 수 있습니다. 텍스트 데이터 뿐만 아니라, 이미지나 음성, 비디오 데이터 등에도 사용할 수 있습니다. 이를 통해 더욱 다양한 응용 분야와 데이터 형식에 대한 강력한 학습 방법을 제공할 수 있습니다.

결론

TRL은 자연어 처리에서 효과적인 비지도 학습 방법을 제공합니다. 이는 원본 텍스트 데이터를 효율적으로 변환하고, 관련성이 높은 정보를 검색하고, 해당 정보에 대한 라벨을 생성하는 과정을 통해 학습을 진행합니다. 이러한 과정을 통해, 다양한 자연어 처리 작업과 데이터 형식에 대한 강력한 학습 방법을 제공합니다. 이를 통해, TRL은 자연어 처리의 복잡성을 극복하고, 더욱 효과적인 학습 방법을 제공할 수 있습니다.

파이썬 코드 예시

아래에 간단한 TRL 파이썬 코드 예시를 제공합니다:

pythonCopy codefrom sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.neighbors import NearestNeighbors
from sklearn.linear_model import LogisticRegression

# 변환(Transform) 단계
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(text_data)

# 검색(Retrieve) 단계
knn = NearestNeighbors(n_neighbors=5)
knn.fit(X)
_, indices = knn.kneighbors(X)

# 라벨링(Label) 단계
labels = [label_data[i] for i in indices]
lr = LogisticRegression()
lr.fit(X, labels)

이 코드는 TF-IDF 벡터라이저를 사용하여 텍스트 데이터를 변환하고, K-NN을 사용하여 가장 가까운 이웃을 검색하고, 로지스틱 회귀를 사용하여 라벨을 생성하는 과정을 나타냅니다. 이를 통해 간단한 TRL 구현을 확인할 수 있습니다.

TRL 라이브러리

68747470733a2f2f68756767696e67666163652e636f2f64617461736574732f74726c2d696e7465726e616c2d74657374696e672f6578616d706c652d696d616765732f7265736f6c76652f6d61696e2f696d616765732f54524c2d726561646d652e706e67

trl지도 미세 조정 단계(SFT), 보상 모델링 단계(RM)에서 근접 정책 최적화(PPO) 단계에 이르기까지 강화 학습으로 변환기 언어 모델을 교육하는 도구 세트를 제공하는 전체 스택 라이브러리입니다. transformers라이브러리는 다음과 같이 라이브러리 위에 구축됩니다.🤗포옹하는 얼굴. 따라서 사전 훈련된 언어 모델은 transformers. 이 시점에서 대부분의 디코더 아키텍처와 인코더-디코더 아키텍처가 지원됩니다. examples/예제 코드 스니펫과 이러한 도구를 실행하는 방법은 문서 또는 폴더를 참조하십시오 .

간략한 소개

  • SFTTrainertransformers: 사용자 지정 데이터 세트에서 언어 모델 또는 어댑터를 쉽게 미세 조정하기 위한 Trainer 주변의 가볍고 친숙한 래퍼입니다 .
  • RewardTrainertransformers: 사람의 선호도에 따라 언어 모델을 쉽게 미세 조정하기 위한 Trainer 주변의 가벼운 래퍼 (보상 모델링).
  • PPOTrainer: 언어 모델을 최적화하기 위해 (쿼리, 응답, 보상) 세 가지만 필요한 언어 모델용 PPO 트레이너입니다.
  • AutoModelForCausalLMWithValueHeadAutoModelForSeq2SeqLMWithValueHead: 강화 학습에서 가치 함수로 사용할 수 있는 각 토큰에 대한 추가 스칼라 출력이 있는 변환기 모델입니다.
  •  : BERT 감정 분류기로 긍정적인 영화 리뷰를 생성하도록 GPT2 훈련, 어댑터만 사용하는 전체 RLHF, 독성이 덜하도록 GPT-j 훈련, Stack-Llama 예 등

PPO 작동 방식

PPO를 통한 언어 모델 미세 조정은 대략 세 단계로 구성됩니다.

  1. 롤아웃 : 언어 모델은 문장의 시작일 수 있는 쿼리를 기반으로 응답 또는 연속을 생성합니다.
  2. 평가 : 쿼리 및 응답은 기능, 모델, 인간 피드백 또는 이들의 일부 조합으로 평가됩니다. 중요한 것은 이 프로세스가 각 쿼리/응답 쌍에 대해 스칼라 값을 생성해야 한다는 것입니다.
  3. 최적화 : 가장 복잡한 부분입니다. 최적화 단계에서 쿼리/응답 쌍은 시퀀스에 있는 토큰의 로그 확률을 계산하는 데 사용됩니다. 이것은 훈련된 모델과 일반적으로 미세 조정 전에 미리 훈련된 모델인 참조 모델로 수행됩니다. 두 출력 사이의 KL-divergence는 생성된 응답이 참조 언어 모델에서 멀리 벗어나지 않도록 추가 보상 신호로 사용됩니다. 활성 언어 모델은 PPO로 훈련됩니다.

이 프로세스는 아래 스케치에 설명되어 있습니다.

trl
trl

설치

파이썬 패키지

pip로 라이브러리를 설치합니다.

pip install trl

소스에서

저장소에서 예제를 실행하려면 몇 가지 추가 라이브러리가 필요합니다. 저장소를 복제하고 pip로 설치합니다.

git clone https://github.com/lvwerra/trl.git
cd trl/
pip install .

TRL을 개발하려면 편집 가능한 모드로 설치해야 합니다.

pip install -e .

사용하는 방법

SFTTrainer

SFTTrainer이것은 라이브러리에서 사용하는 방법에 대한 기본적인 예입니다 . 는 사용자 지정 데이터 세트에서 언어 모델 또는 어댑터를 쉽게 미세 조정하기 위한 Trainer SFTTrainer주변의 가벼운 래퍼입니다 .transformers

# imports
from datasets import load_dataset
from trl import SFTTrainer

# get dataset
dataset = load_dataset("imdb", split="train")

# get trainer
trainer = SFTTrainer(
    "facebook/opt-350m",
    train_dataset=dataset,
    dataset_text_field="text",
    max_seq_length=512,
)

# train
trainer.train()

RewardTrainer

RewardTrainer이것은 라이브러리에서 사용하는 방법에 대한 기본적인 예입니다 . 사용자 지정 기본 설정 데이터 세트에서 보상 모델 또는 어댑터를 쉽게 미세 조정하기 위한 Trainer RewardTrainer주변의 래퍼입니다 .transformers

# imports
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from trl import RewardTrainer

# load model and dataset - dataset needs to be in a specific format
model = AutoModelForSequenceClassification.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")

...

# load trainer
trainer = RewardTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=dataset,
)

# train
trainer.train()

PPOTrainer

PPOTrainer이것은 라이브러리에서 사용하는 방법에 대한 기본적인 예입니다 . 쿼리를 기반으로 언어 모델은 평가되는 응답을 생성합니다. 평가는 루프에 있는 인간 또는 다른 모델의 출력일 수 있습니다.

# imports
import torch
from transformers import AutoTokenizer
from trl import PPOTrainer, PPOConfig, AutoModelForCausalLMWithValueHead, create_reference_model
from trl.core import respond_to_batch

# get models
model = AutoModelForCausalLMWithValueHead.from_pretrained('gpt2')
model_ref = create_reference_model(model)

tokenizer = AutoTokenizer.from_pretrained('gpt2')

# initialize trainer
ppo_config = PPOConfig(
    batch_size=1,
)

# encode a query
query_txt = "This morning I went to the "
query_tensor = tokenizer.encode(query_txt, return_tensors="pt")

# get model response
response_tensor  = respond_to_batch(model, query_tensor)

# create a ppo trainer
ppo_trainer = PPOTrainer(ppo_config, model, model_ref, tokenizer)

# define a reward for response
# (this could be any reward such as human feedback or output from another model)
reward = [torch.tensor(1.0)]

# train model for one step with ppo
train_stats = ppo_trainer.step([query_tensor[0]], [response_tensor[0]], reward)

고급 예: IMDB 정서

자세한 예는 examples/scripts/sentiment_tuning.pyGPT2가 긍정적인 영화 리뷰를 생성하도록 미세 조정된 Python 스크립트 예를 확인하십시오. 최적화 전후의 언어 모델의 몇 가지 예는 다음과 같습니다.

그림: 최적화 전후에 몇 가지 검토가 계속됩니다.

참고

이 포스트에서는 TRL에 대한 간단한 개념과 라이브러리를 소개드렸습니다. 이론적인 배경과 실제 응용 분야, 그리고 기본적인 파이썬 코드 예시를 통해 TRL에 대한 이해를 돕고자 했습니다. TRL은 비지도 학습을 위한 효과적인 방법으로, 다양한 자연어 처리 작업에 적용할 수 있습니다. 이를 통해 TRL은 자연어 처리의 복잡성을 극복하고, 더욱 효과적인 학습 방법을 제공할 수 있습니다. 이 포스트가 TRL에 대한 기본적인 이해를 제공하는데 도움이 되길 바랍니다.

답글 남기기