언어 모델이란?

완료됨

생성형 AI 애플리케이션은 다음을 포함하여 NLP(자연어 처리) 작업을 수행하는 데 사용할 수 있는 특수한 유형의 기계 학습 모델인 언어 모델에 의해 구동됩니다.

  • 감정 확인 또는 텍스트 분류.
  • 텍스트 요약.
  • 여러 텍스트 원본의 의미 체계 유사성 비교.
  • 자연어 생성.

이러한 언어 모델의 기반이 되는 수학 원칙은 복잡할 수 있지만 이를 구현하는 데 사용되는 아키텍처에 대한 기본적인 이해는 작동 방식을 개념적으로 이해하는 데 도움이 될 수 있습니다.

변환기 모델

자연어 처리를 위한 기계 학습 모델은 수년 동안 발전했습니다. 오늘날 최첨단 대규모 언어 모델은 변환기 아키텍처를 기반으로 하며, 이 아키텍처는 NLP 작업을 지원하기 위해 어휘 모델링 및 특히 언어 생성에 성공한 것으로 입증된 일부 기술을 기반으로 빌드되고 이를 확장합니다. 변환기 모델은 대량의 텍스트로 학습되므로 단어 간의 의미 체계 관계를 나타내고 해당 관계를 사용하여 적합한 텍스트의 가능한 시퀀스를 결정할 수 있습니다. 충분히 큰 어휘를 포함하는 변환기 모델은 인간의 반응과 구별하기 어려운 언어 응답을 생성할 수 있습니다.

변환기 모델 아키텍처는 다음과 같은 두 가지 구성 요소 또는 블록으로 구성됩니다.

  • 학습 어휘의 의미 체계 표현을 만드는 인코더 블록.
  • 새 언어 시퀀스를 생성하는 디코더 블록.

인코더 및 디코더 블록이 있는 변환기 모델 아키텍처의 다이어그램.

  1. 이 모델은 인터넷이나 기타 공용 텍스트 원본 위치에서 가져온 대량의 자연어 텍스트를 학습합니다.
  2. 텍스트 시퀀스는 토큰(예: 개별 단어)으로 세분화되고 인코더 블록은 주의라는 기술을 사용하여 이러한 토큰 시퀀스를 처리하여 토큰 간의 관계를 결정합니다(예: 어떤 토큰이 시퀀스에서 다른 토큰의 존재에 영향을 미치는지, 같은 컨텍스트에서 일반적으로 사용되는 다른 토큰이 무엇인지 등을 파악할 수 있음).
  3. 인코더의 출력은 벡터의 각 요소가 토큰의 의미론적 속성을 나타내는 벡터(다중값 숫자 배열)의 컬렉션입니다. 이러한 벡터를 embeddings라고 합니다.
  4. 디코더 블록은 새 텍스트 토큰 시퀀스에서 작동하며 인코더에서 생성된 embeddings를 사용하여 적절한 자연어 출력을 생성합니다.
  5. 예를 들어, “내 개가 옛날에”와 같은 입력 시퀀스가 주어지면 모델은 주의 기술을 사용하여 입력 토큰과 embeddings에 인코딩된 의미론적 특성을 분석하여 “강아지”와 같은 문장의 적절한 완성을 예측할 수 있습니다.

실제로 아키텍처의 특정 구현은 다양합니다. 예를 들어 검색 엔진을 지원하기 위해 Google에서 개발한 BERT(Bidirectional Encoder Representations from Transformers) 모델은 인코더 블록만 사용하는 반면, OpenAI에서 개발한 GPT(생성형 사전 학습 트랜스포머) 모델은 디코더 블록만 사용합니다.

변환기 모델의 모든 측면에 대한 전체 설명은 이 모듈의 범위를 벗어나지만, 변환기의 일부 핵심 요소에 대한 설명은 생성형 AI를 지원하는 방법을 이해하는 데 도움이 될 수 있습니다.

토큰화

변환기 모델을 학습시키는 첫 번째 단계는 학습 텍스트를 토큰으로 분해하는 것입니다. 즉, 각 고유 텍스트 값을 식별하는 것입니다. 간단히 설명하기 위해, 학습 텍스트의 각 불연속 단어를 토큰으로 생각할 수 있습니다(실제로는 부분 단어 또는 단어와 문장 부호의 조합에 대한 토큰을 생성할 수 있음).

예를 들어 다음 문장을 살펴봅니다.

I heard a dog bark loudly at a cat

이 텍스트를 토큰화하기 위해 각 불연속 단어를 식별하고 토큰 ID를 할당할 수 있습니다. 예시:

- I (1)
- heard (2)
- a (3)
- dog (4)
- bark (5)
- loudly (6)
- at (7)
- *("a" is already tokenized as 3)*
- cat (8)

이제 문장을 토큰으로 나타낼 수 있습니다. {1 2 3 4 5 6 7 3 8}. 마찬가지로 "고양이 소리를 들었다"라는 문장은 {1 2 3 8}로 표현될 수 있습니다.

모델을 계속 학습시키면 학습 텍스트의 각 새 토큰이 적절한 토큰 ID를 사용하여 어휘에 추가됩니다.

  • meow(9)
  • skateboard(10)
  • 등등...

