한글 형태소 분석2009.08.06 09:23
일전에 '한글 형태소 분석기' 라는 아이템에 대해 닷넷 프레임웍 + 오픈소스로 진행 하겠다고 했습니다.
그러면 왜 여러가지 프레임웍을 덕지덕지 붙이려고 하는지 다시 한번 정리 해 볼려고 합니다.

한글 형태소 분석을 하는 이유는 수십~수백억 개의 문서가 존재하는 웹에서 검색엔진이 사용자가 원하는 데이터를 색인화 하기 위해서 형태소를 분석하여, 꼭 필요한 색인어 추출이 주 목적입니다.

색인어 추출을 할때 크게 두가지 방법으로 나눌수 있습니다.

1. 수작업 색인
   - 훈련된 사서나 주제 전문가들이 통제된 어휘를 기반으로 색인어를 추출.
   - 많은 색인 시간과 비용을 요구
   - Naver, Yahoo
2. 자동색인
   - 컴퓨터에 입력된 문서를 분석하여 이 문서의 내용을 대표할 수 있는 단어 또는 단어구 들을 추출.
   - 적은 색인 시간과 비용, 정확도가 비교적 떨어짐.
   - Bing, Google

제가 개발하게 될 방법은 자동색인 입니다.

자동 색인을 하기위해서는 다음과 같은 절차가 필요합니다.

1. 어휘분석(Lexical Analysis)
2. 불용어(Stopword) 제거
3. 스테밍(Stemming)
4. 가중치 계산 및 통계정보 추출

영어의 경우에는 Stemming 에서, 띄어쓰기 기반으로 나눈뒤 단어의 원형을 추출하고 사전 검색으로 처리하는 방법이 있지만
한글의 경우에는 그 단어의 원형을 찾기가 정말 모호(ambiguous)합니다. 예를 들자면 'ㄹ'불규칙 현상 이라든지, 문장이 용언화가 되면서 '철수가방에 들어간다' 또는 띄어쓰기를 잘못한 경우 교정 작업등의 굉장히 복잡한 알고리즘이 요구됩니다.

이 때문에 대부분의 한글 형태소 분석에 관한 논문들에서 결론을 불가 라고 내고 있습니다.

여기서 '불가' 라는 말은 아예 하지 못한다는것이 아니라, 수학에서 처럼 정답이 하나로 떨어지지 않는다는 것 입니다.
KAIST, 부산대학교, 국민대학교 등에서 관련 연구를 지속적으로 하고 있고, 하나의 문장이 여러가지로 나누어 질수 있다는 것 까지 연구가 되고 있습니다. 문장의 의미적 오류를 찾는 알고리즘이 개발되기 전까지는 어찌할 도리가 없는것도 사실이죠.

하지만!!! 저는 완벽한 형태소 분석을 하려는것이 아니라, 제가 생각하는 플랫폼, 프레임웍이 효과적으로 동작할 수 있는 최적의 아이템이라는것이죠. 이유는...

첫째. 불안정한 한글의 Stemming 에 SPRING.NET 의 AOP를 이용하여 유연하게 로직을 추가 할수 있습니다.
둘째. 사전검색을 할때 해쉬테이블(HashTable)을 사용할 예정인데, 이에 대한 고사양 CPU 자원 할당을 위한 Windows Azure
셋째. 형태소 분석은 실제로 View 는 아주 간단하게 한 페이지로 나올수 있지만, Model쪽에 대한 비즈니스 로직이 아주 많이
        첨가가 되므로 ASP.NET MVC 에서 그 역할을 분명하게 나누기 위함입니다.

실제로 Windows Auzre 서비스의 성능은 아직 경험하지 못했지만, 이 프로젝트를 진행 하면서 경험해 보려 합니다.
Cloud Computing 의 성능을!!!!!
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower
한글 형태소 분석2009.07.28 09:23

한글 형태소 분석기를 만드는데 왠 Azure 냐구요?
또, 무슨 Visual Studio 2010 Beta 냐구요?

