본문 바로가기

ML & AI/unsupervised

[NLP] 자연어 처리 #1 개념

용어 정리
  • NLP(Natural Language Processing) : 기계가 자연어를 이해가고 해석하는 일
  • 코퍼스(Corpus) : 말뭉치, 글 또는 텍스트의 모음
자연어 처리 활용 서비스
  • 텍스트 분류(Text Classification): 텍스트가 특정 분류, 카테고리에 속하는 것을 예측하는 기법을 통칭함. 텍스트 분류는 일반적으로 지도학습을 이용함. (예: 스팸 메일 분류, 뉴스 기사를 연애/정치/사회/문화 등 카테고리화하여 분류 등)
  • 감성 분석(Sentiment Analysis): 텍스트를 감정, 기분 등의 주관적 요소로 분석하는 기법을 통칭함. 감성분석은 지도학습과 비지도학습을 이용할 수 있음. (예: SNS의 글쓴이의 감정을 분석, 영화 리뷰 분석 등)
  • 텍스트 요약(Summarization): 텍스트의 중요 주제를 추출하고 요약하는 기법. (예: 토픽 모델링(Topic Modeling))
  • 텍스트 군집화(Clustering)와 유사도 측정: 텍스트를 유사한 범주로 그룹핑화하는 기법
  • 기계번역(Translation): 구글 번역기나 파파고와 같은 외례어 번역기에 활용.
  • 대화 시스템 및 자동 질의 응답 시스템: 애플의 시리나 삼성 갤럭시의 빅스비, 챗봇.
자연어 처리를 위한 테스트 전처리 방법
  • 토큰화(Tokenization) : 코퍼스에서 텍스트를 토큰이라 불리는 단위로 나누는 작업
  • 정제(Cleaning) : 코퍼스로부터 노이즈 데이터 제거하는 작업 (예시 : 관사 a, to, on )
  • 정규화(Normalization) : 같은 의미이니 표현 방법이 다른 단어들을 동일한 표기로 표준화는 작업(예 : KO, KOR, Korea 등)
  • 표제어(Lemmatization) : 단어들로 부터 표제어를 찾는 과정(예 : am are is는 서로 다른 스펠링이지만 뿌리단어는 be라고 볼 수 있으며, 이 단어들의 표제어는 be)
  • 어간추출(Stemming) : 어간을 추출하는 작업. (예 : 잡다 잡고에서 잡을 추출)
  • 불용어(Stopword) 제거 : 의미없는 단어 토큰을 제거하는 작업
  • 정규표현식(Regular Expression) : 데이터의 패턴을 정의하고 정제하는 방법
  • 정수인코딩 : 코퍼스로 부터 중복되지 않는 단어들을 토큰화하고, 각 단어에 고유한 숫자를 부여(Indexing)하는 방법

위의 다양한 전처리 방법을 통해 자연어 처리된 데이터를 통해 단어간 연관성을 찾거나, 단어로 부터 다음 단어를 예측하여 자연스러운 문장을 만들거나 오타 교정, 음성인식 등을 위해 사용되는 모델은 크게 "통계적 모델"과 "인공신경망 모델"로 구분된다.

 

 

1. 통계적 언어모델 - SLM(Statistical Language Model)

통계적 언어모델의 정의는 모든 가능한 문자에 대한 확률분포를 말한다. (What the...)

통계적 언어모델을 이해하기 위해서는 먼저 "조건부 확률"을 이해해야한다. 조건부 확률이란 어떤 사건이 일어났을때 또 다른 사건이 같이 일어날 확률이라고 할 수 있다. (What????)

예를 들어 "까마귀 날자 배 떨어진다"라는 상황에 대한 조건부 확률은 "까마귀가 날았는데 동시에 배가 떨어질 확률" 또는 "배가 떨어지고 있는데 까마귀도 날아갈 확률"의 의미와 비슷하다.

 

[조건부확률 기본개념]

 

P(B|A) = P(A,B)/P(A)
  • P(B|A) : 'A'라는 조건하에 'B'가 발생할 확률
  • P(A,B) : 'A'와 'B'가 모두 발생할 확률
  • P(A) : 'A'가 발생할 확률

수식을 문장으로 해석해 보자면, 'A'라는 조건하에 'B'가 동시에 발생할 확률은 'A'와 'B'가 동시에 발생할 확률을 'A'가 발생할 확률로 나눈 확률과 같다. 로 해석할 수 있다.

 

