자연어 처리는 인공지능 기술에서 중요한 축을 담당한다. 인간의 말을 인식해 메시지를 분석하고 다시 답변을 내놓으려면 자연어를 처리할 수 있는 향상된 기술이 필요하다. 현재 많은 연구들이 인간의 눈을 대체하는 ‘비전 인식’에 몰두하고 있다. 이미지나 영상을 기계가 인식해 사물을 분별하고 나누고 예측하는 다양한 기술들이 선보이고 있다.
인간의 입과 귀를 보완하거나 대신하기 위한 연구도 한창이긴 하다. 애플이 시리나 썸리와 같은 기사 요약 서비스 등이 여기에 해당한다. 번역에서도 자연어 처리는 필수적이다. 하지만 비전 인식에 비해 더딜 수밖에 없다. 문자 언어가 깊숙이 관여돼있기 때문이다.
* 민간이 개발하기엔 너무나도 큰 비용
정부는 한글 말뭉치의 이 같은 성격 때문에 상당한 비용을 들여 프로젝트를 추진했다. 대표적인 사업이 21세기 세종 프로젝트다. 국립국어원은 1998년부터 2007년까지 150억원의 예산을 투입해 이 프로젝트를 완료했다. 여기엔 세종 말뭉치라는 한글 말뭉치 사업이 포함돼있었다. 그것도 무려 2억 어절에 해당하는 방대한 구축 작업이었다. 이는 영국이나 미국, 일본에 뒤지지 않는 규모로 평가됐다.
그렇게 탄생한 세종 말뭉치는 자연어 처리 분야에서 다양하게 활용되고 있다. 대표적으로는 서울대에서 개발한 꼬꼬마 세종 말뭉치 활용 시스템이다. 세종 말뭉치를 데이터베이스에 저장해 웹 프로그램 형태로 구현한 사례다. 말뭉치 통계 정보 조회, 말뭉치 검색, 한국어 쓰기 학습의 세 가지의 기능을 갖추고 있다.
일본어 형태소 분석기 엔진에 세종 말뭉치를 학습해 한국형 형태소 분석기로 탄생한 사례도 있다. 은전한닢 프로젝트에 따라 개발된 ‘mecab-ko’ 형태소 분석기다. ‘mecab-ko‘는 세종 말뭉치에서 2만여 문장을 가져와 분석 엔진을 학습시켰다.
자연어 처리에 광범위하게 활용되던 세종 말뭉치는 2007년 기점으로 업데이트가 사실상 중단됐다.
더 이상 제2의 21세기 세종 프로젝트가 진행되지 않고 있는 탓이다.
10년이 지나는 동안 수많은 인터넷 신조어가 탄생하고 있고 광범위하게 일상에 활용되고 있지만 세종 말뭉치에는 반영이 되지 않는다. 비교적 변화가 적은 언어 유형은 상관이 없지만 구어와 같은 메신저 용어 등은 세종 말뭉치에서 품사 구별조차 하지 못하는 실정이다.
세종 말뭉치 사업을 주도하고 관리하고 있는 국립국어원도 아쉬워하기는 마찬가지다. 최정도 국립국어원 학예사는 “국립국어원에서 말뭉치를 만들어서 배포하고 싶지만 지속적으로 지원이 안되는 측면이 있다”고 했다. 그는 “예산을 따서 하고 싶지만 어려운 측면이 있다”고도 했다. 그는 “최신 것들이 코퍼스에 들어와야 하고 구성면에서도 IT와 관련해서 등장하는 단어들을 찾고 싶다면 구성도 잘해야 한다”라며 “하지만 현실적으로 여의치가 않다”고 말했다.
정부가 ’한국형 알파고‘니 하며 인공지능 사업에 1조원의 예산을 투입할 기세지만 한글 말뭉치 사업과 같은 구체적인 항목은 아직 포함되지 않은 상태다.
한국 말뭉치 업그레이드가 단절되면 자연어처리 기술로 인공지능 시장에 진입하고자 하는 스타트업이 부담이 된다. 당장 IT 대기업과 이 분야에서 간극을 좁히기가 어렵다. 네이버와 같은 IT 대기업들은 이미 십수년 간 수집한 뉴스 문서, 기타 블로그와 전문 자료들을 광범위하게 확보해 정교한 말뭉치를 자체적으로 구축해왔다. 오랜 공을 들여 구축한 말뭉치이기에 공개하기도 어렵다. 반면 스타트업이 이에 준하는 수준으로 말뭉치를 구축하기는 비용 문제로 사실상 불가능하다. 말뭉치라는 디지털 커먼스가 공공에서 제공돼야 할 이유이기도 하다.
학계는 웹 서비스화 돼 있는 전문 말뭉치를 사용하면 된다. 고려대 민족문화연구원이 구축한 ’물결 21‘은 대학연구소가 개발한 최대 규모의 디지털 말뭉치다. 국내 4대 일간지의 14년치(2001년~2014년) 6억 어절의 문서가 분석돼있다. 이 서비스를 이용하면 언어 연구에 필요한 결과를 다양한 형태로 받아갈 수 있다(최재웅&이도길. 2014).
그러나 이 말뭉치는 한계도 있다. 외부 형태소 분석기과 결합해 사용하기 어렵다는 점이다. 세종 말뭉치와 달리 소스 파일이 공개돼있지 않아서다. 일반적으로 기분석 사전과 형태소 분석기를 통합하면 높은 정확도와 효율성을 만들어낼 수 있다. 곽수정(2013) 등은 “기분석 사전은 대용량의 품사 부착 말뭉치의 고빈도 어절로 구축되어 형태소 분석기의 속도를 향상시키기 위해 사용돼왔다”고 적고 있다. 기분석 사전을 구축하려면 기존 말뭉치가 필요한데, 소스 파일이 공개되지 않아 두 시스템을 결합하기 어려운 것이다.
연세대 말뭉치, 카이스트 코퍼스 등 공개된 말뭉치가 없지는 않지만 규모로 따지면 세종 말뭉치나 물결21에 비할 바는 못된다. 말뭉치는 공공이 개입해 커먼스로 구축하기에 적합한 모델이라고 할 수 있다.
* 디지털 커먼스로서 한글 말뭉치와 공공의 역할
언어는 끊임없이 변화한다. 신조어 탄생하는가 하면 일부 어휘는 사멸하기도 한다. 예전 단어에 새로운 의미가 부여되는가 하면 단어와 단어의 새로운 결합이 나타나 전혀 다른 용례로 쓰이기도 한다. 말뭉치는 이처럼 역동적인 언어의 변동에 대응할 수 있어야 한다. 자연어 처리를 기반으로 하는 인공지능 기술은 역동성에 대응하는 말뭉치의 힘에 의존할 수밖에 없다.
문제는 막대한 비용이 투입되는 말뭉치를 누가 구축할 것이냐이다. 말뭉치 구축은 따지면 기초연구에 해당한다. 비용은 많이 들지만 곧장 수익이 나지 않는 사업이다. 그것의 공적 가치는 무한하지만 그 자체의 상업적 가치는 제한적일 수밖에 없다. 2007년 이후로 멈춰버린 세종 한글 말뭉치, 인공지능 기술이 부상하는 현재 국면에서 여전히 외면받고 있는 현실이 안타까울 수밖에 없다.
We now started an official fork at http://openkoreantext.org as of early 2017. All the development after version 4.4 will be done in open-korean-text.
Scala/Java library to process Korean text with a Java wrapper. twitter-korean-text currently provides Korean normalization and tokenization. Please join our community at Google Forum. The intent of this text processor is not limited to short tweet texts.
스칼라로 쓰여진 한국어 처리기입니다. 현재 텍스트 정규화와 형태소 분석, 스테밍을 지원하고 있습니다. 짧은 트윗은 물론이고 긴 글도 처리할 수 있습니다. 개발에 참여하시고 싶은 분은 Google Forum에 가입해 주세요. 사용법을 알고자 하시는 초보부터 코드에 참여하고 싶으신 분들까지 모두 환영합니다.
twitter-korean-text의 목표는 빅데이터 등에서 간단한 한국어 처리를 통해 색인어를 추출하는 데에 있습니다. 완전한 수준의 형태소 분석을 지향하지는 않습니다.
twitter-korean-text는 normalization, tokenization, stemming, phrase extraction 이렇게 네가지 기능을 지원합니다.
모든 데이터 분석 모형은 숫자로 구성된 고정 차원 벡터를 독립 변수로 하고 있으므로 문서(document)를 분석을 하는 경우에도 숫자로 구성된 특징 벡터(feature vector)를 문서로부터 추출하는 과정이 필요하다. 이러한 과정을 문서 전처리(document preprocessing)라고 한다.
BOW (Bag of Words)
문서를 숫자 벡터로 변환하는 가장 기본적인 방법은 BOW (Bag of Words) 이다. BOW 방법에서는 전체 문서 {D1,D2,…,Dn}{D1,D2,…,Dn} 를 구성하는 고정된 단어장(vocabulary) {W1,W2,…,Wm}{W1,W2,…,Wm} 를 만들고 DiDi 라는 개별 문서에 단어장에 해당하는 단어들이 포함되어 있는지를 표시하는 방법이다.
만약 단어 Wj가 문서Di 안에 있으면 ,→xij=1
만약 단어 Wj가 문서Di 안에 있으면 ,→xij=1
Scikit-Learn 의 문서 전처리 기능
Scikit-Learn 의 feature_extraction.text 서브 패키지는 다음과 같은 문서 전처리용 클래스를 제공한다.
CountVectorizer:
문서 집합으로부터 단어의 수를 세어 카운트 행렬을 만든다.
TfidfVectorizer:
문서 집합으로부터 단어의 수를 세고 TF-IDF 방식으로 단어의 가중치를 조정한 카운트 행렬을 만든다.
HashingVectorizer:
hashing trick 을 사용하여 빠르게 카운트 행렬을 만든다.
from sklearn.feature_extraction.text import CountVectorizer
신경망 기반 번역은 단편적인 단어에 대한 직역이 아닌, 문장 전체의 맥락을 파악해 사람이 말하는 것처럼 자연스러운 번역이 특징이다. 구글과 네이버도 최근 신경망 기술을 이용한 번역 서비스인 ‘구글 번역’과 ‘파파고’를 선보였다. 구글 신경망 번역은 7가지 언어, 네이버 파파고는 한영 번역을 최대 200자 이내 번역한다.
MS는 지난해 11월 처음으로 신경망 기반 번역 서비스를 공개했다. 당시 영어, 독일어, 아랍어, 중국어, 일본어를 포함한 10가지 언어를 지원했다. 이번에 한국어가 추가하면서 총 11가지 언어를 번역한다.
신경망 번역 원리
MS 신경망 기반 번역은 인공지능과 머신러닝 알고리즘을 통해 언어를 학습한다. 총 두 단계에 걸쳐 번역한다. 먼저, 번역 대상이 되는 문장을 인공지능으로 분석해, 해당 문자에 사용된 언어가 어떤 문맥을 가졌는지 파악한다. 그다음 문장에 맞는 단어를 골라 뜻을 배치하고 번역한다. 단순히 해당 문장 안에 단어가 몇 개 들어가 있고, 각 단어의 뜻을 기계적으로 번역해서 보여주는 게 아니라 문장 전체 의미를 파악해서 이에 가장 잘 맞는 뜻을 가진 단어를 골라 번역한다.
예를 들어, ‘개가 매우 행복해 보인다. 그 개는 강아지 6마리를 낳았다’라는 문장을 프랑스인과 미국인이 MS 신경망 번역을 이용해 문장을 번역했다 치자. 미국인에게는 ‘The dog looks very happy. The dog bore 6 puppies’라고, 프랑스인에게는 ‘La chienne a l’air très heureux. La chienne portait 6 chiots’라고 보여준다.
프랑스어에서는 똑같은 단어라도 모든 명사에 남성형과 여성형으로 성이 나뉜다. 이 성별이 무엇이냐에 따라 뒤따라오는 동사 형태가 미묘하게 다르다. 여기서 신경망 분석이 빛을 발한다. 신경망 분석은 ‘그 개는 강아지 6마리를 낳았다’라는 문장의 의미를 해석해 ‘그 개 성별은 암컷이다’라고 추론했다. 불어로 ‘개’는 남성형 명사로 ‘le chine’으로 표현하지만, 이 문장에서는 암컷이라고 생각해 여성 형태의 ‘La chienne’를 쓴다. 흐름을 파악해서 자연스러운 번역을 제공한다.
루이스는 챗봇과 앱, 그리고 다양한 서비스와 결합해 사용자의 의도를 파악하고, 이에 맞는 서비스를 제공한다. 예를 들어 ‘파리행 티켓을 예약해줘’라는 문장을 입력하면, 루이스와 결합한 서비스 플랫폼에서 파리행 티켓을 예약할 수 있는 웹사이트를 불러온다.
MS 측은 “이미 IT, 제조, 교통, 물류, 쇼핑, 미디어 등 다양한 분야의 국내 많은 기업이 마이크로소프트 루이스 기반의 AI 챗봇과 앱을 통해 서비스를 준비하고 있다”라며 “파트너와 함께 클라우드 기반의 AI 서비스를 활발히 개발 중으로, 이번 루이스의 한국어 지원을 통해 스마트 스피커, ARS 부가 서비스, 상품 예약 및 조회 등 다양한 한국어 애플리케이션들이 개발될 것으로 기대된다”라고 밝혔다.