Post

자연어 처리(NLP)와 트랜스포머

자연어 처리(Natural Language Processing)

NLP는 인간의 언어(human language)와 관련된 모든 것을 이해하는 데 중점을 둔 언어학 및 기계 학습의 한 분야입니다.

NLP 작업은 단일 단어를 개별적으로 이해하는 것은 물론 해당 단어의 컨텍스트, 즉 주변 문맥도 함께 이해할 수 있도록 하는 것을 목표로 합니다.

다음은 일반적인 NLP 태스크 종류와 그 예시들을 보여주고 있습니다.

  • 전체 문장을 분류하기: 리뷰의 감정을 식별하고, 이메일이 스팸인지 감지하고, 문장이 문법적으로 올바른지 또는 두 문장이 논리적으로 관련되어 있는지 여부를 판단합니다.

  • 단일 문장에서 각 단어를 분류하기: 문장의 문법적 구성요소(명사, 동사, 형용사) 또는 명명된 개체(개체명, e.g., 사람, 위치, 조직) 식별

  • 텍스트 컨텐트 생성하기: 자동 생성된 텍스트로 프롬프트 완성, 마스킹된 단어로 텍스트의 공백 채우기

  • 텍스트에서 정답 추출하기: 질문과 맥락이 주어지면, 맥락에서 제공된 정보를 기반으로 질문에 대한 답변을 추출

  • 입력 텍스트에서 새로운 문장을 생성하기: 텍스트를 다른 언어로 번역, 텍스트 요약




트랜스포머(Transformers)모델 아키텍처

트랜스포머 모델은 문장 속 단어와 같은 순차 데이터 내의 관계를 추적해 맥락과 의미를 학습하는 신경망입니다. 트랜스포머 모델 모든 종류의 NLP 작업을 해결하는 데 사용됩니다.

아래 그림은 Transformer 모델의 (짧은) 역사에서 참조할 수 있는 몇 가지 주요 모델들입니다.

image


Transformer 모델의 일반적인 아키텍처

모델은 주로 두 개의 블록으로 구성됩니다.

image

인코더(Encoder) (왼쪽)

image

  • 인코더는 sentence를 input으로 받아 하나의 vector를 생성하는 함수
  • 문장의 문맥을 함축해 담은 vector
  • 문장의 정보들을 빠뜨리지 않고 압축하는 것을 목표로 학습됨.


디코더(Decoder) (오른쪽)

image

  • 디코더는 context와 sentence를 입력으로 받아 sentence를 출력


어텐션 계층 (Attention layers)

Transformer 모델의 가장 중요한 특징은 어텐션 레이어(attention layers) 라는 특수 레이어로 구축된다는 것입니다. 이 레이어는 입력된 단어들이 각각 어떤 단어와 연관이 있는지, 데이터 전체에서 어떤 단어와 문장이 중요한지 등을 판단하는 역할을 합니다.

이것을 상황에 맞게 설명하기 위해서, 영어로 된 텍스트를 프랑스어로 번역하는 작업을 고려해 봅시다. “You like this course”라는 입력이 주어지면 번역 모델은 “like”라는 단어에 대한 적절한 번역을 얻기 위해 인접 단어 “You”에도 주의를 기울여야 합니다. 왜냐하면 프랑스어에서 동사 “like”는 주어(subject)에 따라 다르게 활용되기 때문입니다. 그러나 문장의 나머지 부분(“this course”)은 해당 단어(“like”)의 번역에 그다지 유용하지 않습니다. 같은 맥락에서, “this”를 번역할 때, 모델은 “course”라는 단어에도 주의를 기울여야 합니다. “this”는 연결된 명사가 남성(masculine)인지 여성(feminine)인지에 따라 다르게 번역되기 때문입니다. 위와 마찬가지로, 문장의 다른 단어들(“You”, “like”)은 “this”의 번역에 중요하지 않습니다. 더 복잡한 문장이나 더 복잡한 문법 규칙의 경우, 모델은 개별 단어를 적절하게 번역하기 위해 문장에서 해당 단어와 멀리 떨어진 단어에도 특별한 주의를 기울여야 합니다.


Transformer 아키텍처

image


트랜스포머는 입력되는 데이터를 한번에 입력받습니다. 그 다음, 위에서 설명한 어텐션이라고 하는 방법을 사용해 입력된 단어들이 각각 어떤 단어와 연관이 있는지, 데이터 전체에서 어떤 단어와 문장이 중요한지 등을 판단하여 이를 기반으로 한 벡터를 저장합니다.


image


트랜스포머 모델은 입력 크기와 출력 크기가 모두 동일한 6개의 인코더와 6개의 디코더로 구성됩니다.

인코더는 주어진 데이터에 Self-Attention을 적용하여 데이터의 토큰들 사이의 관계를 판단하고, 이를 기반으로 데이터를 변형합니다. 인코더의 입력과 출력 크기가 동일하기 때문에, 인코더의 출력은 다음 인코더의 입력으로 사용될 수 있습니다.

6개의 인코더를 거쳐 정제된 데이터는 이어서 6개의 디코더에 입력뒵니다. 위 그림과 같이, 디코더는 인코더와 달리 이전 계층의 출력에 더불어 인코더의 마지막 출력을 입력으로 받습니다.

디코더는 이전 계층의 출력에 Self-Attention을 적용하여 변형하고, 이를 쿼리 삼아 인코더의 마지막 출력에 대한 Cross Attention을 수행합니다. 이는 인코딩 된 정보를 디코더가 원하는 형태로 서서히 변형하는 과정입니다.

결과적으로 입력 데이터는 6개의 인코더로 인코딩 된 후, 6개의 디코더에 의해 원하는 대로 변형되어 출력됩니다.

예를 들어 한국어를 영어로 번역하는 트랜스포머 모델은 “나는 커피를 좋아해”라는 문장을 인코더가 변형한 뒤, 이를 디코더가 “I love coffee”라는 형태로 변형하는 것입니다.




📑 참고 자료

자연어처리 (Natural Language Processing)

Transformers는 어떻게 동작하는가?

예제로 보는 트랜스포머/어텐션 (Attention is All You Need)

This post is licensed under CC BY 4.0 by the author.