딥러닝

자연어처리 간단 정리

나는야석사 2024. 1. 10. 18:33

자연어

C나 파이썬 같은 프로그래밍 언어와 다르게 어법이나 정해진 규칙만을 따르지 않고 일상적으로 사용되는 언어의 구조적인 체계로, 일상 생활에서 사용하는 언어라고 생각하면 된다.

 

자연어 처리

컴퓨터가 인간의 언어를 이해, 생성, 조직할 수 있도록 해주는 인공지능의 한 분야로, 자연어의 의미를 분석해 컴퓨터가 처리할 수 있도록 하는 일이다.

음성 인식, 내용 요약, 번역, 사용자의 감정 분석, 텍스트 분류 작업, 질의 응답 시스템, 챗봇 같은 분야에서 사용된다.

 

- 예시) 텍스트 분류:

입력 = 문장 및 문단 형태의 자연어

출력 = 목적성에 맞게 설정한 상수 개의 카테고리

출력 예시)

1. 영화 리뷰가 긍정적인지 부정적인지 판단하는 경우

2. 감성 분류로 해당 기사가 어떤 카테고리에 속하느냐를 판단하는 경우

3. 어떤 질문의 의도를 분류하는 경우

 

자연어 처리에서 중요한 것은 문장을 어떻게 처리할 것이냐는 것이다.

 

- 이미지, 신호 데이터가 자연어 데이터와 다른 점:

  • 자연어 데이터의 토큰(Token)들은 굉장히 독단적(Arbitrary)이다.
    • 문장을 어떤 토큰으로 구성된 시퀀스 데이터(Sequence Data)라고 가정했을 때, 이 시퀀스 데이터를 표현하는 방법은 공백을 기준으로 나누거나, 형태소로 나누거나, 한 글자씩 나누는 등의 방법이 있다.
  • 하나하나의 토근을 어떠한 숫자에 매칭시킬 수 있다.
    • 숫자에 매칭시켜도 독립적이기 때문에 원핫인코딩(One-hot encoding)을 이용해 처리해준다.
      • 이는 어떤 두 개의 토큰을 뽑아서 봤을 때 거리가 같다는 장점이 있음.                                                            이 과정만으로 인코딩이 끝나진 않기 때문에 어떤 문장에서 표현(Representation)을 추출해야 한다.
      • 뉴럴 네트워크 (Neural Network, NN)를 이용해 해당 토큰들을 연속적인 벡터로 바꿔야 한다.                        원핫인코딩 후 어떤 가중치를 곱해주게 되면, 설정한 목적에 맞게 각 단어를 나타내는 벡터들이 재조정된다.
      • 텐서플로우의 임베딩 레이어(Embedding layer) 같은 것들이 이 역할을 수행한다.
  • 그래서 뉴럴 네트워크 입장에서 첫 layer를 거치면 문장이 연속적인 고차원 벡터 시퀀스(sequnece of continuous, high-dimensional vectors가 된다.  각 벡터는 토큰을 의미하며 계산된 결과물이 입력 문장의 길이에 따라 변화할텐데 임의의 문장의 Representation을 잘 나타내는 어떤 고정된 크기의 벡터가 필요하다.
  • 문장을 Representation하는 첫번째 방법이 Continuous Bag of Words, CBoW이다. 
    • 이 방법은 문장 속 토큰들의 순서를 고려하지 않는다. 어떤 가방에 해당 토큰에 해당하는 벡터들을 넣어서 그것들의 평균값(벡터)을 문장의 Representation으로 쓰는 것이다. 
      같은 방식으로 Bag of n-gram도 가능하다. 이건 문장 속 토큰들의 순서를 무시하는 방법론인데도 불구하고, Text classification에서 굉장히 잘된다. 분류 목적에 맞는 Representation을 만드는게 중요하다.