구글의 T5 텍스트-투-텍스트 트랜스포머 모델 살펴보기
이 글에서는 통합 텍스트-투-텍스트 프레임워크부터 T5 결과 비교까지, Google의 T5 트랜스포머 모델의 아키텍처와 동작 메커니즘을 살펴봅니다. 이 글은 AI 번역본입니다. 오역이 의심되는 부분이 있다면 댓글로 알려주세요.
Created on September 15|Last edited on September 15
Comment
분야 자연어 처리 (NLP) 은 끊임없이 변화하고 성장하고 있습니다. 매 분기마다 새로운 모델이 공개되어 최신 성능(SOTA)을 달성하고 있습니다. 이들 모델은 서로 다른 목적 함수, 서로 다른 학습 절차, 그리고 서로 다른 데이터셋으로 학습됩니다.
이처럼 특성이 제각각이라면 모델들을 서로 비교하고 의미 있는 결론을 내리기가 매우 어렵습니다. 다행히도, 바로 여기에서 저자들이 “[[TRANSLATION_FAILED]]들어오세요.
이번 글에서 다룰 내용은 다음과 같습니다:
목차
T5 논문전이 학습이란 무엇일까요?왜 전이 학습을 사용할까요?T5 트랜스포머 모델이란 무엇인가요?T5 트랜스포머 모델은 어떻게 작동하나요?[[TRANSLATION_FAILED]][[TRANSLATION_FAILED]]2. 학습:3. 모델:결과T5 대 LongT5T5 모델을 언제 사용하면 좋을까?0. 라이브러리 임포트요약
T5 논문
“통합 텍스트-투-텍스트 트랜스포머로 전이 학습의 한계를 탐구하기”는 Google의 T5 아키텍처와 통합된 “텍스트-투-텍스트” 프레임워크를 소개한 혁신적인 논문입니다.
제안된 방법론의 핵심은 모든 NLP 작업을 “텍스트-투-텍스트” 문제로 다룰 수 있다는 점입니다. 즉, 입력도 텍스트를 사용하고 출력도 텍스트로 생성한다는 의미입니다. 또한 그들은 소개했습니다 C4라고 불리는 방대한 데이터셋약 750GB 규모의 정제된 영어 텍스트를 포함하고 있습니다. 추가로, 모델과 데이터셋 모두 오픈 소스로 공개되어 있습니다.
이번 글에서는 T5 모델 아키텍처를 살펴보고, 다른 모델들과 비교한 뒤 직접 실험해 보겠습니다.