충분히 큰 학습 텍스트 세트를 사용하면 수천 개 토큰의 어휘를 컴파일할 수 있습니다.

포함

토큰을 간단한 ID로 나타내는 것(기본적으로 어휘의 모든 단어에 대한 인덱스를 만드는 것)이 편리할 수 있지만 토큰은 단어의 의미 또는 단어 간 관계에 대해 아무 것도 알려 주지 않습니다. 토큰 간 의미 체계 관계를 캡슐화하는 어휘를 만들기 위해 포함이라고 하는 컨텍스트 벡터를 정의합니다. 벡터는 정보의 다중 값 숫자 표현입니다(예: 각 숫자 요소가 정보의 특정 특성을 나타내는 [10, 3, 1]). 언어 토큰의 경우 토큰 벡터의 각 요소는 토큰의 의미 속성을 나타냅니다. 언어 모델의 벡터 요소에 대한 특정 범주는 일반적으로 단어가 함께 또는 유사한 컨텍스트에서 사용되는 방식에 따라 학습 중에 결정됩니다.

벡터는 여러 축을 따라 방향거리를 설명하는 다차원 공간의 선을 나타냅니다(이를 진폭크기라고 부르면 수학자 친구들에게 깊은 인상을 남길 수 있습니다). 토큰에 대한 포함 벡터의 요소를 다차원 공간의 경로를 따라 단계를 나타내는 것으로 생각하면 유용할 수 있습니다. 예를 들어 세 개의 요소가 있는 벡터는 3차원 공간에서의 경로를 나타내며, 요소 값은 앞/뒤, 왼쪽/오른쪽, 위/아래로 이동한 단위를 나타냅니다 전반적으로 벡터는 원점에서 끝까지 경로의 방향과 거리를 나타냅니다.

Embeddings 공간의 토큰 요소는 각각 토큰의 의미론적 속성을 나타내므로 의미론적으로 유사한 토큰은 벡터의 방향이 비슷한, 즉 같은 방향을 가리키는 벡터여야 합니다. 코사인 유사성이라는 기술은 두 벡터가 거리와 관계없이 비슷한 방향을 갖는지 여부를 확인하는 데 사용되므로 의미론적으로 연결된 단어를 나타냅니다. 간단한 예제로, 토큰에 대한 포함이 다음과 같은 세 가지 요소가 있는 벡터로 구성한다고 가정합니다.

  • 4("dog"): [10,3,2]
  • 8(“cat“): [10,3,1]
  • 9 ("강아지"): [5,2,1]
  • 10 ("스케이트보드"): [-3,3,2]

다음과 같이 이러한 벡터를 3차원 공간으로 그릴 수 있습니다.

3차원 공간에서 그린 토큰 벡터 다이어그램

“개”와 “강아지”에 대한 embedding 벡터는 거의 동일한 방향을 따라 경로를 설명하며, 이는 “고양이”의 방향과도 상당히 유사합니다. 그러나 '스케이트 보드'에 대한 포함 벡터는 매우 다른 방향으로 여정을 설명합니다.

참고 항목

이전 예제는 각 포함이 3차원만 있는 간단한 예제 모델을 보여줍니다. 실제 언어 모델에는 훨씬 더 많은 차원이 있습니다.

Word2Vec 또는 변환기 모델의 인코더 블록과 같은 언어 모델링 알고리즘을 포함하여 지정된 토큰 세트에 대한 적절한 포함을 계산할 수 있는 여러 가지 방법이 있습니다.

Attention

변환기 모델의 인코더 및 디코더 블록에는 모델의 신경망을 형성하는 여러 계층이 포함됩니다. 이러한 모든 레이어에 대해 자세히 알아볼 필요는 없지만 두 블록에서 사용되는 레이어 유형 중 하나인 주의 계층을 고려하는 것이 유용합니다. 주의는 텍스트 토큰 시퀀스를 검토하고 해당 토큰 간 관계의 강도를 정량화하는 데 사용되는 기술입니다. 특히 자체 주의는 하나의 특정 토큰을 둘러싼 다른 토큰이 해당 토큰의 의미에 미치는 영향을 고려합니다.

인코더 블록에서 각 토큰은 컨텍스트에 따라 주의 깊게 검사되며 벡터 포함에 적절한 인코딩이 결정됩니다. 벡터 값은 토큰과 이 토큰이 자주 나타나는 다른 토큰 간 관계를 기반으로 합니다. 이 상황별 접근 방식은 동일한 단어가 사용되는 상황에 따라 여러 포함을 가질 수 있음을 의미합니다. 예를 들어 "the bark of a tree"는 "I heard a dog bark"와 다른 것을 의미합니다.

디코더 블록에서 주의 계층은 시퀀스의 다음 토큰을 예측하는 데 사용됩니다. 생성된 각 토큰의 경우 모델에는 해당 지점까지 토큰 시퀀스를 고려하는 주의 계층이 포함됩니다. 모델은 다음 토큰이 무엇이어야 하는지 고려할 때 가장 영향이 큰 토큰을 고려합니다. 예를 들어, "I heard a dog" 시퀀스가 주어지면 주의 계층은 시퀀스의 다음 단어를 고려할 때 "heard" 및 "dog" 토큰에 더 큰 가중치를 할당할 수 있습니다.

