본문 바로가기
AI/자연어처리

14. 문장 임베딩 | ELmo / Transformer

by 사라리24 2024. 7. 4.

 

1. ELmo(Embeddings from Language Model)

 

 

09-09 엘모(Embeddings from Language Model, ELMo)

![](https://wikidocs.net/images/page/33930/elmo_DSHQjZD.png) 논문 링크 : https://aclweb.org/antholog…

wikidocs.net

 

 

1. ELmo 특징

  • 기존 워드 임베딩은 주변 문맥 정보를 활용하여 단어를 백터로 표현하는 방법을 사용하였음 (같은 표기의 단어를 문맥에 따라 다르게 임베딩 할 수 없는 한계가 있었음)
  • biLM이라는 구조를 사용 (양방향의 언어 모델링을 통해 문맥적인 표현을 반영하여 해당 입력 문자의 확률을 예측)
  • 대량의 자연어 코퍼스를 미리 학습하여 코퍼스 안에 포함된 일반화된 언어 특성들을 모델의 파라미터 안에 함축하여 사용하는 방법

2. 허깅페이스(Hugging Face)

  • 인공지능 자연어 처리 기술을 중심으로 한 오픈소스 커뮤니티와 소프트웨어 플랫폼을 제공하는 사이트(회사)
  • 특히 트랜스포머 모델들을 쉽게 사용할 수 있도록 하는 라이브러리(Transformers)로 유명
  • 플랫폼과 라이브러리 등은 개발자와 AI 기업들에게 쉽게 학습시키고 배포할 수 있도록 도움을 줌
  • 사이트:  https://huggingface.co/

 

  • 허깅페이스 토큰 발행 방법
더보기

 

 

 

 

 

 

 

import


       
        import json
        import requests

 
 

 

 

토큰 넣기


      
        API_TOKEN = '본인 토큰 넣기'
        headers = {"Authorization" : f"Bearer {API_TOKEN}"}

 
 

 

 

API에 POST 요청보내기


       
        def query(data):
          data = json.dumps(data)
          response = requests.request("POST", API_URL, headers=headers, data=data)
          return json.loads(response.content.decode("utf-8"))

 
 

 

◼(1) 


       
        data = query(
            {
                "inputs": {            
                  "question":"너의 이름이 뭐니?",
                  "context" : "나는 서울에 살고 있고 내 이름은 김사과야"
                }
            }
        )

 
 

 


       
        print(data)

 
{'score': 0.001044555683620274, 'start': 19, 'end': 23, 'answer': '김사과야'}

 

(2)


       
          data = query(
              {
                  "inputs": {
                  "question":"What's my name?",
                  "context" : "My name is Kim and I live in Seoul"
                  }
              }
          )
 
 

 


       
        print(data)

 
{'score': 0.8682517409324646, 'start': 11, 'end': 14, 'answer': 'Kim'}

 

 

2. 트랜스포머(Transformer)

  • 2017년 구글이 발표한 논문 "Attention is all you need"에서 발표된 모델 
  • Seq2Seq의 구조인 인코더-디코더를 따르면서도 어텐션(Attention)만으로 구현된 모델
  • RNN을 사용하지 않고 인토더-디토더 구조를 설계하였음에도 번역 성능에서 RNN보다 우수한 성능을 보여줬으며 2017년 이후 지금까지 다양한 분야에서 사용되는 범용적인 모델 
  • 논문: https://arxiv.org/abs/1706.03762
  • 참고사이트: https://wikidocs.net/31379
 

16-01 트랜스포머(Transformer)

* 이번 챕터는 앞서 설명한 어텐션 메커니즘 챕터에 대한 사전 이해가 필요합니다. 트랜스포머(Transformer)는 2017년 구글이 발표한 논문인 Attention i…

wikidocs.net

 

1. 트렌스포머의 특징

  • NN을 사용하지 않지만 seq2seq 모델의 구조처럼 인코드에서 입력 시퀀스를 입력받고, 디코더에서 출력 시퀀스를 출력하는 인코더-디코더를 사용함
  •  seq2seq 모델 구조에서는 인코더와 디코더 각각 하나의 RNN 모델 처럼 작동했다면 트랜스포머에서는 인코더와 디코더 단위가 N개로 확장되는 구조(논문에서는 6개씩 사용)

2. 포지션널 인코딩(Positional Encoding)

  • 트랜스포머는 단어의 위치 정보를 얻기 위해 각 단어의 임베딩 백터에 위치 정보들을 더하여 모델의 입력으로 사용 
  • 위치 정보를 가진 값을 만들디 위해 sin, cos함수를 사용(pos은 입력 문장에서의 임베딩 백터의 위치를 나타냄, (pos, i)의 i는 임베딩 백터 내의 차원의 인덱스를 의미)
  • 임베딩 백터 내의 차원의 인덱스가 짝수인 경우네는 sim함수의 값을 사용하고, 홀수인 경우에는 cos함수의 값을 사용하는 구조
  • 각 임베딩 백터에 표지셔널 인코딩의 값을 더하면 같은 단어라고 하더라도 문장내의 위치에 따라 프랜스포머의 입력으로 들어가는 임베딩 백터의 값이 달라짐 

3. 트랜스포머 셀프 어텍션

  • 어텐션을 스스로에서 수행한다는 의미
  • 셀프 어텐션은 하나의 문장 내에서 단어 간에 관계를 파악하기 위해 사용하는 어텐션 매커니즘으로 Query, Key, Value가 동일
  • Q, K, V 백터를 얻었다면 가존의 어텐션 매터니즘과 동일하게 작동
  • 각 Q백터는 모든 K백터에 대해서 어텐션 스코어를 구하고, 어텐션 분포를 구한 뒤에 모든 V백터를 기중합해서 어텐션 값 또는 켄텍스트백터를 구할 수 있고 이를 Q백터에 반복
  • 각 단어에 대한 Q, K, V백터를 구하고 스케일드 닷 프로덕트 어텐션을 수행했던 과정들은 백터 연산이 아니라 행렬 연산을 사용하면 일관 연산이 가능

4. 멀티헤드 어텐션

  • 어텐션에서는 d_model의 차원을 가진 단어 백터를 num_heads로 나눈 차원으로 어텐션을 수행
  • 트랜스포머 연구진은 한 번의 언탠션을 하는 것 보다 여러 번의 어텐션을 병렬로 사용하는 것이 더 효과적이라고 판단
  • d_model의 단어 임베딜을 차원 축소하는데 사용되는데 사용되는 가중치 행렬의 값은 8개의 어텐션 헤드마다 전 다름
  • 병렬 어텐션을 모두 수행하면 모든 어텐션 헤드를 연결하여 모두 연결된 어텐션 헤드 행렬의 크기가 (seq_len, d_model)

5. Position-wise FFNN(Feed Forward Neural Network)

  • 우리가 알고있는 일반적인 deep neural network의 feed forward 신경망
  • 각각의 학습 노드가 서로 완전하게 연결된 Fully-connected NN라고 해석할 수 있음

6. 잔차 연결과 레이어 정규화

  • sublayer의 출력에 입력 값을 더해주는 기법
  • 입력과 출력은 FFNN을 자니기 때문에 동일한 차원을 가지므로 덧셈이 가능
  • 잔차 연결을 거친 결과는 Layer Normalization 과정을 거침
  • 수식으로 구현된 인토더는 총 num_layer만큼을 순차적으로 한 후에 마지막 층의 인코더의 출력을 디코더에서 전달하면서 디코더 연산이 시작

7. 디코더(Decoder)

  • 디코더도 인코더와 동일하게 임베딩 층과 포지셔널 인토딩을 거친 후에 문장 행렬이 입력
  • 학습시 Teacher Forcing 기법을 사용하여 학습되므로 학습 과정에서 디코더는 정답 문장에 해당하는 문장 행렬을 한 번에 입력
  • seq2seq는 정답을 하나씩 넣어주지만, 츠랜스포머는 문장을 통째로 넣어주기 때문에, 현 시점의 정답이 아니라 이후에 나올 정답 단어들까지 참조
  •  Look-ahead mask 기법을 사용하여 현 시점의 정답이 아니라 이후에 나올 정답 단어들까지 창조하지 않도록 함

8. 트랜스포머 파라미터


 

 

 

3. [NLP] 자연어 작업 종류

https://dadev.tistory.com/entry/NLP-%EC%9E%90%EC%97%B0%EC%96%B4-%EC%9E%91%EC%97%85-%EC%A2%85%EB%A5%98

 

 

'AI > 자연어처리' 카테고리의 다른 글

16. 문장 임베딩 | GPT  (0) 2024.07.05
15. 문장임베딩 | BERT  (1) 2024.07.05
13. 문장 임베딩 | Attention Meshanism  (0) 2024.07.04
12. 문장 임베딩 | Seq2Seq  (1) 2024.07.03
11. LSTM과 GRU  (0) 2024.07.02