하지만 T5 모델로 들어가기 전에, 먼저 전이 학습에 대해 간단히 이해하는 것이 중요합니다.
전이 학습이란 무엇일까요?
전이 학습은 한 가지 작업을 위해 데이터가 풍부한 대규모 데이터셋으로 사전 학습된 모델을, 특정 다운스트림 작업에 맞게 미세 조정할 수 있을 때 발생합니다. 본질적으로 하나의 작업에서 훈련하고 학습한 내용을, 보통 분야와 도메인, 과제가 유사한 다른 작업으로 이전하는 것입니다.
이는 협업과 성장을 촉진하는 매우 강력한 기법입니다. 전이 학습의 정점은, 데이터가 풍부한 여러 작업의 혼합으로 사전 학습된 단일 독립형 모델을 모든 텍스트 처리 작업에 사용할 수 있을 때입니다.
T5는 다양한 작업(언어 번역, 텍스트 요약, 텍스트 분류 등) 전반에서 이를 처음으로 달성한 모델입니다.
왜 전이 학습을 사용할까요?
아마 이렇게 궁금하실 수 있습니다. “왜 다운스트림 작업에 대해 모델을 그냥 직접 학습시키는 대신, 한 작업에서 배운 내용을 다른 작업으로 이전하려고 할까요?”
대규모 모델을 학습하는 데는 막대한 계산 자원과 비용이 들며, 보통 고급 GPU와 TPU를 사용해 수행됩니다. 이러한 모델은 탄소 발자국이 매우 크고 생태계에도 큰 영향을 미칩니다.
요컨대 전이 학습은 취미 개발자부터 대기업까지 모두가 거대하고 비용이 많이 드는 모델을 발판으로 삼아, 자신들의 특정 작업에 맞게 맞춤화할 수 있게 해줍니다.
T5 트랜스포머 모델이란 무엇인가요?
T5 트랜스포머 모델은 2020년에 Google AI 팀이 발표했으며, Text-To-Text Transfer Transformer의 약자입니다(알파벳 T가 다섯 번 등장하므로 T5). T5가 해결하려는 핵심 문제는 NLP 분야에서 모범 사례를 체계적으로 비교·분석한 연구가 부족하다는 점입니다.
현재의 SOTA 모델 대부분은 트랜스포머 아키텍처에서 파생되었습니다. 트랜스포머는 Vaswani 등 연구진의 전설적인 논문 “Attention Is All You Need”에서 소개되었으며, 인코더와 디코더라는 두 가지 핵심 아키텍처 블록으로 구성됩니다.
이후에 나온 모든 모델은 이러한 아키텍처 블록들과 어떤 식으로든 연관되어 있었습니다. 구글의 BERT 인코더 블록만 있었습니다. OpenAI의 GPT-2 디코더 블록만 있었고, 등등.
아키텍처가 제각각이고 학습 데이터셋도 위키피디아, 위키피디아 + 토론토 북 코퍼스 등으로 서로 달라서, 이들 모델과 해당 SOTA 성과를 객관적으로 비교할 수 없습니다. 결국 각 모델은 사전 학습 목표, 비라벨 데이터셋, 전이 학습 접근 방식, 아키텍처가 모두 다릅니다.
T5는 모든 NLP 작업을 하나의 “텍스트‑투‑텍스트” 프레임워크로 다루는 방식을 도입했으며, 여기서 모든 과제는 (번역, 분류등)에서 모두 동일한 기본 구조를 따르며, 텍스트를 입력으로 받아 텍스트를 출력으로 생성합니다. 즉, 우리는 동일한 모델, 동일한 하이퍼파라미터, 동일한 손실 함수 모든 작업 전반에 걸쳐.
T5 트랜스포머 모델은 어떻게 작동하나요?
T5 트랜스포머 모델은 표준 트랜스포머 모델과 동일한 인코더‑디코더 구조를 사용하여 작동합니다. 인코더와 디코더가 짝을 이루는 블록 12쌍으로 구성되어 있습니다. 각 블록에는 자기 주의 메커니즘, 피드포워드 네트워크, 그리고 선택적으로 인코더‑디코더 어텐션이 포함됩니다.
원래 트랜스포머와 같은 아키텍처인데, 어떻게 SOTA를 달성할 수 있나요?
이를 이해하려면 먼저 T5 모델의 두 가지 고유한 특징을 이해해야 합니다.
- 입출력 표현: 텍스트‑투‑텍스트 프레임워크
- 학습 데이터셋: C4 데이터셋
1. 입출력 표현: 텍스트‑투‑텍스트 프레임워크
앞서 설명했듯이, 입력으로 텍스트를 넣고 출력으로 텍스트를 받습니다. 이를 통해 모든 작업에서 동일한 모델, 동일한 하이퍼파라미터, 동일한 손실 함수를 사용할 수 있습니다.
이는 입력 시퀀스에 작업별 접두어를 추가하고, 접두어에 특화된 출력을 생성하도록 모델을 사전 학습함으로써 이루어집니다.
몇 가지 NLP 작업에서 이것이 어떻게 이루어지는지 살펴보겠습니다. 이 섹션에서는 프롬프트를 생성하고, 아래에서 코드와 함께 동작 방식을 보여 드립니다.