I heard a dog [bark]

주의 계층은 실제 텍스트가 아닌 토큰의 숫자 벡터 표현을 사용합니다. 디코더에서 프로세스는 완성되는 텍스트를 나타내는 토큰 포함 시퀀스로 시작합니다. 처음 발생하는 작업은 위치 인코딩 계층이 각 포함에 값을 추가하여 시퀀스에서 해당 위치를 나타내는 것입니다.

  • [1,5,6,2](I)
  • [2,9,3,1](heard)
  • [3,1,1,2](a)
  • [4,10,3,2](dog)

학습 중에 목표는 이전 토큰을 기반으로 시퀀스에서 마지막 토큰에 대한 벡터를 예측하는 것입니다. 주의 계층은 지금까지 시퀀스의 각 토큰에 숫자 가중치를 할당합니다. 이 값을 사용하여 다음 토큰에 대해 가능한 벡터를 계산하는 데 사용할 수 있는 주의 점수를 생성하는 가중치 벡터에 대한 계산을 수행합니다. 실제로 다중 헤드 주의라는 기술은 포함의 다양한 요소를 사용하여 여러 주의 점수를 계산합니다. 그런 다음, 신경망을 사용하여 가능한 모든 토큰을 평가하여 시퀀스를 계속할 가능성이 가장 큰 토큰을 결정합니다. 이 프로세스는 시퀀스의 각 토큰에 대해 반복적으로 계속되며, 지금까지 출력 시퀀스는 다음 반복에 대한 입력으로 회귀적으로 사용되어 기본적으로 출력 토큰을 한 번에 하나씩 빌드합니다.

다음 애니메이션은 이것이 어떻게 작동하는지에 대한 단순화된 표현을 보여줍니다. 실제로 주의 계층에서 수행되는 계산은 더 복잡합니다. 그러나 원칙은 다음과 같이 단순화할 수 있습니다.

토큰에 가중치를 할당하고 다음 토큰을 예측하는 주의 계층을 보여 주는 애니메이션

  1. 토큰 포함 시퀀스는 주의 계층에 공급됩니다. 각 토큰은 숫자 값의 벡터로 표현됩니다.
  2. 디코더의 목표는 시퀀스의 다음 토큰을 예측하는 것이며, 이 토큰은 모델 어휘의 포함에 맞게 조정되는 벡터이기도 합니다.
  3. 주의 계층은 지금까지 시퀀스를 평가하고 각 토큰에 가중치를 할당하여 이 토큰이 다음 토큰에 미치는 상대적 영향을 나타냅니다.
  4. 가중치를 사용하여 주의 점수가 통해 다음 토큰에 대한 새 벡터를 계산할 수 있습니다. 다중 헤드 주의는 포함의 다양한 요소를 사용하여 여러 대체 토큰을 계산합니다.
  5. 완전히 연결된 신경망은 계산된 벡터의 점수를 사용하여 전체 어휘에서 가능성이 가장 큰 토큰을 예측합니다.
  6. 예측된 출력은 지금까지 시퀀스에 추가되어 다음 반복에 대한 입력으로 사용됩니다.

학습 중에 토큰의 실제 시퀀스를 알 수 있습니다. 시퀀스에서 현재 고려되는 토큰 위치보다 나중에 오는 토큰을 마스크합니다. 신경망에서와 마찬가지로 토큰 벡터의 예측 값은 시퀀스에 있는 다음 벡터의 실제 값과 비교되며 손실이 계산됩니다. 그런 다음, 손실을 줄이고 모델을 개선하도록 가중치를 증분 방식으로 조정합니다. 유추(새 토큰 시퀀스 예측)에 사용되는 경우 학습된 주의 계층은 지금까지 시퀀스에 맞게 의미 체계적으로 조정된 모델 어휘에서 가능성이 가장 큰 토큰을 예측하는 가중치를 적용합니다.

따라서 GPT-4(ChatGPT 및 Bing의 기반이 되는 모델)와 같은 변환기 모델은 텍스트 입력(프롬프트라고 함)을 사용하고 구문적으로 올바른 출력(완성이라고 함)을 생성하도록 설계되었습니다. 실제로 모델의 “마법“은 일관된 문장을 함께 묶을 수 있다는 것입니다. 이 능력은 모델 측의 "지식" 또는 "지능"을 의미하지 않습니다. 큰 어휘와 의미 있는 단어 시퀀스를 생성하는 능력입니다. 그러나 GPT-4와 같은 대규모 언어 모델을 매우 강력하게 만드는 것은 이 모델을 학습시킨 많은 데이터 양(인터넷의 퍼블릭 및 라이선스 데이터)과 네트워크의 복잡성입니다. 이를 통해 모델은 학습된 어휘의 단어 간 관계를 기반으로 하는 완성을 생성할 수 있습니다. 종종 동일한 프롬프트에 대한 인간의 대응과 구별할 수 없는 출력을 생성합니다.