본문 바로가기

자연어처리(NLP)

2. 자연어처리 임베딩 종류 (BOW, TF-IDF, n-gram, PMI) [초등학생도 이해하는 자연어처리]

반응형

 안녕하세요 '코딩 오페라'블로그를 운영하고 있는 저는 'Master.M'입니다.

오늘부터는 '초등학생도 이해하는 자연어 처리'라는 주제로 자연어 처리(NLP)에 대해 포스팅하도록 하겠습니다. 제목처럼 진짜 핵심 내용을 쉽게 설명하는 것을 목표로 하고 있으니 자연어 처리(NLP)에 입문하고 싶은 분들은 많은 관심 부탁드립니다. 오늘 알아볼 내용은 '자연어처리 임베딩 종류'입니다.

 

https://codingopera.tistory.com/57

 

1. 자연어처리 임베딩 [초등학생도 이해하는 자연어처리]

안녕하세요 '코딩 오페라'블로그를 운영하고 있는 저는 'Master.M'입니다. 오늘부터는 '초등학생도 이해하는 자연어 처리'라는 주제로 자연어 처리(NLP)에 대해 포스팅하도록 하겠습니다. 제목처럼

codingopera.tistory.com

저번시간 우리는 자연어처리의 임베딩에 대한 기본적인 개념을 알아보았습니다. 오늘은 구체적으로 임베딩에 어떤 종류가 있는지 좀 더 세부적으로 알아보도록 하겠습니다. 만약 이전 글을 안읽으신 분들은 먼저 위의 링크의 글을 읽고 오시기 바랍니다. 

 

'임베딩'이라는 과정은 우리의 자연어를 컴퓨터가 연산할 수 있게 숫자 벡터로 만들어주는 과정입니다. 이 과정은 아래와 같이 '백오브워즈 가정', '언어 모델', '분포 가정'으로 이루어져 있습니다. 지금 부터 하나씩 살펴보도록 하겠습니다. 

임베딩 종류

어떤 단어가 많이 쓰였는가

1. BOW(Bag of Words) 가정

BOW(Bag of Words)

'Bow'는 Bag of Words의 약자로 위의 그림과 같이 문서를 단어별로 잘게 잘라서 단어별 빈도수를 체크하는 방식입니다. 이때의 집합은 중복 집합으로 중복된 단어들도 모두 들어가 있는데, 이 모습이 마치 가방에 단어들은 넣은것과 같아 이름이 'Bag of Words'입니다. 

예를 들어 위와같이 "I am a elementary shcool student And I am a boy"라는 문장은 단어 I, am , a, elementary, school, student, And, boy로 이루어져 있으며, 각 단어들의 빈도수를 체크하면 위와 같은 표가 됩니다. 이 때 이 표를 토대로 문장 "And I am a boy"를 임베딩 하면 [1, 2, 2, 2, 1]가 되는데 이를 '카운트 벡터'라고 합니다. 이러한 'BOW'는 "주제가 비슷한 문서라면 사용하는 단어들의 빈도가 비슷할 것이다."라는 철학에서 시작되었습니다.

 

소설들을 BOW를 통해 분석하면 위와 같이되는데 이를 통해 '사랑방 손님과 어머니'와 '삼포 가는 길'이 서로 비슷한 소설임을 유추할 수 있습니다.

 

2. TF-IDF(Term Frequency - Inverse Document Frequency)

그런데 위와 같은 '카운팅 방식'의 가장큰 문제점은 해당 단어가 많이 나타났다 하더라도 문서의 주제를 가늠하기 어려운 경우입니다. '을', '를', '이', '가'와 같은 조사들은 우리가 사용하는 문서들에 많은 부분을 차지하지만 문서의 유의미한 의미는 없습니다. 이러한 단점을 보완하기 위해 제안된 기법이 'TF-IDF'입니다.

TF-IDF

  • TF(Term Frequency) : 어떤 단어가 특정 문서에 얼마나 많이 쓰였는지의 빈도
  • DF(Document Frequency) : 특정 단어가 나타난 문서의 수
  • IDF(Inverse Document Frequency) : 전체 문서 수 N을 해당 단어의 DF로 나눈 뒤 로그를 취한 값.