이제 시작해 봅시다.
1.1 텍스트 요약
텍스트 요약은 긴 입력 문서를 받아 그 핵심 내용을 간결하게 정리한 요약본을 생성하는 NLP 작업입니다. 저는 원피스 만화의 열성 팬이라, 원피키아의 원피스 문서 중 일부를 가져와 요약해 보겠습니다.
요약을 수행하려면 입력 시퀀스 앞에 “summarize:” 접두어를 추가해야 합니다.
1.2 언어 번역
언어 번역은 한 언어로 된 텍스트를 입력으로 받아, 동일한 내용을 다른 언어로 번역해 출력하는 NLP 작업입니다. T5 모델은 C4 데이터셋으로 학습되었으며, 이 데이터셋에는 영어, 독일어, 프랑스어, 루마니아어가 포함되어 있습니다.
T5를 사용하면 이들 언어 간에 번역할 수 있습니다.
이제 영어에서 프랑스어로 번역해 보겠습니다. 번역을 수행하려면 입력 시퀀스 앞에 “translate English to French: ” 접두어를 추가해야 합니다.
우리의 프롬프트: “translate English to French: You should definitely watch 'One Piece', it is so good, you will love the comic book.”
1.3 텍스트 분류: 텍스트 함의
텍스트 함의는 NLP 작업으로, 모델에 전제와 가설 두 문장을 제공해 이 둘의 관계를 판단합니다. 이 두 문장을 바탕으로 출력은 함의, 모순, 중립의 세 가지 범주로 분류됩니다.
텍스트 함의 작업에서는 문장 쌍에 “mnli premise: ”와 “hypothesis: ”를 추가해야 합니다.
우리의 프롬프트: “mnli premise: I love One Piece. hypothesis: My feelings towards One Piece are filled with love.”
1.4 언어적 수용성
언어적 수용성은 NLP 작업으로, 모델이 주어진 텍스트 프롬프트를 바탕으로 문장이 문법적으로 올바른지 확인하는 과제입니다.
언어적 수용성 작업에서는 문장에 “cola sentence: ”를 추가해야 합니다. COLA는 문장의 수용성 여부가 라벨링된 데이터셋입니다.
우리의 프롬프트: “cola sentence: Luffy is a great pirate.”
1.5 문장 유사도
문장 유사도는 NLP 작업으로, 모델이 두 문장 쌍을 입력받아 그 유사도를 1–5 범위에서 평가합니다. 출력은 문자열 값으로 취급되며 0.2씩 증가하는 것으로 간주됩니다. 따라서 이는 1.0, 1.2, …, 5.0의 21개 클래스로 이루어진 텍스트 분류 작업으로 볼 수 있습니다.
문장 유사도 작업에서는 문장 쌍에 “stsb sentence 1: ”와 “sentence 2: ”를 추가해야 합니다.
우리의 프롬프트: “stsb sentence 1: 루피는 전쟁에서 싸우고 있었다. sentence 2: 루피의 전투 스타일은 우스꽝스럽다.”

