@senspond

>

빅데이터/AI 🍎>자연어 처리

자연어처리(NLP) 개요 - 자연어 처리란? 규칙기반 시스템 부터 RNN, 트랜스포머까지 발전과정 한눈에

등록일시 : 2024-06-03 (월) 04:36
업데이트 : 2024-06-03 (월) 09:48
오늘 조회수 : 3
총 조회수 : 442

    자연어처리(NLP) 개요 - 자연어 처리란? 규칙기반 시스템 부터 RNN, 트랜스포머까지 발전과정을 간략하게 정리를 해봤습니다.

    자연어 처리 개요

    자연어 처리(NLP : Natural Language Process)란 컴퓨터에 입력하기 위한 전처리, 자연어를 이해하는 과정, 자연어를 생성하는 과정을 모두 통틀어 이르는 말입니다.


    자연어(Natural Language)란?

    먼저 자연어라는 것이 무엇인지 설명해 봅니다. 언어는 크게 자연어인공어로 나눌 수가 있는데요.


    • 자연어(Natural Language)

      사람이 일상적으로 사용하는 자연적으로 만들어진 언어( 영어, 한국어, 일본어, 중국어, …)


    • 인공어(Artificial Language)

      사람이 특수한 의도를 가지고 만든 인공적으로 만든 언어, 수학기호, 프로그래밍 언어(C, java, python…)


    이렇게 정의를 할 수 있습니다.

    자연어처리는 주로 사람이 일상적으로 사용하는 언어에 대해서 컴퓨터가 이해하고 생성해 낼 수 있도록 연구하는 분야라고 할 수 있습니다.

    이 자연어 처리(NLP : Natural Language Process) 분야는 크게 NLU와 NLG로 나눌 수가 있는데요.


    자연어 이해(NLU : Natural Language Understanding)

    자연어를 컴퓨터가 이해하도록 하는데 목적이 있습니다.


    감정 분석(Sentiment Analysis) - 주어진 문장에 대해 긍정,부정,중립 등으로 감정을 분류하는 Task

    유사도 예측(Similarity Prediction) - 두 문장간의 유사도를 측정하는 Task

    자연어추론(Natural Language Inference) - 텍스트 간의 의미적 관계를 파악하는 Task

    적합성 판단 (Linguistic Acceptabillty) - 주어진 문장에 대해 문법적으로 맞는지 판별하는 Task

    기계독해(Reading Comprehension) - 주어진 문장에 대해 사용자가 던진 질문에 대한 답을 찾는 Task

    의도 분류(Intent Classification) - 주어진 문장이 어떤 의도를 가지고 있는지 파악하는 Task


    자연어 생성(NLG : Natural Language Generation)

    컴퓨터가 자연어를 생성해내는 작업입니다.


    문장 축약

    • summurization

    • Question Answering

    • Distractor Generation(ex.오지선다에서 오답 생성)

    문장 보강

    • short text expansion

    • topic-to-essay

    문장 재구성

    • style transfer (ex. 말투변형 표준어->사투리)

    • dialogue generation (ex. 챗봇)


    그런데 이렇게 분리해서 나눌 수 없는 Task들도 많이 존재합니다.

    한 예로 영어문장을 한글로 번역하는 작업만 봐도 자연어이해를 바탕으로 영어문장을 이해를 바탕으로 새로운 한국어로 생성해야 하니 자연어이해(NLU)와 자연어생성(NLG) 두 영역에 걸쳐있다고 할 수 있습니다.



    자연어 처리분야 역사적인 발전과정

    초기 자연어 처리분야는 규칙기반 알고리즘으로 처리하는 프로세스로 연구가 시작되었습니다.

    언어에 대한 규칙이 모델링 된 형태소 분석기를 통해 문장을 토큰화하고 어휘 사전기반으로 자연어처리를 하여 감정분석, 유사도 분석 등을 수행 할 수 있었습니다. 초기 자연어처리 분야의 발전에는 언어학자들의 공로가 상당히 컸다고 할 수 있습니다.



    초기 단계 (1950년대 - 1970년대) : 규칙기반 시스템

    • 초기 NLP 연구는 주로 규칙 기반 시스템에 초점을 맞췄습니다. 이 시스템은 문법 규칙과 사전을 사용하여 텍스트를 분석하고 처리했습니다.

    • 대표적인 초기 시스템으로는 George MillerWordNet (1969)과 Joseph WeizenbaumELIZA (1966)가 있습니다.

    • WordNet은 단어와 그 의미 관계를 나타내는 어휘 데이터베이스이며, ELIZA는 간단한 심리 상담 시스템입니다.

    • 1970년 대에 TF-IDF(Term Frequency-Inverse Document Frequency), DTM(Document-Term Matrix) 개념이 등장합니다.


    통계적 접근 방식의 등장 (1980년대 - 1990년대)

    • 1980년대에는 통계적 모델이 NLP 연구에서 주류가 되었습니다. 이 모델은 방대한 양의 텍스트 데이터를 사용하여 언어의 패턴을 학습했습니다.

    • 대표적인 통계적 NLP 모델로는 IBMstatistical machine translation (SMT) 시스템 (1990년대)과 StanfordPart-of-Speech (POS) tagger (1990년대)가 있습니다.

    • SMT 시스템은 통계적 모델을 사용하여 한 언어를 다른 언어로 번역하는 시스템이며, POS tagger는 단어의 품사를 예측하는 시스템입니다.


    딥러닝의 도입과 발전 (2000년대 - 현재)

    • 2000년대 이후 딥러닝 기술의 발전은 NLP 분야에도 큰 영향을 미쳤습니다. 딥러닝 모델은 인간 수준의 성능을 달성하는 NLP 시스템 개발을 가능하게 했습니다.

    • 대표적인 딥러닝 기반 NLP 모델로는 GoogleBERT (2018)와 OpenAIGPT-3 (2020)가 있습니다.

    • BERT는 자연어 이해에 좋은 성능을 보여주는 모델이며, GPT 계열은 텍스트 생성에 강점이 있는 모델입니다.


    딥러닝을 통한 자연어 처리분야 발전과정

    딥러닝을 통한 자연어 처리 분야는 정말 오랜시간 동안 RNN 기반으로 발전해 왔습니다.


    하지만 Transformer 등장 이후 최신 트랜드는 몽땅 뒤바뀌게 되었는데요. RNN부터 차근차근 간략하게 알아봅시다.



    순환 신경망 (Recurrent Neural Network, RNN) 기반

    순환 신경망 모델은 시계열 데이터 처리에 좋은 성능을 보여주는 모델입니다.

    과거 입력 정보를 기억하여 현재 입력을 처리하는 방식으로 작동합니다.

    기계 번역, 음성 인식, 시계열 예측 등 다양한 NLP 작업에 활용되었습니다.


    RNN의 종류

    바닐라 RNN

    — 초기버전의 RNN 입니다. 바닐라 RNN이라고도 합니다.

    — 다음과 같은 문제로 인해 대체로 LSTM 등으로 개선된 RNN을 사용합니다.


    장기 의존성 문제:

    • 과거 정보를 기억하여 현재 입력을 처리하는 방식으로 작동하기 때문에, 너무 오래 전의 정보를 기억해야 하는 경우 성능이 저하될 수 있습니다. 예를 들어, 길이가 긴 문장에서 맨 앞 단어와 맨 뒤 단어 간의 관계를 학습하는 데 어려움을 겪을 수 있습니다.


    LSTM

    기존 RNN 모델에서 처음 입력의 정보가 뒤로 갈수록 손실되는 문제점으로 인해,

    정보를 좀더 오래 기억하기 위해 이전 정보들을 ADD 하여 다음 Time Step으로 같이 전달하는 방식의 LSTM 모델이 고안되었습니다.



    그외 다른 방식으로 RNN을 개선한 GRU도 있지만 넘어가겠습니다.

    바닐라 RNN보다는 개선이 되었고 좀더 오래기억할 수 있지만 LSTM도 역시나 장기의존성 문제를 가지고 있습니다.

    이는 RNN의 고질적이고 근본적인 문제점입니다.


    Seq2Seq 모델

    본래는 기계번역을 하기 위해 제안된 모델로 RNN 기반의 모델로 만들어진 인코더디코더 구조를 가지고 있습니다.

    아래 그림을 보시면 두개의 시퀀스가 있는것을 볼수가 있는데, 한시퀀스에서 다른 시퀀스로 전달 한다는 의미에서 seq2seq 라고 애기를 합니다.




    인코더는 입력 문장의 정보를 워드임베딩을 통해 하나의 컨텍스트 벡터( Context Vector)로 압축하여 디코더에게 전달합니다.

    이 벡터에는 입력 문장의 모든 정보가 하나로 압축 시키는데, 이 컨텍스트 벡터는 고정된 크기(fixed size)를 가집니다.

    그래서, 고정된 크기보다 입력 문장의 길이가 크다면 정보를 압축하는 과정에서 손실이 발생하게 된다는 문제점을 가지고 있습니다.

    이러한 현상을 보틀넥(Bottlenck) 이라고 부릅니다.


    그리고 디코더는 출발 신호를 알리는 <sos>을 시작으로 가장 확률이 높은 첫번째 토큰을 생성을 하는데, 그 출력값이 다시 입력으로 들어가며 <eos> 토큰이 나올때까지 순차적으로 반복하며 토큰을 생성하여 문장을 완성합니다.


    Seq2Seq with Attenstion 모델

    그런데 RNN기반의 자연어처리 모델들은 근본적으로 한가지 중요한 문제점을 가지고 있었습니다.

    사람은 문장을 순차적으로 이해를 하지 않습니다. 문장에서 중요한 단어를 무의식 적으로 집중(Attenstion)하여 문맥을 이해하지만,

    RNN 모델은 순차적으로 정보를 처리하기에 이러한 패러다임의 불일치로 인간처럼 이해하고 생성해내지 못하는 문제입니다.


    그래서 이러한 생각해서 출발해 seq2seq모델에 Attenstion 이라는 개념을 적용합니다.


    어텐션(Attention)이 도대체 뭐야?


    최근 자연어처리 분야에서 상당히 많이 언급되는 용어입니다. 그런데 정말 어렵습니다.

    Attenstion을 이해하지 못하면 Transformer도 이해할 수가 없고 최근 모델들은 더더욱 이해하기가 어려운데,

    저도 아직 100% 온전하게 이해하고 있지는 못하지만 이해한 내용들을 되도록 쉽게 설명해보겠습니다.


    사전적인 의미로는 주의(집중), 주목, 관심, 흥미 등의 뜻을 내포하고 있는데요.

    풀고자 하는 Task에서 핵심이 되는 정보에 집중하겠다는 것입니다.


    예를 들어, 감정분석을 하는 Task 가 있다고 하면 감성분석의 결과에 영향을 주는 특정 토큰에 보다 집중을 하자는 것입니다.


    데이터 : 자기야~ 대대실망이야. 나 생일인데 선물도 안사주고 미워.

    예측결과 : 부정


    이렇게 특정 단어에 집중하게 만드려면, 기계에게 먼저 전체 문맥을 보고 단어들 간의 관계성을 파악할 수 있어야 합니다.

    그래서 입력문장의 모든 토큰들 간의 유사도를 계산합니다.



    Attention(Q, K, V) = Attention Value


    어텐션 함수는 주어진 쿼리(Query)에 대해서 모든 키(key)와의 유사도를 계산합니다.

    구해낸 유사도를 키와 맵핑되어 있는 각각의 값(Value)에 반영합니다.

    그리고 유사도가 반영된 값(Value)들을 더해서 반환하는데, 이 값을 어텐션 벨류(Attension Value) 라고 합니다.


    말로는 이해하기 어려울 수 있는데,

    예를 들어 I am a Student 라는 문장을 사람을 [ 'I', 'am' , 'a', 'Student'] 라고 토큰화 될 때

    'I' 라는 쿼리(Query)에 대해서 자기자신을 포함한 모든 Key [ 'I', 'am', 'a', 'Student' ] 들 간의 유사도를 계산하고 각각의 Key에 맵핑되어 있는 Value에 업데이트를 하는 것입니다. 그리고 각각의 Query에 대해 모두 수행을 합니다.


    Q : 'I' , K : ['I' , 'am', 'a', 'Student'] , V : [0.7, 0.4, 0.2, 0.5] → 어텐션 Value [0.64, 0.2, 0.05, 0.75] → Softmax

    Q : 'am' , K : ['I' , 'am', 'a', 'Student'] , V : […].

    Q : 'a' , K : ['I' , 'am', 'a', 'Student'] , V : [… ]

    Q : 'Student', K : ['I' , 'am', 'a', 'Student'] , V : […]

    • 값은 그냥 임의로 써본 값들입니다.


    이런식으로 계산된 어텐션 벨류 값들을 어텐션 스코어 벡터라고 합니다.

    이 벡터를 소프트맥스(Softmax)로 통과 시키면 총합이 1인 0~1은 값으로 변환되는데,

    디코더는 이 어텐션 스코어 분포를 통해 디코더에서 각 토큰을 생성할 때마다 이 정보를 반영하여 다음 토큰을 예측합니다.




    seq2seq 에서 Attension 을 정리하면

    • Q : 모든 시점의 디코더 셀에서의 은닉상태

    • K, V : 모든 시점의 인코더 셀의 은닉상태



    어텐션 메카니즘의 종류



    어텐션 메카니즘에서 유사도를 측정하여 Value에 반영하여 어텐션 벨류를 만들어 내기 위해서 계산되는 방식에 따라 여러방식이 있습니다. 아래로 갈수록 좀더 나중에 제안된 어켄션 스코어 계산 방식입니다.


    • 바다나우 어텐션


      콘캣 어텐션(Concat Attention)


    score(st,hi)=WaTtanh(Wb[st;ht])score(s_t, h_i) = W_a^Ttanh(W_b[st;ht])


    • 루옹 어텐션


      • 닷 프로덕트 어텐션





      score(st,hi)=stThiscore(s_t, h_i) = s_t^Th_i


      t번째 시점에서 단어를 예측하고자 할때 디코더의 t번째 은닉 상태를 인코더의 모든 시점의 은닉 상태와 내적(Dot Product)를 통해

      계산하여 유사도를 구하는 방식입니다. 가장 이해하기 쉬운 어텐션 스코어 계산방법인 것 같습니다.


      • 제너럴 어텐션(General Attention)


    score(st,ht)=stTWahiscore(s_t, h_t) = s_t^TW_ah_i


    • 스케일드 닷 프로덕트 어텐션


      Attension is All you need 트랜스포머 논문에 처음 등장한 어텐션 스코어 계산방법입니다.


    score(st,hi)=stThinscore(s_t, h_i) = \frac{s_t^Th_i}{\sqrt{n}}


    Transformer 기반

    2017년에 구글에서 발표한 자연어처리 분야에 혁명적인 사건이 등장했습니다. Attension is All you need 라는 논문입니다.


    논문 제목에서부터 알 수 있듯이.. Attension 이 중요하다는 것을 애기하고 있는데, 이 논문이 파급력이 있었던 이유는


    인코더와 디코더는 RNN으로 구성해야 한다는 고정관념에 벗어나 RNN을 제거하고 Attension 메카니즘으로 구성했다는 것입니다.




    위 seq2seq 그림과 다르게 더이상 인코더와 디코더에 RNN 모델이 없는 것을 볼 수가 있습니다.

    그런데, 순차적으로 처리하지 않으니.. 문장을 구성하는 순서에 대한 정보를 파악하기 어렵다는 문제점이 생겼습니다.

    그래서 워드 임베딩을 할때 포지셔닝 인코딩(Positional Encoding)을 통해 위치정보 값을 더해주는 작업을 하게 됩니다.



    Self-Attenstion

    트랜스포머 구조도를 보면 크게 3가지의 Attenstion 이 있는데, 트랜스포머에서는 RNN을 사용하지 않고 순수 어텐션 메카니즘을 통해 인코더, 디코더를 구성하는데 이 인코더 자기 자신에게 적용되는 어텐션과 디코더 자기자신에 적용되는 어텐션이 바로 셀프 어텐션(Self-Attenstion) 입니다.


    • 인코더 : Multi-Head (Self) Attenstion

    인코더 자기 자신에게 수행되는 Self Attension입니다. Q, K, V 가 모두 인코더에 있는 어텐션 입니다.


    • 디코더 : Masked Multi-Head (Self) Attenstion

    디코더 자기 자신에게 수행되는 Self Attension입니다. Q, K, V 가 모두 디코더에 있는 어텐션 입니다.

    인코더의 Self 어텐션과 다르게 디코더는 현재 시점에서 보다 미래에 있는 정보까지 알도록 학습을 시키면 성능을 일반화 시킬 수 없다는 개념에 의해 Masked 처리를 합니다.




    이렇게 Masked Attension 은 일반적인 어텐션과 다르게 순수 디코더 입장에서 자기자신보다 미래에 정보를 마스킹 처리한 Attension 을 사용합니다.


    • 인코더-디코더 : Multi-Head Attenstion


    그림에서 오른쪽 위에 있는 어텐션으로 기존 seq2seq Attenstion에 대응하는 어텐션입니다.

    디코더 은닉층의 쿼리(Q)를 입력받고 인코더로부터 나온 키(K)와 벨류(V)를 가지고 어텐션을 합니다.


    Multi-Head Attenstion


    트랜스포머 연구진은 한번의 어텐션을 수행하는 것보다 여러번의 어텐션을 병렬로 사용하는 것이 좀더 효과적이라고 주장을 했습니다.

    그래서 d𝑚𝑜𝑑𝑒𝑙의 차원을 num_heads개로 나누어 𝑑𝑚𝑜𝑑𝑒𝑙_num_heads의 차원을 가지는 Q, K, V에 대해서 num_heads개의 병렬 어텐션을 수행합니다





    그리고 닷 프로덕트 어텐션에서 n의 값에 루트를 씌운 값으로 나눠주는 어텐션 스코어 계산법을 적용한 스케일드 닷 프로덕트 어텐션 을 사용합니다.


    이 초기 트랜스포머는 seq2seq with Attenstion 모델에서 인코더와 디코더를 구성하던 RNN을 제거하고 어텐션 메카니즘을 사용하는 새로운 아이디어를 제시했는데, 이후 연구자들이 이 논문을 보고 트랜스포머의 Attension 메카니즘으로 구성된 인코더와 디코더 구조 하나를 깊은 층으로 쌓아올리는 형태로 사전학습시켜서 사용자의 입맛에 맞게 Output Layer를 끼워서 사용할 수 있는 모델들이 등장합니다.



    BERT(Bidirectional Encoder Representations from Transformers)


    BERT(Bidirectional Encoder Representations from Transformers)는 마스크 언어모델(Masked Language Model)입니다. 문장 중간에 빈칸을 만들고 해당 빈칸에 어떤 단어가 적절할지 맞추는 과정에서 프리트레인합니다. 빈칸 앞뒤 문맥을 모두 살필 수 있다는 점에서 양방향(bidirectional) 성격을 가집니다.


    BERT 구조를 나타낸 것입니다. 트랜스포머에서 디코더를 제외하고 인코더만 사용합니다.

    해당 논문에서는 하나의 output layer만을 pre-trained BERT 모델에 추가하면 Question Answering, Language Inference 등과 같은 NLP의 다양한 주요 task(총 11개)에서 (논문 나온 시점에서) SOTA를 달성 할 수 있었다고 말하고 있습니다.


    BERT는 GPT 처럼 다음 문장을 자연스럽게 생성하는 능력은 없지만, "당신에게 받은 OO를 보니 정말 기분이 좋아요." 와 같이 전체 문맥을 보고 빈칸에 들어갈 단어를 맞추는 Task에는 뛰어난 성능을 보여 줍니다.





    GPT(Generative Pre-trained Transformer)

    GPT(Generative Pre-trained Transformer)는 언어모델(Language Model)입니다. 이전 단어들이 주어졌을 때 다음 단어가 무엇인지 맞추는 과정에서 프리트레인(pretrain)합니다. 문장 시작부터 순차적으로 계산한다는 점에서 단방향(unidirectional)입니다.

    트랜스포머에서 인코더를 제외하고 디코더만 깊은층으로 쌓아올려 사전학습시킨 모델입니다.

    우리가 익히 알고 있는 ChatGPT의 전신이 되는 모델입니다.



    LLM(Large Langauge Model)

    이러한 트랜스포머 기반으로 등장하게 된 BERT, GPT 등은 점점 더 많은 데이터를 학습시킨 사전학습 모델로써 발전하게 됩니다.

    그리고 이러한 모델은 이제 LLM(Large Langauge Model) 이라고 부르기 시작했습니다.



    멀티모달(Multi Modal LLM) 시대

    본래 자연어처리 기술에서 시작하였지만 다양한 분야와 결합되는 멀티모달(Multi Modal LLM) 시대가 열리고 있습니다.


    Vision Transformer(ViT)

    2020년 발표된 Vision Transformer(ViT)는 트랜스포머 모델을 비전 분야에 적용한 것으로, 입력 이미지를 패치로 분할해 트랜스포머의 인코더에 입력하고 어텐션을 사용해 입력 이미지의 다른 위치 간 상호의존성과 이미지의 글로벌 특징을 캡처할 수 있습니다.


    GPT-4V

    2024년 최근에는 OpenAI에서 GPT 모델 기반으로 자연어 텍스트를 입력받아 이미지를 생성하는 GPT-4V 가 공개하였습니다.



    참고 레퍼런스


    senspond

    안녕하세요. Red, Green, Blue 가 만나 새로운 세상을 만들어 나가겠다는 이상을 가진 개발자의 개인공간입니다.

    댓글 ( 0 )

    카테고리내 관련 게시글

    현재글에서 작성자가 발행한 같은 카테고리내 이전, 다음 글들을 보여줍니다

    @senspond

    >

    빅데이터/AI 🍎>자연어 처리

    • [현재글] 자연어처리(NLP) 개요 - 자연어 처리란? 규칙기반 시스템 부터 RNN, 트랜스포머까지 발전과정 한눈에

      자연어처리(NLP) 개요 - 자연어 처리란? 규칙기반 시스템 부터 RNN, 트랜스포머까지 발전과정을 간략하게 정리를 해봤습니다.
        2024-06-03 (월) 04:36