1. 개발배경및목적 인공지능의융용분야는데이터마이닝, 컴퓨터비전와함께자연어처리역시대표분 야로분류되곤한다. 그중컴퓨터비전분야는 OpenCV에힘입어개발자들사이에서범용적으로사용되고있지만자연어처리분야는비교적많은개발자들이생소하게생각하는경우가많고 OpenCV와같이범용라이브러리인 OpenNLP가존재하지만튜토리얼이나관련자료가 OpenCV에비해서심각하게부족한실정이다. 이에본프로젝트에서는 OpenNLP의라이브러리자료가없더라도, 사용법을모르더라도직관적인본프로젝트의라이브러리를통해기본적인자연어처리기능을사용할수있게하였다. Documentation 이모두되어있지만꾸준한업데이트와자세한예제등에서차이가난다 - 3 -
관련도서들도 OpenCV 에비해서종류가거의없다 - 4 -
2. 개발환경및개발언어 개발환경은 Windows 계열의 OS 이며, 개발언어는.NET Framework 4.0 의 C# 환경에 서개발하였다. 라이브러리의사용법을예제로나타낸여러데모프로그램은.NET Framework 의 Windows Form 플랫폼에서개발하였다. C#.Net Framework Windows OS OOP인 C# 기반으로개발되었기때문에자바로의 Converting이용이하고반대로자바계열의 OpenSource를병합하는것또한용이한편이다 (WordSentiNet, OpenNLP) 또한 C++ 에관련된네이티브코어라이브러리도 DLL 등으로익스포트하여사용할수있는장점이있다. 또한 CLR(Common Language Runtime) 과 CLS(Common Language Specification) 엔진은매우강력한기능과수행능력을가지고있다. 또한 C# 에서사용할수있는.Net Framework는여러편리한기능들을포함하고있다. 쉽고편하게 UI 개발을할수있는 toolbox 도.Net Framework 의기능이다 - 5 -
3. 시스템구성및아키텍처 VELP 시스템구성도 본라이브러리의시스템구성도는다음과같다. 우선 WordSentiNet(Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license) 과 OpenNLP(Apache License Ver 2.0) 를가져와사용하였고감정분석기데모프로그램은 WordSentiNet을통해개발한 SentimentManager 클래스를통해각단어의 Positive / Negative 아웃풋을퉁해구현하였다. Word Tree는 OpenNLP의 POS Tagging 기능을기반으로구현하였으며, SentenceProcessor 클래스를통해총 11 Step의과정을거쳐 Word Tree를생성한다. - 6 -
github Korean Stemmer 검색결과 한글어간추출기는현재 (2016년 9월 ) 를기준으로최대오픈소스사이트인 git hub에는 2 ~ 3가지프로젝트밖에존재하지않았으며, 또한심지어한글단어사전의오픈 API 또한모두막혀있었기때문에, 한글의여러가지많은패턴들을단순조건문코드로추출하가는어려웠다, 그래서한글어간추출기를직접구현하여라이브러리에포함시키게되었다. 한국국립국어원말뭉치공개데이터베이스 그외에도머신러닝알고리즘들 (KNN, K-Means Clustering, Bayesian Classifier, HMM) 을활용하여문서분류, Language Model 의일종인 Word2Vec 과 HHM 으로구현한 Language Model 등이프로젝트.MachineLearning namespace 에포함되어있다. - 7 -
4. 프로젝트주요기능 이툴에는기본적으로 NLP 의사용외에도자체적인 Laguage Tree 생성알고리즘을포 함하고있다. 한국의영어교육에서는제일기본적으로영어의문장형식을 5 가지 로나누어교육을하고있다. 1 s v 2 s v c 3 s v o 4 s v o o 5 s v o c 표 1 영어의문장형식체계 표 1 의주어, 동사, 형용사, 보어들을통해문장형식을매기는것은매우쉽지만영어의 언어에는여러가지부가적인요소들이들어가게된다. ( 부사, 관계대명사, 동명사, 전치사구문등...) VELP의 SentenceProcessor 클래스에는 S, V, O, C 등과같이문장의형식에결정을주는역할이아닌다른꾸며주는단어들을모두트리에추가시키고삭제하여문장의형식을쉽게결정할수있는기능을제공한다. 결과를얻기위한매개변수는 NLP의 POS Tagging을통해얻는단어와결과를얻으려는문장을넣어주면된다. POS Tagging은 Penn Tree Bank를이용하고있는 OpenNLP를이용했다. Pos Tagging 결과 - 8 -
SentenceProcessor 클래스를통해결과를적용시킨결과예시 1 SentenceProcessor 클래스를통해결과를적용시킨결과예시 2 예시 1의문장을살펴보면 i really want to go to the park 에서 really, to go(to 부정사목적구문 ), to park(to 목적어구문 ), the( 관사 ) 와같은꾸미는문장이주문장에서제거가되고 1형식문장에필요한주어 (i) 와동사 (want) 만남은결과를볼수있다. - 9 -
예시 1,2 의결과를 Language Tree 로나타낸그림 - 10 -
English Lauguage Processing 외에도한글에관련된기능도포함되어있는데 Hanguel Stemmer 클래스에서한글어간추출과품사태깅을사용할수있다. 한글에는영어의 PoterStemmer 와다르게복잡한규칙들이있어 Porter Stemmer 처럼단 순한패턴을통한어간추출은힘들었다. 그래서 POS Tagging 과같이사람에의 해 Tagging 된데이터를통해자동어간추출기를구현했다. 국립국어원에서제공하고있는말뭉치데이터베이스 수백개의게시물에여러가지다양한주제의말뭉치자료들을포함하고있으며, 일정한 Form 을이루고있기때문에 Parsing 하여사용할수있다. 본프로젝트에서사용한데이터파일목록들 - 11 -
파일내부의모양은다음과같다 왼쪽의단어는어간을추출할단어이고오른쪽은추출된단어이며그옆에는단어의 품사가붙어있다. Parsing 부분의소스는다음과같다 - 12 -
콘솔의숫자는 데이터파일을통해생성된 Dictionary 안의단어의수를나타내며 저단어는 Key 의숫자를나타낸다 예를들어간, 갈, 가기등의단어에서어간을추출한다면공통적으로 가 가될것이다. 그때 가 는 Class에서 Key 변수에해당하며, 갈, 가기, 간 등은 Word 변수에해당한다. 그렇기때문에 Key는국어원데이터에의해 10000개정도가생성되어 Linear Search를하더라도큰무리가없겠지만하나의 Key에는평균적으로 10개정도의 Word가붙게되고 Linear Seach를하게되면총 10만번의연산이필요하게된다. 이에클래스에서는좀더빠른검색방법을위해 600개의 Dictionary로나누는방법을선택했다. 그 600개의기준은첫단어의받침을제외한모음자음인데, 예를들어 Dictionary에서검색할단어가 덜 이라면 [( ㄷ에해당하는 index X 총모음의수 ) + ㅓ에해당하는인덱스 ] 가나눈 Dictionary의인덱스가된다. - 13 -
어간 가 에대한여러가지실행결과 - 14 -
다음라이브러리에포함된기능은 Sentimental Analysis이다. 90년도에나왔던아이디어인, 영화평점사이트의데이터를통해단어의 Positive Negative를분석하는 Thumbs up? Sentiment Classification using Machine Learning 처럼단어의 P/N을분석하는방법과오픈소스에는여러가지가존재하지만가장접근성이용이하면서느슨한라이센스로자유로운수정과사용이가능하고, 사용법이간단한 WordSentiNet을사용하여 Sentimental Analysis 기능을구축했다. 기존의오픈소스는 Java로사용된소스코드를제공했다. SentiWordNet 의자바소스코드일부분 위코드에서는 Map이란클래스를사용하여단어의 P/N Value를편리하게검색하였는데위소스를옮기기위해 HashTable 등의여러가지클래스를사용해보았으나, 호환성이맞지않는클래스들도있었고, 더군다나자바의 Map에비해검색속도가현저하게느려사용이불가능한클래스도있었다. 그래서기존의 Java코드를조금수정하여 Model Data 파일을추출하도록했고, 그파일을다시본라이브러리에서읽어들여단순배열탐색을통해 P/N Value를검색하도록하였다. 단순히단어들의 P/N Value도검색해볼수있지만 SentenceProcessor 클래스를통해그문장의 P/N Value를더정확하게얻을수있다. he is not bad 문장의 Lagnuage Tree - 15 -
bad 라는단어를검색했을때나오는 P/N Value 이다. bad 는단어, a 는검색할단어의 POS( 품사 ) 를나타낸다. Language Tree 의모양에각단어의 P/N Value 의모양을적용시킨결과를적용시키면 총 0.29 의값이나오는것을볼수있다. - 16 -
Document Categorization Document Categorization 이란컴퓨터분야에서자동으로문서에하나또는그이상의라벨혹은카테고리 를할당하는작업을의미한다. Document Categorization 에많이사용되는메소드로는 Bayesian Calssifier, SVM(Support Vector Machine), KNN 등이있다. Support Vector Machine SVM 은 Support Vector 를찾아내고그벡터들간의 Margin 을최대화하는알고리즘이며, 가장범용적으로 사용되고있다. - 17 -
K-Nearest Neighborhood KNN 은각 Point 간의 Distance 를계산하여가장가까운 K 개의포인트의라벨로분류하는알고리즘이다. Bayesian Classifier Bayesian Classifier 는 Naive 한 Bayes 확률을계산하여가장큰확률로분류하는알고리즘이다. - 18 -
본예제에서는 3 가지알고리즘들중에서 Bayesian Classifier 를통해분류기를구현하였다. Bayes 확률을구하는 Feature 로는그 Document 에서등장하는단어들의빈도수를사용하였다. 단어의빈도 수계산에는 WordBag 객체를만들어계산하였다. 다음은 WordBag 클래스에서빈도수가계산되어지는과정이다 WordBag 클래스 병합된 string 을 WordBag 클래스의 getbag 함수를통해빈도수를구할수있다 - 19 -
(1) arg (2) 베이즈확률을수식으로나타내보면식1과같지만 Document Categorization에서는분류를해야하기때문에수식2를계산하였다. 하지만이식을그대로사용하면큰문제가발생하게되는데, 만약 Test Data로쓸려는문서에 Training Data를넣어서만든 Word Bag에없는단어가있다고가정해보자. 그러면빈도수는 0이기때문에단하나의단어라도 Wordbag에존재하지않으면모두 0이되어버리는문제가발생한다. Bayesian Classifeir에서는이러한문제를 Laplace Smoothing, Log를사용한조건부확률계산등을통해해결하고있는데본예제에서는 Log를사용한조건부계산을이용하였다. arg log (3) 조건부계산으로식 2 를수정하면식 3 과같이나오게되는데이경우 WordBag 에단어가존재하지않아 빈도수가 1 이더라도 Log(0) 의결과는 1 이기때문에전체확률이 0 이되는것을막을수있다. TextCategorizer 클래스 wordbag 변수는 Test 할문서의 Wordbag 변수이며, number 는분류할라벨의개수를의미하며, wb 변수는분류할카테고리들의단어빈도수를가지고있는 WordBag 배열이다. Document Categorization을할때별로도움이되지않는단어들이있다. 예를들면 이다, 있다인데, 그런데, 하지만 등과같이 Category의특징을띄지않고여러 Document에서공통적으로등장하는단어들이다. 이런단어들의중요도를수치로계산하는방법이있는데 TF-IDF 방법이다. TF-IDF 는 TF(Term Frequency) 와 IDF(Inverse Document Frequency) 를합친단어이다. TF는말그대 - 20 -
로단순한빈도수를나타내고 IDF 는그단어가얼마나많은정보를제공하는가를나타내는지표이다. (4) (5) (6) TF, IDF 와 TFIDF 는각각 (4), (5), (6) 을통해계산한다. WordBag 클래스 WordBag 클래스의내장함수인 get_td-idf 함수를통해값을구하게되며매개변수는모든라벨의 WordBag 변수들을배열로묶어서넣어주면된다 만약전체빈도수가 100, 100, 100 인 3 개의카테고리로문서들을분류한다고가정했을떄, 였다 라는단 어가 3 개의 Category 에모두존재하고, 각각빈도수가 7, 10, 15 각각 TF 는 0.07, 0.1, 0.15 가된다. IDF 는 - 21 -
log (( (3 + 1) / 4 )) 이며 log 1 은 0 이기때문에최종값은 0 이된다. 최종 tfidf 는 0 이나오게되는데, 모든 Document 에서등장하는별로중요하지않는단어이므로 TFIDF 값에의해서중요도가낮게나온것을알 수있다. arg log (7) Document 를분류하기위해구하는 Bayes 확률의최종수식은 7 과같이나오게된다. - 22 -
TextBox 안의숫자는라벨의숫자이다. 왜냐하면 TextCategorizer 클래스를초기화할때그숫자가 필요하기때문이다. Test 에사용될 Test Data 이며, 랜덤으로고른 1 개의포켓몬 Go 관련기사에서그대로 텍스트만 Copy & Taste 하였다. - 23 -
Categorization 에사용될 Test Data 각테스트데이터는하나의주제당 5 개정도의기사의 Text 를그대로 Copy & Taste 하여구성하였다. 왼쪽위부터아이파크해킹, 정치, 포켓몬고뉴스이다. - 24 -
score0 부터아이파크, 해킹, 포켓몬고에대한 WordBag 을통해포켓몬고뉴스의 Categorization 을위해 조건계산부확률을구한결과이다. 하지만위결과에서는해킹에관련된뉴스로분류된것을볼수있다 다음결과는조건부계산에 TF-IDF 값을같이적용시킨결과이며, 이전의잘못 Classification 된결과에 비해올바르게분류함과동시에정확도가크게향상된것을확인할수있다 - 25 -
TextCategorizer 클래스 TextCategorizer 클래스를통해확률을계산할수있으며, 매개변수는 tf-idf 를사용할지안할지에대한 bool 변수이다 - 26 -
Test 에사용될 Test Data 이며, 랜덤으로고른 1 개의포켓몬 Go 관련기사에서그대로 텍스트만 Copy & Taste 하였다. - 27 -
5. 기대효과및활용분야 자연어처리는활용도가매우높은최신기술분야이다. 최근한국과네덜란드가경제적협력협약을맺은내용이 9시뉴스에나온적이있는데빅데이터에관한내용도포함되어있었다. 뉴스에서는빅데이터의활용예시로 SNS의방대한텍스트데이터를분석해서마케팅에사용될수있다는점을말했다. 빅데이터사례분석을통한 SNS 마케팅위기관리 이와같은경우에도당연히자연어처리기술이사용되게되는데대표적으로라이브러리 에포함된기술인 Sentimental Analysis 기술을통해서 P/N 를알수있으면어떠한 주제나제품에대한반응을분석할수있는것이다. 그외에도여러첨단분야에도응용되고있는데대표적으로음성인식기술이다. 음성인 식기술은애플의 Siri, 구글음성인식, 최근등장한 Nugu 등에서사용되어지고있 는음성의파형을읽어서텍스트로인식하는기술이다. - 28 -
Apple Siri SK Nugu Platform Google Speech Recognition - 29 -
위와같은경우사용자가 야무치게먹어야지 라고발음을했다고가정하자. 언어의 Context 를나타내주는 Laguage Model 에서만화케릭터야무치와갯벌의게는 연관성이크게없기때문에매우낮은확률을나타낼것이다. 하지만그와유사한문장중에정준하의유행어 야무지게먹어야지 는여러예능프로 그램에서빈번하게사용되었기때문에문장들을학습시켰을때포함되어있을가 능성이높고그때문에 Laguage Model 에서비교적높은값이나오게될것이다. 그렇게되면 Speech Recognition 시스템에서는더높은 Languagen Model 에서의확률을 가진문장인 야무지게먹어야지 로보정을하게된다. 이외에도자연어처리의응용분야는자동비서시스템, HRI 등등응용분야는무궁무진 하다고볼수있다. - 30 -
자동주문기능 한국의배달산업은여러가지배달앱서비스를통해다양하게발전해가고있고, 그트렌드를생각해서자동주문을적용시킬수있는클래스를기능에추가시켰다. WordGrammarDictionary 기능을통해서여러가지자동주문에관한함수들을사용할수있는데개수와단위인식등의기능을사용할수있으며, 제품의종류와제품의옵션을클래스에입력하게되면주문텍스트를읽어들여주문결과만출력해주는기능도포함하고있다. 또한여러가지나올수있는주문들에서제품의줄임말인식등의기능역시포함하고있다. - 31 -
6. 기타 ( 출품작에대한추가설명및 PT 자료등첨부가능 ) 아직미개발된기능 Word2Vec Word2Vec은구글에서발표한 1 레이어의인공신경망을통해 Language Model을구현한것이다. 학습모델에는 CBOW와 Skip Grams 2가지가있는데, CBOW는학습데이터가방대할때유리하고, Skip Grams는적은데이터에서유리하다고한다. 본프로젝트에서는 CBOW로 Word2Vec을구현했다. Word2Vec Code(Word2Vec 클래스 ) 기본적인 forward/back propagation C# 코드는구현이되어있지만일부오류들을기간 내에수정하지못하여, 미완성기능에추가시켰다. - 32 -