4-4 Natural language Processing의 소개-I: Bag of Words(단어장)에 의한 feature vector 생성

in #kr5 years ago (edited)

noname01.png

매스콤에서 흔히 나오는 인공지능의 응용분야 중 이세돌 기사와 Deep Mind 바둑 대결 및 머신 러닝의 방법에 대해서는 이미 대중적으로 많이 알려졌다. 그뿐만 아니라 월요일 EBS에서 방영된 인공지능편에서는 일본 장기 게임에의 응용을 다루고 있는데 그 방법론은 바둑과 유사하다고 볼 수 있을 것이다. 하지만 장기 게임 인공지능 프로그래머 조차도 특정 순간에 인공지능이 어떻게 그런 수를 두는지에 대해서는 알수가 없다고 한다. 이 부분은 오해가 있을 수도 있는 부분이다. 아직 게임과 강화학습에 대한 글을 그다지 올리지는 못했지만 MDP(Markov Decision Process)와 강화학습이 결부된 머신 러닝 코드에서 특정 순간에 가능한 경우의 수를 확률적으로 모델링하여 계산 후 가장 높은 확률에 베팅하는 과정 또는 알고리듬임을 알아두자. 엄청난 숫자 계산이 수반되므로 쉽게 간단히 설명하기은 어려울 수 있다.

반면에 회사의 인사문제 적용하는 인공지능의 경우 입사 지원자와의 면접을 통해 수집한 면담 내역 즉 문서화 하여 문장들을 입력하게 되는데 인공 지능이 문맥 자체를 이해하는 것은 아니라고 한다. 곧 이어서 이번 블로그부터 연재할 예정이지만 Bag of Words 즉 단어장 내지는 사전이란 것을 만들어 학습해야 한다. 이는 수능 시험에 도전하는 인공지능도 마찬가지이다. 물론 문맥 자체를 이해하는 인공지능도 연구 중이겠지만 현재 응용 중인 많은 인공지능들은 특별하기 보다는 아주 단순한 아이디어들에 착안하고 있는데 그 것은 즉 특징 벡터(feature vector)를 추출하는 기법이라 할 수 있다. 즉 특정 성격을 가지는 단어들의 출현 빈도 분석에 중점을 두고 있는데 많은 문서와 문장에서 가장 많이 나오는 영문 단어로는 “is”, “are” 들이 있을 것이며 이들은 문장에서 그다지 중요하지 않다는 그런 방식의 알고리듬이다. 계산량이 엄청날 수밖에 없지만 이런 저런 방식으로 디지털 필터링을 수행하고 나면 최종 적으로 분석해야 할 정보량이 압축되어 줄어 드는 것이다.

자연언어 인공지능을 이해하기 위한 첫발로서 Bag of Words 와 Term Frquency 에 관해서 알아보기로 하자.

Bag of Words 란 일종의 숫자형 라벨을 붙인 단어장을 뜻한다. 영어 단어들로 구성된 문장들이 있으면 그 문장에서 사용된 단어들을 추려낼 수 있을 것이다. 만약에 “The”가 여러 번 사용되었다 해도 그 사용된 횟수가 아니라 그 단어 자체를 한번 단어장에 숫자 번호를 매겨 등록할 필요가 있을 것이다. 학습해야 할 문장들이 많이 있다면 이 단어장은 결국 하나의 단어 사전이 될 수 있을 것이다.

아울러 단어장이 만들어지고 숫자명이 부여되었으면 각 문장들은 이 단어장에 unique 하게 등록된 숫자를 사용하여 특징 벡터를 구성할 수 있게 된다.
아래의 3개의 문장이 포함된 파이선 코드를 실행하고 셸(Shell)에서 print 문을 실행하면 3개의 문장에서 사용된 단어들을 추려내어 class 명으로서 부여한 숫자를 관찰할 수 있을 것이며 아울러 이 숫자들을 사용하여 문장을 특징 벡터(feature vector) 형태로 표현할 수 있다.

리스트 데이터 형태로 처리된 특징 벡터에서 tf(t,d)(문서 d에서 단어 t 의 출현 횟수:the number of times a term t occurs ina document d)를 정의하자. 즉 전체 문장에서 특정 단어의 출현횟수는 대단히 중요한 역할을 한다.

noname02.png

단어장 모델에서 출현하는 개별 단어들을 체크했는데 이를 1-gram 모델이라고도 한다. 반면에 Natural Language Processing 에서는 개별 단어 말고도 복수개의 단어들이라든지 또는 글자들이나 기호들도 있을 수 있는데 이들에 대한 모델을 n-grams 모델이라고 한다. 특히 크기가 3∼4인 n-grams 모델의 경우 이메일에서 스팸메일을 걸러내는데 우수한 성능을 발휘한다는 연구가 보고되어 있다.

특히 scikit-learn 라이브러리 모듈에서 제공하는 class 인 CountVectorizer는 ngram_range 파라메터를 사용하여 다양한 크기의 n-grams 모델 사용을 지원한다.

다음번 이어지는 블로그에서 단어 빈도수 분석 및 예제 연습 코드를 올릴 계획입니다.

마나마인로고.png

Sort:  

짱짱맨 호출에 응답하였습니다.

Interesante, un saludo en la distancia @yoandri

Coin Marketplace

STEEM 0.16
TRX 0.13
JST 0.027
BTC 57560.27
ETH 2570.10
USDT 1.00
SBD 2.48