[DL] 자연어처리 기초와 RNN

2026. 7. 30. 22:50·AI/Deep Learning
반응형

들어가며

이번에 lg aimers 9기 과정을 듣게되었다

딥러닝에 대해 공부하던 중 책에서는 자세히 다루지 않던 LLM, Transformer, RAG 등의 기술을 따로 배워보고 싶었는데

마침 lg aimers 9기 모집 시기였고 이번 기회에 온라인 교육 강의를 들으며 궁금했던 내용을 배우고

온라인 해커톤까지 한 번 도전해보고자 신청하게되었다

온라인 AI 교육 과정에서 다루는 내용 중 LLM 관련 내용들을 블로그를 통해 따로 정리해보고자 한다

 

이번 글에서는 자연어처리란 무엇인지, 어떤 과정으로 이루어져있는지 알아보고

자연어처리 기술을 이용한 언어 모델과 이를 구현하는 데에 사용되는 RNN에 대해 알아볼 것이다

 

자연어처리(NLP)

자연어 처리(Natural Language Processing)는 언어 AI 분야의 일종으로

사람의 언어를 컴퓨터가 읽고 쓸 수 있도록 구현한 기술이다

 

이 기술을 활용한 작업으로는

대화 시스템(챗봇), 요약, 번역, 스토리 생성 등이 있다

결국 사람의 언어를 컴퓨터가 해석하여 각종 작업을 수행한다고 볼 수 있다

그래서 이러한 자연어처리 시스템은 어떻게 구현되었는가가 우리에게 주요한 문제가 될 것이다

자연어처리 시스템은 크게 3가지로 나누어 동작한다

 

1. 전처리(Preprocessing)

사람의 언어를 컴퓨터가 이해하게 하기 위해서는 컴퓨터가 이해할 수 있는 형태로 변환을 해줘야한다

이를 전처리라고 하며 이 과정에서는 문장이라는 것을 단어의 단위로 쪼개는 것부터 시작한다

이를 위해서는 우선 Raw text를 단어의 리스트 형태로 바꿔야한다

위의 사진을 예시로 들면 "This is a sample text"를

["This", "is", "a", "sample", "text"] 로 변환시킨다

 

텍스트가 단어의 리스트로 변환이 되면

이 단어들을 Vector 형태로 만들어 주어야 한다

 

2. 임베딩(Embedding)

위에서 말했듯이 텍스트가 단어의 리스트 형태로 변환이 됐을 때

이를 Vector 형태로 만들어 주는 작업을 임베딩이라고 한다

단어 하나 당 하나의 Vector space를 갖게 된다고 생각하면 된다

 

이렇게 임베딩을 진행하게되면 텍스트를 숫자로 변환하여 모델이 처리할 수 있게되고

단어의 의미뿐만 아니라 문맥적 관계까지 벡터 공간에 반영할 수 있다

자세한 내용은 아래에서 다뤄보도록 하겠다

 

3. 모델링(Modeling)

이렇게 만들어진 Vector를 신경망 모델에 넣으면 학습이 이루어지고

최종적으로 Output을 만들어내게 되는데 이 과정을 모델링이라고 한다

 

예를 들어 감정 분석 모델이라고 가정하면

Output으로 "positive", "negative" 등의 Output을 내놓는다고 생각하면 된다

지금부터는 각 과정을 조금 더 세부적으로 알아볼 것이다

전처리(preprocessing)

앞서 말했듯이 전처리 과정에서는 텍스트를 단어 단위로 쪼개는 과정을 수행한다

이 때 문장을 단어의 리스트로 변환하는 과정을 Tokenization이라고 하며

각 단어를 Token이라고 부른다

 

Tokenization 과정을 거치고 나면 각 토큰을 단어장(Vocabulary)에 등록된 고유한 인덱스로 매핑시키는

Vocabulary Mapping 과정을 거친다

아래 그림에서 볼 수 있듯이 각 단어는 고유한 인덱스(Token ID)를 가지게된다

이 때 자주 나오지 않는 단어장에 없는 단어는 보통 unknown words로 처리한다

모든 단어들을 단어장에 넣게되면 연산량이 더욱 많아져 학습이 어려워진다

 

우리가 문장을 입력할 때 꼭 한 문장만 입력하는 것이 아니라

여러 문장을 입력하는 경우가 있는데 

여러 자연어 처리 모델들은 한 번에 여러 문장을 처리할 때 동일한 길이의 입력 연결이 필요하다

 

그래서 문장의 부족한 부분을 <PAD>라는 토큰으로 채워 문장의 길이를 강제로 맞춰준다