텍스트 처리 작업, 작성자 이미지
2. 학습 데이터셋: C4 데이터셋
Colossal Clean Crawled Corpus, C4는 인터넷에서 수집된 750GB 규모의 정제된 영어 텍스트입니다. 이 데이터셋은 공개 웹 아카이브인 Common Crawl에서 수집되었습니다.
Common Crawl에서 데이터를 추출한 후, 저자들은 비속어, 로렘 입숨과 같은 채움 문장, 코드 괄호 “{”, 중복 항목, 그리고 문장 부호로 끝나지 않는 문장을 제거했습니다.
[[TRANSLATION_FAILED]]
[[TRANSLATION_FAILED]]
[[TRANSLATION_FAILED]]
[[TRANSLATION_FAILED]]
[[TRANSLATION_FAILED]]
[[TRANSLATION_FAILED]]
[[TRANSLATION_FAILED]]
[[TRANSLATION_FAILED]]
원피스는 인류 역사상 가장 위대한 이야기다.
손상된 스팬: 원피스는 인류 역사상 <X> 이야기 <Y>다.
타깃: <X>가장 위대한<Y>이야기<Z>
2. 학습:
앞서 설명했듯이 T5는 C4 데이터셋으로 학습되었다. 저자들은 실험을 통해, 길이 512인 시퀀스를 2의 11제곱개로 구성한 배치 크기로 100만 스텝 학습할 때 성능이 가장 우수하다는 결론에 도달했다.
3. 모델:
T5는 매개변수 수와 모델 크기가 다른 5가지 변형 모델로 제공된다.
- 베이스: BERT_base와 유사하다. 매개변수 2억 2200만 개의 기준 모델이다.
- 스몰: 베이스 모델을 축소한 버전이다. 인코더와 디코더가 각각 6개 층으로, 매개변수는 6천만 개뿐이다.
- 라지: 베이스를 확장한 버전으로, 매개변수 7억 7000만 개를 갖는다.
- 3B: 베이스를 확장한 버전으로, 매개변수 30억 개를 갖는다.
- 11B: 베이스를 확장한 버전으로, 매개변수 110억 개를 갖는다.
결과
T5(11B)은 대부분의 NLP 과제에서, 구체적으로 24개 중 18개 과제에서 최고 성능을 달성했다. 이 결과를 가능하게 한 주된 요인은 데이터셋의 규모 확장과 정제 수준이었다.

T5 결과, T5 논문 저자 제공 이미지
T5 대 LongT5
T5 모델에는 두 가지 주요 단점이 있다:
- 고정 입력 길이
- 모델 크기
T5에서는 일반적으로 512토큰 미만의 짧은 입력 시퀀스만 넣을 수 있다. 이는 “제곱에 비례하는 계산 증가” 때문인데, 입력 시퀀스 길이에 따라 계산 자원이 제곱으로 증가한다. 그 결과 학습 시간과 메모리 사용량이 늘어난다.
이 두 가지 문제는 새로운 LongT5가 해결한다. LongT5는 Transient Global(TGlobal) 메커니즘으로 T5를 확장한 모델이지만, 여기서는 TGlobal에 대해서는 다루지 않는다.
LongT5는 요약, 질의응답 등 다양한 NLP 과제에서 T5보다 더 나은 성능을 달성한다.
결과는 여기에서 확인할 수 있다:

T5와 LongT5 비교, LongT5 논문 저자 제공 이미지
T5 모델을 언제 사용하면 좋을까?
마지막으로, 이제 우리가 직접 T5 모델을 시험해 볼 수 있다!
앞서 설계한 프롬프트들을 모델에 입력해 보겠다.
접두사만 빼고 모든 과제에서 동일한 구조를 따르겠다.
먼저 필요한 라이브러리를 임포트하고 설정을 진행해야 한다. tokenizer 그리고 model.
모든 작업에서 입력 시퀀스를 모으고, 입력을 인코딩한 뒤, 모델을 통해 출력을 생성하고, 그 출력을 디코딩하겠다.
기억해 두자. 이 …에서 출력 결과를 확인하고 직접 코드를 실행해 볼 수 있다.
0. 라이브러리 임포트
!pip install transformers!pip install sentencepiece#import librariesimport torchfrom transformers import T5Tokenizer, T5ForConditionalGeneration#set up tokenizer and modeltokenizer = T5Tokenizer.from_pretrained('t5-small')model = T5ForConditionalGeneration.from_pretrained('t5-small', return_dict=True)
1. 텍스트 요약
one_piece_sequence = ("The series focuses on Monkey D. Luffy, a young man made of rubber, who, inspired by his childhood idol,""the powerful pirate Red-Haired Shanks, sets off on a journey from the East Blue Sea to find the mythical treasure,""the One Piece, and proclaim himself the King of the Pirates. In an effort to organize his own crew, the Straw Hat Pirates,""Luffy rescues and befriends a pirate hunter and swordsman named Roronoa Zoro, and they head off in search of the ""titular treasure. They are joined in their journey by Nami, a money-obsessed thief and navigator; Usopp, a sniper ""and compulsive liar; and Sanji, a perverted but chivalrous cook. They acquire a ship, the Going Merry, and engage in confrontations""with notorious pirates of the East Blue. As Luffy and his crew set out on their adventures, others join the crew later in the series, ""including Tony Tony Chopper, an anthropomorphized reindeer doctor; Nico Robin, an archaeologist and former Baroque Works assassin; ""Franky, a cyborg shipwright; Brook, a skeleton musician and swordsman; and Jimbei, a fish-man helmsman and former member of the Seven ""Warlords of the Sea. Once the Going Merry is damaged beyond repair, Franky builds the Straw Hat Pirates a new ship, the Thousand Sunny,""Together, they encounter other pirates, bounty hunters, criminal organizations, revolutionaries, secret agents, and soldiers of the""corrupt World Government, and various other friends and foes, as they sail the seas in pursuit of their dreams.")inputs = tokenizer.encode("summarize: " + one_piece_sequence,return_tensors='pt',max_length=512,truncation=True)summarization_ids = model.generate(inputs, max_length=80, min_length=40, length_penalty=5., num_beams=2)summarization = tokenizer.decode(summarization_ids[0])print(summarization)
이렇게 하면 다음과 같은 결과가 나온다:

2. 언어 번역
language_sequence = ("You should definitely watch 'One Piece', it is so good, you will love the comic book")input_ids = tokenizer("translate English to French: "+language_sequence, return_tensors="pt").input_idslanguage_ids = model.generate(input_ids)language_translation = tokenizer.decode(language_ids[0],skip_special_tokens=True)print(language_translation)
이렇게 하면 다음과 같은 결과가 나온다:

3. 텍스트 분류: 텍스트 함의
entailment_premise = ("I love One Piece.")entailment_hypothesis = ("My feelings towards One Piece is filled with love")input_ids = tokenizer("mnli premise: "+entailment_premise+" hypothesis: "+entailment_hypothesis, return_tensors="pt").input_idsentailment_ids = model.generate(input_ids)entailment = tokenizer.decode(entailment_ids[0],skip_special_tokens=True)print(entailment)
이렇게 하면 다음과 같은 결과가 나온다:

4. 문법 적합성
sentence = ("Luffy is a great pirate.")input_ids = tokenizer("cola: "+ sentence, return_tensors="pt").input_idssentence_ids = model.generate(input_ids)sentence = tokenizer.decode(sentence_ids[0],skip_special_tokens=True)print(sentence)
이렇게 하면 다음과 같은 결과가 나온다:

5. 문장 유사도
stsb_sentence_1 = ("Luffy was fighting in the war.")stsb_sentence_2 = ("Luffy's fighting style is comical.")input_ids = tokenizer("stsb sentence 1: "+stsb_sentence_1+" sentence 2: "+stsb_sentence_2, return_tensors="pt").input_idsstsb_ids = model.generate(input_ids)stsb = tokenizer.decode(stsb_ids[0],skip_special_tokens=True)print(stsb)
이렇게 하면 다음과 같은 결과가 나온다:

요약
이 블로그 글에서는 T5 모델, 텍스트-투-텍스트 프레임워크, 그리고 다양한 NLP 작업을 소개했습니다.
또한 요약, 번역, 텍스트 함의, 문법 적합성, 문장 유사도 작업에서 T5를 직접 실험해 보았습니다.
다른 모델의 워크스루도 보고 싶다면 아래에 댓글로 알려 주세요. 가능한 한 준비해 보겠습니다!
Add a comment