Notice
Recent Posts
Recent Comments
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

AI기록장

[파이토치 딥러닝 프로젝트] 텍스트 생성(Text generation) 본문

DL/개념정리

[파이토치 딥러닝 프로젝트] 텍스트 생성(Text generation)

SanL 2024. 3. 13. 14:34

‣ 해당 블로그는 ⌜실전! 파이토치 딥러닝 프로젝트⌟를 공부하며, 배운것들을 토대로 정리되었음을 알려드립니다.

 


텍스트 생성이란?

인공지능이 기존의 텍스트로부터 새로운 텍스트를 생성하는 포로세스.

뉴스 기사, 시, 코드, 스크립트, 소설, 잡지 문구 등과 같이 텍스트 생성을 다루는 자연어 처리(NLP)의 한 분야라고 생각하면 좋겠다. 텍스트 생성은 작사, 기사의 주요 문구, 제목, 이메일 작성 등 창의적으로 텍스트를 생성해야하는 다양한 분야에도 널리 사용되고 있다.

 

생성형 AI에서의 텍스트 생성 원리

텍스트 생성은 대규모 텍스트 데이터를 미리 학습한 머신러닝 모델을 사용하여, 또 다른 새로운 텍스트를 생성하는 프로세스를 갖고 있다. 단어와 구문 사이의 통계적 관계 및 수치적 관계를 이용하여 학습하고, 학습한 지식을 통해 다음 지식에 전달해 줌으로서 학습 데이터와 유사한 새로운 텍스를 생성하게 된다.

 

텍스트 생성의 대표적인 두 가지 유형

Seq2Seq(Seq-toSequence) 모델:

Seq2Seq 모델은 시퀀스를 다른 시퀀스로 변환하는 모델이다. ( ex - 번역, 요약, 대화 생성 등)

주로 인코더(encoder) 디코더(decoder)라는 두 부분으로 구성된다. 최근에는 트랜스모머 기반의 텍스트 생성기를 사용하는데, 이 방식은 Seq2Seq 모델의 발전된 형태로 RNN을 사용하지 않고도 장기 의존성을 처리할 수 있는 구조를 가지고 있다. 이전 글에서 작성한 바와 같이 Self-Attention 메커니즘을 사용하는 구조를 갖고 있다.

 

생성적 적대 신경망 (GAN) : 

GAN은 생상적 적대 신경망으로, 생성기(generator)와 판별기(discriminator)라는 두 개의 네트워크가 서로 경쟁하며 학습한다. 생성기는 실제와 유사한 데이터를 생성하려고 노력하고, 판별기는 생성된 데이터와 실제 데이터를 구별하려고 한다. GAN은 텍스트 생성기에 사용될 뿐만 아니라 이미지 생성에도 많이 사용되고 있다. GAN은 안정적인 학습이 어려운 경향이 있지만, 성능이 좋은 결과를 얻을 수 있는 혁신적인 모델이다.

 

텍스트 생성 모델에서의 생성 전략

생성전략이란?

훈련된 텍스트 생성 모델을 사용해 텍스트를 생성할 떄 일반적으로 단어 단위로 예측한다. 그런 다음 결과로 얻은 예측 단어 시퀀스를 통합해 텍스트를 예측한다. 단어 예측을 반복할 때 이전 K개 예측이 주어지면 다음 단어를 찾거나 예측하는 방법을 지정해야 한다.  이러한 방법을 '텍스트 생성 전략'이라고 한다.

 

<탐욕적 탐색>

탐욕적(Greedy)라는 이름은 앞에 얼마나 많은 시간 단계가 있든 모델이 현재 이터레이션에서 최대한 확률을 갖는 단어를 선택하기 때문에 붙었다. 해당 전략은 모델이 확률이 낮은 단어를 채택할 일이 없기 때문에 모델이 확률이 낮은 단어 뒤에 숨어있을 가능성이 높은 단어를 놓칠 가능성이 있다.