이 과정을 Padding이라고 한다

Word Embedding

문장을 단어 단위로 쪼개는 토큰화 과정을 거치고

단어장을 통해 Token ID를 부여하고

Padding으로 행렬의 길이를 맞춰주는 과정까지 마쳤다면

이제는 각 단어 하나하나를 벡터화시켜주는 Embedding 과정을 해야한다

 

벡터화를 시켜주는 이유는 위에서 만들어진(Padding까지 이루어진) 벡터는 

숫자 자체에 의미가 없어 수의 순서나 크기가 아무런 관계를 나타내지 않는다

이 상태로 신경망에 넣게되면 신경망은 특정 관계가 있다고 오해할 수 있다

그래서 embedding과정을 통해 단어 간의 의미적, 문맥적 관계가 반영된 벡터로 표현하기 위해 진행한다

 

word embedding을 만드는 기법에는 여러가지가 있는데

그 중 많이 쓰이는 기법인 Word2Vec에 대해 알아볼 것이다

 

Word2Vec에는 CBOW, Skip-gram 이렇게 대표적으로 2가지 방식이 있다

CBOW는 간단히 말해서 주변 단어를 통해 가운데 단어를 예측한다

나는 ___ 먹었다. 에서 나는, 먹었다를 통해 "밥을"을 예측한다

간단히 주변 단어의 벡터값을 통해 가운데 단어의 벡터값을 예측하도록 학습하는 방식이다

 

Skip-gram은 반대로 가운데 단어를 통해 주변 단어를 예측하는 방식이다

"밥을"을 통해 "나는", "먹었다"를 예측한다

마찬가지로 가운데 단어의 벡터값을 통해 올바른 주변 단어를 예측하도록 학습하는 방식이다

모델링(Modeling)

이제 만들어진 word vector를 이용해서 neural network를 거쳐

최종 답변을 생성하는 자연어처리 모델을 모델링해야한다

 

언어 모델(Language Model)은 문장이나 단어의 확률 분포를 학습한 모델을 말한다

즉 어떤 문장이나 단어가 입력으로 들어왔을 때 다음 나올 단어나 문장의 확률 분포를 예측하는 모델이다

첫번째 단어로 두번째 단어를 예측하고 첫번째,  두번째 단어로 세번째 단어를 예측하는 방식으로 훈련된다

우리가 일상 속에서 흔히 사용하는 자동완성 기능이 대표적인 언어 모델 활용 사례이다

 

언어 모델에는 fixed language model이라고 해서 fixed window 크기만큼을 통해 다음 단어를 예측하는 모델이 있다

즉 이전까지의 모든 단어를 통해 예측하는게 아닌

정해진 크기만큼의 단어만으로 다음 단어를 예측하는 것이다

window size = 4라면 위 사진처럼 다음 단어를 예측하게된다

 

이렇게되면 문제점이 우리가 다음 단어를 예측할 때 고정된 크기만이 아닌

앞의 문맥까지 봐야할 경우가 있을 수 있다

즉 몇몇 유용한 context를 잃어버리게 되는 경우가 있다는게 큰 문제점이다

 

RNN(Recurrent Neural Network)

그래서 등장한 모델이 바로 RNN이라는 모델이다

RNN은 sequential 데이터를 잘 다룰 수 있는 모델로

이전의 sequence를 누적해서 encoding하여 다음 output을 예측하는 구조이다

RNN의 주요 특징은 모든 time step에서 동일한 weight를 공유한다는 것이다

RNN은 순차적으로 하나씩 데이터를 처리하기 때문에 step마다 다른 가중치를 사용한다면

입력 길이에 따라 가중치의 개수가 달라지게되는 문제가 발생한다

다시 말해서 매 step에서 다른 가중치를 사용한다면

문장이 10단어면 가중치 10세트, 100단어면 100세트를 만들어야한다

즉 가중치 세트 개수가 입력마다 달라질 수 있다는 것이다

그래서 매 step마다 같은 가중치를 사용하여 10단어이든 100단어든 동일한 모델로 처리할 수 있게된다

RNN 언어 모델의 구조를 간단하게 표현한 사진이다

Input Layer에서 단어가 Word Embedding을 통해 벡터로 변환되고

Word Embedding된게 이전의 hidden state와 결합이 되어 새로운 hidden state를 만들게 된다

생성된 hidden state는 이전까지의 sequence 정보를 encoding한 representation이다

 

RNN 모델의 훈련 과정은 매 스텝마다 나오는 output에 대해

cross-entropy loss를 손실함수로 사용하여 진행한다

