한국어/한글 자연언어처리

1950년대부터 60여년의 삽질 끝에 서서히 자연언어처리가 빛을 보아가고 있어요. 영어의 경우 지금까지 괄목할 정도의 성과를 보여왔지요. 오픈소스 프로그램이나 데이타도 많이 있구요.

한국어와 한글의 자연언어처리도 한국의 교수님들이 지금까지 열심히 연구를 해 왔어요. 이근배 교수님의 포항공대 자연언어처리 랩이나 최기선 교수님의 시멘틱/온톨로지 랩, 신효필 교수님의 자연언어처리 랩 등이 유명하지요. 하지만, 한국에는 아직 오픈소스 프로그램이나 데이타는 부족한 것 같아요. 그래서 유피넬원들이 관심(+잉여력)이 있다면 관련 프로그램이나 데이터를 만들어보는 프로젝트를 해보면 어떨까 해요. 아래 용어들이나 프로젝트들이 좀 생소할 수도 있지만, 관심을 갖고 보다 보면, "아, 이게 이렇게 연결되서 결국에는 기계 번역기까지 만들 수 있구나~" 하게 될 겁니다. 더 궁금한 것이 있으면 제게 물어봐도 되구요. (제 연락처는 프로파일 페이지에 있습니다.)

제안 프로젝트

아래는 아직까지 오픈소스로 공개된 것이 없다고 생각되는 데이터/프로그램이에요. 이 위키 페이지는 익명 사용자 편집이 가능하니까, 혹시나 오픈소스로 비슷한 프로젝트나 데이터를 찾게 되면 가로줄로 죽죽 지워주세요. 저도 새로운 아이디어가 생기면 계속 업데이트 하지요.

한글 어절 N-gram 빈도 프로젝트

어떤 한글 단어가 얼마나 많이 사용되는지 빈도 리스트(word frequency list)를 만드는 거에요. 간단하지만 자연언어처리의 가장 기초가 되는 작업이지요.

N-gram이란 단어들의 연속을 말하지요. 쉽게 말해서 "New York"은 2-gram이고, "United States of America"는 4-gram 입니다. 어렵지 않지만, data 처리할 용량이 커서 쉽지는 않을 거에요. 얼마전 구글에서도 영어로 비슷한 것을 공개했지요. 아래는 3-gram 어절 리스트의 예입니다.

가 가 가 35
...
서울대 컴퓨터공학부 교수 38575
서울대 컴퓨터공학부 학생 954873
서울대 컴퓨터공학부 행정실 374654
...
힣 힣 힣 354

현재 자연언어처리 데이터의 본좌라고 할 수 있는 위키피디아 데이타를 갖고 만들면 좋지 않을까 싶어요. 잉여력이 남는 유피넬인이라면 디씨 단어를 갖고 할 수도 있겠지요 아래는 아마도 가능한 프로젝트 큐(Project Queue) 중 하나입니다. Python이나 Perl 같은 스크립트 언어를 쓰는 것이 편할 거에요. 기본적으로 4-gram 이상의 단어 리스트는 만들지 않으니, 1,2,3,4-gram 단어 리스트만 만들면 충분하지 않을까 싶습니다.

  • 프로젝트 큐

위키피디아 덤프 (kowiki로 검색) -> (파싱) -> 위키미디아 문법 페이지 -> (텍스트만 골라내기) -> 단어 리스트 완성!

한글 언어모델 만들기

위의 N-gram frequency list를 만들면 다음에 할 수 있는 일이 한글 언어모델을 만드는 일일텐데요, 이거 만들고 나면 사실상 텍스트 자연언어처리를 위한 준비는 끝난 거지요. 이것만 있으면 블로그의 보수/진보성 판단 알고리즘, 문서 자동 분류기, 간단한 문법 체킹 등 상당히 많은 것들을 할 수 있으니까요. Apache의 OpenNLPSRILM같은 오픈소스 언어모델이 있으니, 여기다가 한국어 데이터만 넣어주면 쓸만한 언어모델이 나오지 않을까 싶습니다. 여기까지 가면 이후 텍스트 관련 자연언어처리는 아이디어가 닿는 대로 만들면 되지 않을까 싶네요. (요즘 자연언어처리 쪽은 아이디어 싸움이어서요)

한글->한자 자동 변환기

한글을 입력으로 주면 그것을 자동으로 한자 치환 가능한 것만 한자로 치환해 주는 프로그램입니다. 21세기 글을 개회기 글로! 충분한 양의 한글/한자 병렬 말뭉치만 있으면 쉽게 만들 수 있을 겁니다. 과거 2004년에 Kaist의 최기선 교수님팀이 한 번 만든 적이 있는 것 같은데요, 최근에 구할 수 있는 한자/한글 병렬 데이타 양이 늘어서 아마도 저것보다 더 잘 만들 수 있지 않을까 싶습니다.

한국어 발음 사전 또는 발음 사전 생성기

쉽게 말해서 "국물" -> [궁물] -> [guŋmul] 로 변환해주는 프로그램을 짜거나, 한국어의 모든 단어에 대하여 적절한 발음을 제공해주는 사전을 만드는 일입니다. 음성인식기나 음성합성기의 가장 기초입니다. '한글은 쓰여진 대로 발음하자나'라고 생각할지도 모르겠지만, 조금 파고 들어가보면 한글 발음법 참 어렵습니다. 기본적으로는 표준 발음법을 따라 만들기 시작하겠지만, 관용적인 발음들 넣어주고, 사투리 넣어주고, 비표준 서울 사투리를 포함시켜주기 시작하면, 발음사전이 안드로메다로 가기 시작하지요. 발음 사전 생성기를 만들자니 뭔가 쉽지 않고, 일일이 사전을 입력하고 있자니 노가다인 작업이지요. 아래는 몇가지 예시입니다.

...
감기 [감기|감끼/강기]  (病인 '감기'와 '머리 감기'의 '감기'의 발음이 다르다. [강기]는 病인 감기의 비표준이지만 많이 사용되는 발음)
...
집 [집]
집으로 [지브로]
짚 [집]
...
맛이 [마시]
맛있다 [마시따|마디따]
맛없다 [마덥따]
...
넓다 [널따]
밟다 [밥따]
...
핵연료 [해결료]
핵융합 [행늉합]
...

1단계인 "국물" -> [궁물]로의 변환기를 완성하면 국어 교육 및 외국인용 한국어 교육에도 사용할 수 있구요, 두의 [궁물]->[guŋmul] 변환기를 만들면, 이후 정말로 유피넬의 Speech To Text 시스템을 만들 수도 있지요.

기타

이 외에도 할 수 있는 것들은 수도 없이 많은데, 좀 더 생각을 정리해야할 것 같네요. 이 페이지는 익명사용자 편집이 가능하니 아이디어가 있으면 올려주세요. ^^

관련링크

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License