해당 다이어그램은 추후 실습에 대한 결과를 다이어그램으로 나타낸 것이다. 각 시간 단계에서  텍스트 생성 모델은 확률과 함께 나올 수 있는 단어를 출력한다. 좀 더 자세히 살펴보면, 모델은 텍스트를 생성하는 각 단계에서 "탐욕적 탐색 전략" 에 따라 확률이 가장 높은 단어를 선택했다. 하지만, 끝에서 두 번째 단계를 보게 되면, System,People, Future라는 각 단어를 비슷한 확률로 예측했으나, 그 중 가장 높은 System을 선택했다. 이것이 탐욕적 탐색 방식의 주요 한계이다. 또한, 탐욕적 탐색은 무작위성이 부족하여 반복적인 결과를 가져온다는 한계가 있다.

 

<Beam search>

"Beam search"는 탐욕적 탐색 기법을 다음 단어 확률이 아니라 전체 예측 시퀀스 확률을 기반으로 잠재적 후보 시퀀스 목록을 유지하는 방식으로 개발한 것이다. 다음 다이어그램을 보게 되면 이해가 쉽다.

 

해당 다이어그램은 Beam search의 실습 결과를 다이어그램으로 나타낸 것인데, 빔 크기가 3인 Beam search를 사용해 각각 5개의 단어로 구성된 3개의 후보 시퀀스를 생성했다. 좀 더 자세히 살펴보면, 이터레이션마다 가장 가능성이 높은 3개의 후보 시퀀스가 유지되는 것을 볼 수 있다. 시퀀스가 진행됨에 따라 가능한 후보 시퀀스 개수는 기하급수적으로 증가하지만, 우리는 그중 3가지의 시퀀스에만 관심이 있기 때문에 그 부분만 보면 된다. 이렇게하면 탐욕적 탐색처럼 잠재적으로 더 나은 시퀀스를 놓치는 일은 줄어든다. 하지만, Beam search 또한, 단조로운 결과를 가져온다는 것에 대한 한계가 여전히 존재했다.

 

<Top-k와 Top-p 샘플링>

항상 가장 높은 확률을 갖는 다음 단어를 선택하는 대신 상대적인 확률에 기반해 다음에 올 수 있는 단어 집합에서 단어를 임의로 샘플링할 수 있다. 예를 들어, 이전의 '탐욕적 탐색' 다이어그램을 보게 되면, Be, Know, Show는 각각 0.7, 0.2, 0.1의 확률을 갖는다. 이때 가장 높은 Be를 항상 뽑는 대신 각 단어의 확률에 기반하여 이 세 개의 단어 중 하나를 무작위로 샘플링하는 것이다. 10회를 반복한다했을 때 10개의 개별 텍스트를 생성한다면, 7번은 be가 뽑히고, 2번은 know, 1번은 show가 뽑힐 것이다. 이러한 방식으로 앞선 생성 전략의 단조로운 결과를 보다 해결할 수 있을 것이다.

 

그 중 가장 많이 사용하는 샘플링 방식이 Top-k와 Top-p 방식이다. "Top-k" 샘플링은 다음에 올 단어를 샘플링할 때 후보가 될 단어 개수인 매개변수 k를 미리 정의한다. 다른 모든 단어는 버리고 상위 k개의 단어에서 확률을 정규화하는 것이다. 즉, be,know,show에서 k가 2라면, show는 삭제되고 나머지 높은 2개를 사용하고, 확률을 0.78,0.22로 정규화해주는 것이다. 

 

"Top-p" 샘플링은 상위 k개 단어를 정의하는 대신 누적 확률 임곗값(p)을 정의한 다음 누적 확률이 p가 될 때까지 나온 단어를 유지할 수 있게하는 것이다. 만약 p가 0.7과0.9이라면 know와 show를 버리고 p가 0.9와 1.0 사이면 show를 버리고 p가 1.0이면 be,know,show 세 단어를 모두 유지하는 것이다.

 

즉, 위 샘플링 방식을 함께 사용한다면, 앞선 다른 생성 전략과는 다르게 좀더 창의적인 텍스트를 생성할 수 있을 것이다.

 

<트랜스포머 기반 텍스트 생성기 구현 - Pytouch>

해당 구현 과정은 트랜스포머 기반의 언어 모델을 통해 텍스트 생성기를 구현해볼 예정

text_generation

 

<텍스트 생성기로 사전 훈련된 GPT-2 사용 - Pytouch>

 

text_generation_out_of_the_box