흠... 형태소 분석기 소스는 C 언어로 된 소스가 있습니다. 국민대학교에 계시는 강승식 교수님이 만드신 형태소 분석기가 소스가 공개가 되어 있습니다. Bing 에서 검색하시면 어렵지 않게 소스를 구할수 있습니다. 형태소 분석기만을 위해 강좌를 보시려는 분들은 조금 답답하실겁니다.

포스팅의 목적은 어떻게 한글 형태소 분석기를 만드는가 가 아니라, MS 최신 기술과 오픈소스 프레임웍을 적소에 배치 시켜 안정화 된 서비스를 구현 하는것 입니다.

예를 들면 SPRING.NET 을 쓰는 이유는 한글형태소 분석은 수정이 빈번하게 발생할수 밖에 없는 프로젝트 이고, 많은 논문의 결론에 한글이 가지는 모호함(Ambiguous)로 인해 아직까지 소프트웨어로 완벽한 형태소 분석을 할 수 없다. 라고 결론이 나 있습니다.  이때문에 OOP의 한계점을 인식하고, 부족한 부분을 AOP로 매꾸기 위함 입니다.

띄어쓰기의 오류로 인한 예
철수가 방에 들어간다.(ㅇ)
철수 가방에 들어간다.(ㅇ)

사람이 봤을때는 가방은 작은 명사라서 사람이 가방에 들어갈수 없다고 판단을 내리지만, 컴퓨터가 봤을때는 철수는 미등록어 이고 가방은 명사이고, 뒤에 동사가 수식해 주기때문에 문법상 아무런 이상이 없다고 판단이 됩니다.
이 문장을 컴퓨터가 맞다고 하려면, 가방이라는 명사의 뜻을 컴퓨터가 알고 해석하여 의미적 오류인지 판단을 해야 합니다. 아직까지 이러한 의미적 오류를 찾는 알고리즘이 없는걸로 알고 있습니다.

잠시 다른쪽으로 얘기가 흘러 갔는데요, 다시 정리 하자면 왜 Azure 를 쓰냐면
제 생각에 비용적으로 클라우드 컴퓨팅이 매리트가 있다고 판단이 될 경우 서서히 움직일거라 예상이 되고, VS에 있는 가상 IIS에서 돌리는것 보다 실제 웹 사이트 구축 까지 생각을 하고 있기때문입니다.

자.. 그럼 시작해 볼까요?
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower
한글 형태소 분석2009.02.26 12:55

형태소 분석을 하면서, 가장 먼저 만들어야 할 클래스는 자소를 분리 하는 클래스를 만드는 것 입니다.

 

예전에 형태소 분석기를 만들면서, 만들어둔 클래스 입니다. VB.NET 코드로 되어 있어서 약간 보기 힘들 수 있으나

어떤 구조로 되어 있는지와 한글의 charcode의 범위가 어디부터 어디 까지인지 확인하는데 좋은 자료가 될것 같아 포스팅 합니다.

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower
한글 형태소 분석2009.02.06 09:59

형태소 분석기를 만들면서 아주 많이 참고한 문서.