P(A,B) = P(A)*P(B|A)

마찬가지로 'A'와 'B'가 동시에 발생할 확률은 'A'가 발생할 확률과 'A'가 발생한 조건하에 'B'가 발생할 확률의 곱과 같다. 로 해석 가능하다.

 

예를 들어 대량의 문장으로 이루어진  코퍼스가 있다고 가정해 보자. 이 코퍼스를 SLM을 통해 텍스트 Assistant 를 구현하고 싶다면, 즉 통계적 언어모델을 사용하여 "I have a"라고 입력하면 적당한 단어를 예측해서 "I have a dream", "I have a car" 처럼 문장을 완성하고 싶다면 어떻게 해야할까?

통계적 언어 모델은 를 위해 조건부 확률의 연쇄법칙을 통해 추천할 단어의 확률을 계산한다.

즉 "dream"을 추천할지 "car"를 추천할지는 조건부 확률 연쇄 법칙을 따른 다는 것이다.

 

'I'가 있는 상황에서 'have'가 나올 확률,

'I have'가 있는 상황에서 'a'가 나올 확률,

'I have a'가 있는 상황에서 'dream'이 나올 확률 처럼 조건부 확률을 연쇄적으로 계산한다는 의미다.

 

조건부 확률의 연쇄 법칙을 수식으로 표현하면 다음과 같다.

 

 

[SLM의 한계]

SLM은 이전 단어로 부터 다음 단어가 나올 확률을 구하기 위해서 문장 내 단어 빈도수(카운트)를 기반으로 확률을 계산한다. 예를 들어 코퍼스에서 "I have a"가 100번 나오는데 그 다음에 "dream"이라는 단어가 30번 나온다면 확률을 30%가 된다.

만약 모든 문장에 대해서 정확한 단어를 확률분포를 기반으로 예측하려면 방대한 코퍼스가 필요할 수 밖에 없다. 반대로 내가 가지고 있는 코퍼스에 "I have a"가 단 한번도 존재하지 않는다면 아예 예측이 불가능한 문제도 발생한다. 이를 "희소문제"라고 하며, 충분한 관측 데이터가 없어서 정확한 예측이 불가능한 경우를 말한다.

 

희소문제는 문장이 길어질 수록 더 심각해 진다. 문장이 길어 질수록 코퍼스에 존재할 확률이 작아지기 때문이다.(I am boy 보다 Would you like something to drink가 코퍼스에 존재할 확률이 작다)

현실적으로 모든 단어를 예측하기 위한 거대한 코퍼스를 만드는 것은 사실상 불가능하기 때문에 "통계적 언어모델"은 항상 희소문제를 가질 수 밖에 없다. 

 

 

2. 통계적 언어모델 - N-gram

N-gram 언어 모델은 SLM의 한 종류이며, "희소문제"를 해결하기 위해 코퍼스에서 해당 문장이 존재할 확률을 높일 수 있는도록 개선된 언어 모델이다. N-gram은 SLM과 달리 문장 전체의 존재 확률을 계산하는 것이 아닌 문장 내 일부 단어들만으로 확률을 계산하며, 일부 단어의 수를 N으로 정의한다.

 

N의 크기에 따라 N-gram 언어모델을 4가지로 구분된다.

 

  • unigrams : N=1
  • bigrams : N=2
  • trigrams : N=3
  • 4-grams : N >= 4

N-gram과 SML을 수식으로 비교하면 다음과 같다.

 

P(drink | Would you like something to) < P(drink | something to)

앞(SLM)의 확률보다 뒤(N-gram)의 확률이 더 크다. 따라서 코퍼스에서 단어를 예측할 확률이 더 크다.

 

[N-gram의 한계]

N-gram은 문장 내 일부 단어만으로 확률분포를 개산하여 희소문제를 개선했으나 근본적인 희소문제를 해결하지는 못한다. 

통계기반의 희소문제를 해결하기 위해 인공신경망 모델이 사용된다.

 


다음에는 자연어 처리를 인공신경망 언어모델에 적용하기 위해 필요한 one-hot encoding, word embedding 기법과 가장 기본적인 인공신경망 언어모델인 feed foward Nueral Network 언어모델을 정리해야겠다.