TF-IDF의 각 구성 요소는 위와 같습니다. 여기서 TF는 위의 '카운팅 방식'과 동일합니다. 다른 부분은 DF인데요, 이는 Document Frequency로 해당 단어가 얼마나 많은 문서에 사용되었는지를 나타내는 숫자입니다. 예를 들어 '을', '를'과 같은 조사는 거의 모든 문서에 쓰이므로 DF값이 클 것이고, '선형대수학'과 같이 전문 용어는 값이 작을 것입니다. 마지막으로 IDF는 Inverse Document Frequency의 약자로 전체문서 N을 DF로 나눠준 값입니다. 즉 해당 단어가 얼마나 얼마나 "희귀하게" 쓰였는지를 나타내는 지표입니다. 이러한 변수들로 인해 TF-IDF는 '단어의 빈도수'와 '희귀성'을 상호보완 하면서 좀 더 개선된 임베딩을 진행 할 수 있습니다. 참고로 TF-IDF도 단어의 순서를 고려하지 않으므로 BOW 임베딩 입니다.

 

 

단어가 어떤 순서로 쓰였는가

1. 통계 기반 언어 모델

언어모델(Language model)이란 단어 시퀀스에 확률(probability)를 부여(assign)하는 모델입니다. 이 때 단어가 n개 주어진 상황이라면 언어 모델은 n개 단어가 동시에 나타날 확률(P(w1, w2, ... , wn))을 반환합니다. 

네이버 영화 말뭉치

n-gram

문장을 평가할 때 조건부학률(conditional probability)을 이용해 최대우도추정법(Maximum Likelihood Estimation)을 측정하는데, 이를 이용해 "내 마음 속에 영원히 기억될 최고의" 다음에 "명작이다"가 나타날 확률을 구해주면 다음과 같습니다.

그러나 이때 분자 'Freq("내, 마음, 속에, 영원히, 기억될, 최고의", 명작이다)' = 0 이 되어 전체 확률값이 '0'이 됩니다. 이를 해결하고자 'n-gram'이라는 방식이 도입되었습니다. 

 

'n-gram'이란 단어를 n개씩 묶어 생각해주는 방식입니다. 예를들어 위의 문장 "내 마음 속에 영원히 기억될 최고의 명작이다"를 2-gram으로 묶어주면 "내, 마음", "마음, 속에", "속에, 영원히", ... 이렇게 묶어지고, 3-gram으로 묶어주면 "내, 마음, 속에", "마음, 속에, 영원히", "속에, 영원히, 기억될", ... 이렇게 묶어집니다. 

2-gram
조건부확률

한 상태(state)의 확률은 그 직전 상태에만 의존한다는 '마코프 가정(Markov assumption)'에 기반해 위의 문장을 2-gram으로 근사하면 다음 과 같은 확률이 구해집니다. 이 때 확률 P(마음 | 내)는 단어 '내' 다음에 '마음'이 올 확률입니다. 때문에 이는 '내', '마음'이 같이 등장하는 빈도수를 '내'라는 단어 빈도수로 나눠준값과 동일합니다. 

 

이를 일반화한 식으로 나타내면 다음과 같습니다. 

 

지금까지 우리는 'n-gram' 방식을 통해 등장 확률이 낮은 문장을 근사하는 방법을 알아보았습니다. 그러나 'n-gram'역시 데이터에 한번도 등장하지 않는 n-gram이 존재할 때 예측 단계에서 문제가 발생할 수 있습니다. 예를들어 위의 2-gram 문장 예측 문제에서 만약 P(마음|내) = 0이라면 전체 문장 등장 확률 P(내, 마음, 속에, 영원히, 기억될, 최고의, 명작이다)는 '0'이 됩니다. 이러한 문제를 해결하기위해 '백오브'와 '스무딩'이라는 방법이 나왔습니다. 

백오브(back-off)

백오브 방식은 n-gram에서 n값을 낮추는 방식입니다. 이러면 상대적으로 단어가 나타날 확률이 올라가 확률이 '0'이 될 확률이 줄어들게 됩니다. 식은 다음과 같고 alpha와 beta는 하이퍼 파라미터 입니다. 

스무딩(smoothing)

스무딩 방식은 단어들의 빈도수를 '0'이 되지 않게 하기 위해서 상수 k를 각각 더해주는 방식을 의미합니다. 만약 k=1이면 이를 '라플라스 스무딩'이라고 합니다. 

 

2. 뉴럴 네트워크 기반 언어 모델

언어 모델

통계 기반이 아닌 뉴럴 네트워크를 이용한 언어 모델도 있습니다. 이 경우 문장의 시퀀스를 입력받아 마지막 다음 단어를 맞추는 방식(단방향)을 통해 학습을 진행합니다. 해당 모델로는 'ELMo'와 'GPT'가 있습니다. 