모란소프트(http://www.moransoft.com)

아래의 자료들은 Text Retrieval and Mining 이란 강의를 진행하면서 작성한 강의용 자료입니다.(모란소프트)

아래의 자료는 수정 재배포하실 수 있습니다.

본 자료에서 기초부분은 (1) 숭실대학교 이준호 교수의 정보검색론 강의 교제를 정리하였고, 확장과 마이닝 부분은 (2) Carnegie Mellon 대학의 Information Retrieval 11-741 강의 교제와 (3) Stanford 대학교의 강의 CS276a IR and Mining, CS276b Web Search and Mining, CS276b Text information Retrieval and Minig의 강의자료를 기본으로 하여 재구성하였습니다. Biz부분은 Search Engine Meeting Conference에서 각 기업이 발표한 내용을 수정없이 게재하였습니다. 마지막으로 총정리 부분은 본 자료의 내용을 정리하였는데, ICU의 맹성현 교수님의 자료를 일부 참조하였습니다.

정보검색론-1부 기초-1주-웹검색.ppt
정보검색론-1부 기초-2주-정보검색시스템.ppt
정보검색론-1부 기초-3주-색인과렉시콘.ppt
정보검색론-1부 기초-4주-쿼리분석과랭킹.ppt
정보검색론-1부 기초-5주-색인어추출.ppt
정보검색론-1부 기초-6주-질의확장과 적합성피드백.ppt
정보검색론-2부 확장-7주-확률적IR.ppt
정보검색론-2부 확장-8주-문서범주화.ppt
정보검색론-2부 확장-9주-LSA.ppt
정보검색론-2부 확장-10주-문서분류.ppt
정보검색론-2부 확장-11주-추천시스템.ppt
정보검색론-3부 마이닝-12주-1-정보추출.ppt
정보검색론-3부 마이닝-12주-2-HMM.ppt
정보검색론-3부 마이닝-13주-1-TextMinigIntro.ppt
정보검색론-3부 마이닝-13주-2-LexiconBuilding.ppt
정보검색론-3부 마이닝-13주-3-FirstStoryDetection.ppt
정보검색론-3부 마이닝-14주-QA System.ppt
정보검색론-3부 마이닝-15주-Summarization.ppt
정보검색론-4부 Biz-1주-구글.pdf
정보검색론-4부 Biz-2주-야후 Internet Search Engines Past and Future.pdf
정보검색론-4부 Biz-3주-MS Personal Information Retrieval.pdf
정보검색론-4부 Biz-4주-FAST Next Generation Search Technology Advancements.pdf
정보검색론-4부 Biz-5주-CLIR semantics for the Web.pdf
정보검색론-4부 Biz-6주-글로벌 검색엔진마케팅 트랜드 - 오버추어.pdf
정보검색론-4부 Biz-7주-Search Market and Technologies-yahoo korea 031008.ppt
정보검색론-4부 Biz-8주-Vivisimo Arguments for Clustering and Meta-Search as a Universal Norm for Information Retrieval.pdf
정보검색론-4부 Biz-9주-Verity - Text and XML querying - Is There a Common Ground.pdf
정보검색론-4부 Biz-12주-(IBM) UIMA - A component architecture for integrating structured and unstructured information in search systems.pdf
정보검색론-4부 Biz-12주-Clairvoyance- Commercializing Information Extraction - Lessons from WhizBang Labs.pdf
정보검색론-4부 Biz-14주-Linguit - The Deployment of a Mobile Question Answering System.pdf
정보검색론-16주-총정리.ppt



저작자 표시 동일 조건 변경 허락
신고
Posted by dotnetpower
한글 형태소 분석2009.02.06 09:57
학교 졸업작품으로 만든 형태소 분석기 이다.
한글 언어의 모호함과 용언화 부분에서 오류가 많다
이 부분을 조금 더 고치고 수정한다면 훌륭한 한글 색인어를 만들수 있겠다.

아래 페이지가 오류가 나면 http://moon.winglish.com/iframe_experience.aspx 으로 접속을 해서 테스트 해 볼수 있다.

저작자 표시 동일 조건 변경 허락
신고
Posted by dotnetpower
한글 형태소 분석2009.02.06 09:53

 

1. 형태소 분석이란

 형태소 분석이란 자연 언어 분석의 첫 단계로서 단어(한국어의 경우 어절)를 구성하는 각각의 형태소들을 인식하고 불규칙 활용이나 축약, 탈락 현상이 일어난 경우 원형을 복원하는 과정을 말한다(강승식 저).


2. 형태소의 정의

 형태소란 단어(어절)을 구성하고 있는 최소한의 언어 요소라고 할 수 있다. 가장 쉽게 생각할 수 있는 것이 '명사', '대명사', '수사' 등의 체언, '형용사', '동사' 등의 '용언', '부사', '관형사', '감탄사' 등의 독립언, '조사', '어미', '선어말어미', '접사' 등의 기능어가 있다. 형태소는 실질적인 의미를 가지고 있는 실질형태소와 기능적 요소를 담당하고 있는 기능형태소로 크게 양분되며, 색인어 추출을 위한 형태소 분석시 이 둘을 분리하는 과정이 우선시 된다. 한마디로 형태소는 더 이상 별개의 의미나 기능으로 분리할 수 없는 최소한의 언어 요소라고 보면 될 듯 하다.


3. 한국어 형태소 분석

 우리가 검색엔진 제작시 형태소 분석에 봉착할 수 밖에 없는 이유가 있다. 바로 우리가 다루는 언어가 한국어이기 때문이다. 영어를 보면 소년이라는 의미의 'boy'가 복수로 변하기 위해서는 끝에 '-s'를 첨가하면 된다. 'boys'가 바로 그것이다. 특별히 단어의 형태가 크게 변한다거나 다양한 기능어가 붙지 않는다. 그러나 한국어는 다르다. 한국어의 '소년'이라는 명사에는 '소년의', '소년은', '소년들', 소년인가요', '소년아' 등 각종 기능어 및 접사, 용언화 과정 등이 가능하다. 따라서 이러한 언어적 변화 현상을 찾아내어 최종의 형태소를 인식해야 한다. 그 규칙을 찾아내기란 쉽지 않고 이를 기계적으로 구현하는 것 역시 만만치 않다.



4. 형태소 분석의 필요성

 그렇다면 한국어에 왜 형태소 분석이 필요할까. 바로 색인어 추출을 위해서이다. 우리가 사용하는 색인어 및 검색어는 주로 명사 위주이다. 이런 명사를 추출하기 위해서는 불행히도 각종 기능어와 타 품사, 형태 변형 등의 인식이 필요하게 된다. 물론 형태소 분석없이 별도의 색인어 추출 방법을 사용하게 된다면 관심을 가지지 않아도 되는 것은 당연하다.검색엔진에 있어 색인 DB의 구조와 랭킹 알고리즘 역시 중요하나 가장 적합하고 확실한 색인어가 저장되어 있어야만 그 성능이 탁월할 수 있다. 한국어 텍스트를 단순히 공백(어절)으로 나눠 색인하게 되면 초라한 검색 결과를 보게 되는 이치이다.


5. 색인어 추출 방법

 색인어를 추출하는 방법은 여러가지가 있으나, 이 프로젝트에서는 명사, 미등록어, 영어(영어는 품사를 가리지 않고 모두 색인어 처리 한다.) 추출 방법은 모란소프트의 조영환 박사의 Text Retrieval and Mining #4의 벡터 공간 모델의 참고 하였고, 문서 색인어의 가중치 산출에는 lnc기법을 적용하였다.



게시물이 등록 될 때 색인어 추출 후 즉시 DB에 insert를 하는데, 이때 CPU cost가 높아지는것은 사실이나, 스케쥴링 처리 하지 않고, Process의 Priority를 Lowest로 하여 시스템을 생각한 색인 등록이며, 등록시 시간이 걸리기 때문에 게시물이 등록 될때 쓰레드 처리를 하여 비동기로 insert 처리를 한다.


6. 형태소 분석의 필요성

 그렇다면 한국어에 왜 형태소 분석이 필요할까. 바로 색인어 추출을 위해서이다. 우리가 사용하는 색인어 및 검색어는 주로 명사 위주이다. 이런 명사를 추출하기 위해서는 불행히도 각종 기능어와 타 품사, 형태 변형 등의 인식이 필요하게 된다. 물론 형태소 분석없이 별도의 색인어 추출 방법을 사용하게 된다면 관심을 가지지 않아도 되는 것은 당연하다.검색엔진에 있어 색인 DB의 구조와 랭킹 알고리즘 역시 중요하나 가장 적합하고 확실한 색인어가 저장되어 있어야만 그 성능이 탁월할 수 있다. 한국어 텍스트를 단순히 공백(어절)으로 나눠 색인하게 되면 초라한 검색 결과를 보게 되는 이치이다.


저작자 표시 동일 조건 변경 허락
신고
Posted by dotnetpower

티스토리 툴바