loss는 매 스텝마다 계산되며 전체 loss에 대해 역전파를 통해 gradient를 계산한 후

가중치를 업데이트하는 방식으로 진행된다

 

또한 훈련 과정에서 모델이 예측한 output을 다음 입력값으로 넣는 것이 아닌

실제 label 값을 다음 입력으로 넣는다

이 말은 즉 모델이 틀린 결과를 예측하더라도 학습 과정에서는 다음 단계 입력으로 정답값이 들어간다는 것이다

이렇게 함으로써 학습이 조금 더 빠르고 안정적이게 될 수 있다

이 기법을 teacher forcing이라고 부른다

teacher forcing

이제 RNN 모델의 학습이 다 됐다면 모델이 단어를 생성할 수 있게된다

맨 처음 단어는 start token이 들어가 확률 분포에 따라 생성되고

생성된 단어가 다음 입력값으로 들어가 새로운 단어를 생성하게되고

이 과정이 반복되어 최종 문장이 완성되는 것이다

 

RNN이 가지는 장점과 단점은 아래와 같다

우선 장점은 같은 가중치를 공유하기 때문에 어떤 형태의 길이도 무리없이 처리할 수 있다

단점은 computation 측면에서 굉장히 오래 걸릴 수 있다

또한 sequence의 길이가 굉장히 길어지면 앞 부분의 영향력이 줄어들게되는 문제가 있다

이를 vanishing gradient 문제라고 부른다

 

LSTM(long-short term memory)

vanishing gradient 문제를 해결하기 위해 LSTM이라는 구조가 나오게됐다

아이디어는 앞의 내용 중에서 중요한 것이 있다고 판단되면 보존하는 형태로 구성된다

일반 RNN의 hidden state 구조에 cell state가 추가된 모습이다

LSTM cell 안에 hidden state와 cell state가 있으며 

cell state는 3개의 gate로 구성된다

입력 중 어떤 걸 cell에 저장할지를 결정하는 input gate

이전 cell에서 어떤 걸 잊을지를 결정하는 forget gate

현재 cell에서 어떤 걸 내보낼지를 결정하는 output gate가 있다

마치며

이번에 lg aimers를 통해 좋은 기회를 받아

자연어처리 개념에 대해서 처음 제대로 공부해보았는데 생각했던 것 이상으로 내용이 심오해보였다

사용자들은 질문을 하면 대답이 나오는 단순한 구조라고 생각하겠지만

그 대답이 나오는 과정에는 우리가 알지 못하는 다양한 모델들과 수많은 연구가 있었을 것이다

그래도 개념들을 어느정도 이해하고 나니 NLP 분야에 대해 처음 공부할 때 있었던 두려움은 어느정도 사라졌다

하지만 내용을 공부할수록 내가 아는 것은 빙산의 일각이라는 생각이 계속 들었고

공부에는 끝이 없다는 말이 무슨 말인지 다시 한 번 깨닫는 순간이었다

반응형

'AI > Deep Learning' 카테고리의 다른 글

[DL] Transformer와 Attention 메커니즘  (0) 2026.08.02
[DL] 신경망 규제  (1) 2026.07.14
[DL] 학습률 스케줄링  (0) 2026.07.13
[DL] 고속 옵티마이저  (0) 2026.07.12
[DL] 배치 정규화(batch normalization)  (0) 2026.07.11
'AI/Deep Learning' 카테고리의 다른 글
  • [DL] Transformer와 Attention 메커니즘
  • [DL] 신경망 규제
  • [DL] 학습률 스케줄링
  • [DL] 고속 옵티마이저
20puddle
20puddle
20puddle 님의 블로그 입니다.
  • 20puddle
    20puddle 님의 블로그
    20puddle
  • 전체
    오늘
    어제
    • 분류 전체보기 (100)
      • Spring boot (5)
      • git & github (5)
      • algorithm (47)
        • theory (3)
        • 배열 (7)
        • 연결 리스트 (3)
        • 스택 (5)
        • 큐 (3)
        • 덱 (2)
        • 기초 코드 (19)
        • BFS (5)
      • AI (43)
        • Machine Learning (35)
        • Deep Learning (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ML
    딥러닝
    머신러닝
    홀드아웃 검증
    git
    그레디언트 클리핑
    주성분변환
    알고리즘
    백준
    DL
    Aimers
    인공지능
    연결리스트
    list
    Java
    AI
    Spring Boot
    오프라인 학습
    github
    게시판
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
20puddle
[DL] 자연어처리 기초와 RNN
상단으로

티스토리툴바