마스크 언어 모델

위의 언어모델이 마지막 시퀀스를 맞췄다면 '마스크 언어 모델'은 문장 시퀀스 중간에 마스킹된 단어를 맞춰 학습한 모델입니다. 이렇게 하면 단방향적 언어모델과 달리 양방향(bi-directional)으로 학습이 가능합니다. 해당 모델로는 'BERT'가 있습니다. 

 

어떤 단어가 같이 쓰였는가

1. 분포 가정

'분포 가정'이란, 특정 범위, 즉 윈도우(window) 내에 등장하는 이웃 단어 또는 문맥(context)의 집합을 가리킵니다. 즉 특정 단어가 어떠한 단어들과 같이 쓰이는지를 분석하여, 만약 단어들이 같이 사용된 빈도수가 많으면 "이 단어들 사이에 연관성이 많이 있다." 라고 할 수 있습니다. 

예를들어 다음과 같이 타깃 단어가 '빨래'인 문장과 '세탁'인 문장들이 있을때, 둘 다 문맥 단어가 '물, 청소'로 동일합니다. 이 로써 '빨래'와 '세탁'이라는 단어의 의미가 유사하다고 판단을 할 수 있는데, 이러한 과정을 '분포 가정'이라고 합니다.

 

2. 형태소 분포

'형태소(morpheme)'는 "의미를 가진 최소 단위"를 말합니다. 예를들어 '철수'는 형태소 인데, 그 이유는 '철'과 '수'로 이 단어를 나뉘었을때 각 단어들의 의미가 없기 때문입니다. 

 

언어학자들은 형태소를 계열 관계(paradigmatic relation)의 기준에 따라 분석하는데, 이 때 계열관계"해당 형태소 자리에 다른 형태소가 '대치'돼 쓸 수 있는가"를 따지는 것입니다.  

예를 들어 위 문장의 '철수' 자리에는 '영희'가 와도 되는데 이때 '철수'와 '영희'는 서로 계열 관계가 있는것입니다. 

 

3. 품사 분포

'품사'란 "단어를 문법적 성질의 공통성에 따라 언어학자들이 몇 갈래로 묶어 놓은 것"을 의미합니다. 품사를 분류하는 결정적인 기준중 하나가 '기능'인데, '기능'은 "한 단어가 문장 가운데서 다른 단어와 맺는 관계"를 가르킵니다. 예를 들어 '깊이'는 문장의 '주어'로, '깊다'는 '서술어'로 기능을 통해 분리됩니다. 그런데 형태소는 이러한 '기능' 이외에도 '분포(distribution)'과도 밀접한 관계를 맺고있습니다. 

  • 기능 : 특정 단어가 문장 내에서 어떤 역할을 하고 있는지
  • 분포 : 그 단어가 어느 자리에 있는지

예를 들어 '이웃사촌'의 경우, 자주 만나고 가까이 있는 이웃(분포)이 혈육 같이 챙겨주는 역할(기능)을 하는 데서 생겨난 말입니다. 

 

4. 점별 상호 정보량(Pointwise Mutual Information, PMI)

PMI(Pointwise Mutual Information)

  • 점별 상호 정보량 : 두 확률변수(random variable) 사이의 상관성을 계량화 하는 단위

A와 B값이 서로 독립이면 PMI = 0이 되고, A와 B가 서로 연관성이 높으면 PMI값도 높아집니다. 

예를 들어 윈도우 크기가 2이면 위와 가티 타깃 단어 앞뒤로 단어를 2개씩 보는 것인데, 이 때 '빨래'와 '속옷'의 PMI를 구하면 같은 윈도우에 "빨래와 속옷이 같에 존재할 확률"을 "빨래가 존재할 확률 곱하기 속옷이 존재할 확률"로 나눠주고 log를 씌워주는 아래와 같이 빨래와 속옷에 대한 PMI가 구해집니다.

  지금 까지 저희는 '자연어처리 임베딩 종류'에 대해 알아보았습니다. 도움이 되셨나요? 만약 되셨다면 구독 및 좋아요로 표현해 주시면 정말 많은 힘이 됩니다. 궁금한 사항 혹은 앞으로 다루어 주었으면 좋을 주제가 있으시면 댓글 남겨주시면 감사하겠습니다. 저는 '코딩 오페라'의 'Master.M'이었습니다. 감사합니다.

 

reference : ''한국어 임베딩"

반응형