1. 형태소 분석이 왜 필요한데?


지금까지 우리가 아는 기법인 like 검색이나 N-gram을 사용한다고 가정하자. 

지금 안군은 배가 너무 고프기도 하고, 오랫만에 친구들을 만나는것에 너무 들떠있다.
역시 남자라면 "고기" 아니겠어? 하고 검색을 했다.
그런데 검색 결과는 아래와 같았다. (연두색 칠한 단어 참고)


"..."



"참외를 먹으면 참 외롭고, 태연은 벌에 쏘여도 태연함" 이런 말장난 같은 검색결과가 실제라면 문제가 있다.

하지만, 우리가 알고있는 색인기법에는 실제로 저런 결과가 나올수 있는 한계점을 가졌다.


그럼 어떻하지??




2. 형태소 분석



2.1 형태소분석은 뭐임?


형태소란?  "뜻은 가진 가장 작은 말의 단위" 말한다. 이제 약간의 국문학 지식이 필요한 시점이다 ㅠ

형태소라고 하는것도 사실 여러가지가 존재하는데, 예를 들어 보겠다.



1. 자립형태소 : 혼자서 쓸 수 있는 경우를 의미한다. (산, 매우)

2. 의존형태소 : 혼자서 쓸수없는 경우, 즉 다른말에 기대어 쓰면 의존형태소라고 한다. (-이, 푸르-, -다)

3. 실질형태소 : 혼자쓰던, 기대어 쓰던 실질적인 뜻을 갖고 있는 형태소를 의미한다 (산, 매우, 푸르다)

4. 문법형태소 : 문법상 필요한 형태소를 의미한다. 보통 조사가 해당되는 편이다 (~이, ~다) 


위와 같은 문장을 여러개의 형태소로 분류할 수 있다.

하지만, 검색엔진에서 색인어로 사용할 형태소는 3번. 즉,실질형태소(=의미형태소)를 의미한다.

그렇다면 이런 실질 형태소는 어떻게 찾을수 있을까?




2.2 실질형태소는 어떻게 뽑지?


내가 직접 눈으로 보면 "산" 이 명사 인것도 알겠고, 의미가 있는 실질형태소라는 것도 알겠다.

그러면 컴퓨터는 어떻게 실질형태소만 뽑아 낼 수 있을까?


가장 기본이 되는것은 바로 "사전"이다. 우리가 생각하는 그 사전 맞다.

물론, 검색을 위해서는 그 단어의 뜻에 대한 설명은 사실 필요없고, 

어떤 품사를 지녔고 어떤 형태소에 속하는지 아는것에 촛점이 맞춰진다.


예를 들어, "산" 은 명사이고 실질적인 뜻을 가졌으니 실질형태소 이므로 색인어로 뽑혀야 한다. 

"-이"는 의존형태소로 혼사서 쓸수없고, 의미가 없으므로 제외되어야 한다는것을 알 수 있다.





2.3 생각보다 복잡한 형태소 분석


하지만, 생각보다 그리 간단하지 않다.

"산 매우 푸르다" 에서 ""라는것이 사실 의존형태소라는것을 아는건 사전만으로는 알 수 없다.


네이버 국어사전에서 '' 라고 검색하면 꽤 많은 결과가 나온다. 단순히 사전만으로 어떤건지 판단할 수 없다는것이다.

http://krdic.naver.com/search.nhn?kind=all&scBtn=true&query=%EC%9D%B4



그래서 형태소 분석을 할때는 영어 배울때 문법을 배우듯이 규칙이 추가된다.

명사뒤에는 의존형태소가 올 수 있고, 명사뒤에는 명사가 올 수 있는게 복합명사인데 이 조합가능한 단어는 무엇인지...쩜쩜쩜.... 생각보다 복잡한 규칙들을 존재하고 예외 사항도 정의해야 한다. 

참고로, 형태소분석기 프로젝트중 "꼬꼬마 형태소 분석기" 의 품사에 대한 정보를 정리한것이 있는데 참고해보면 다양한 품사의 조합이 있구나 하고 느낄테니 참고하기 바란다.

http://kkma.snu.ac.kr/documents/index.jsp?doc=postag


형태소 분석기를 만드는게 어려운 이유는품질을 위해서는 이런 사전작업과 규칙정의가 필요한데 검색엔진을 만드는 사람은 엔지니어들이고, 이런 규칙을 만들어 낼 수 있는 사람은 국문학과 출신이라는 점이다.

사실 내가 다닌 첫 회사가 검색엔진 솔루션 업체인데국문학과 출신이 상당수 계셨다.
이렇게 열심히 규칙을 추가해도 종종 형태소 분석을 했을때 오분석이 나기도 한다. 
대표적인 예시라면 역시... "아버지가방에들어가신다" 랄까?






3. N-Gram과 형태소 분석의 비교


우리가 알고 있는, N-Gram과 간단히 비교하면서 이야기 해보겠다.
처음 언급했었던 문장을 예로 들어 보겠다.
포스코 고기능 철장재 생산 성재공장에 준공


3.1 N-Gram에서의 색인어

기존에 배운 N-GRAM방식으로 색인어를 추출한다면 아래와 같을것이다.
보면 알겠지만, 색인어들 대부분이 불필요하게 추출되었고, 색인어만 보면 어떤내용인지 알기 어렵다.
N-Gram방식의 단점이 색인어 갯수가 많다는것과 의도하지 않은 색인어가 생성되면서 품질이 저하 될 수 있는 문제를 지니고 있는점이다. 

포스           <-- 의미없음
스코           <-- 의미없음
고기           <-- 의도하지 않은 단어가 색인어로 추출됨
기능
철장           <-- 의미없음
장재           <-- 의미없음
생산
성재
재공          <-- 의미없음
고장
장에          <-- 의미없음
준공



3.2 형태소 분석의 색인어

형태소 분석을 통하여 색인어를 추출한다면 색인어 자체가 의미를 가지고 있고, N-gram방식보다 훨씬 적은 색인어를 가졌음을 알 수 있다. 색인어가 적다는건 인덱스의 크기가 작아짐을 의미하고 이건 인덱스 탐색을 할때 더 적은 비교를 해서 찾을 수 있다는 의미이다. (=즉 검색속도가 빨라질 수 있다)

포스코
고기능
기능
철장재
생산
성재공장
성재
공장
준공

참고로 주의할것이 있는데, 형태소는 의미를 가진 가장 작은 단위라고 했는데...
"성재공장"은 성재 + 공장 이라는 단어를 합쳐서 만든 단어이므로 가장 작은 단위가 아니다.
이렇게 명사가 두개이상 합쳐진 경우를 복합명사라고 하는데, 복합명사도 색인어로 추출을 하는것이 좋다.

물론, 복합명사를 색인어로 넣지 않아도 검색을 하는데 지장이 없다.
하지만 정확도가 더 높은 검색결과로 사용할 수는 있다. (=이는 "검색품질" 관련 내용에서 다뤄보겠다)




4. 마치며

사실 나는 개론적인 내용으로 딱딱하게 다뤄진 내용을 보면 이해도 어렵고 해서 최대한 풀어쓰고 개념을 이해하는것에 촛점을 맞췄는데 만족스러운 내용이었을지 모르겠다.
어느정도는 이제 형태소 분석이 뭔지 개념은 잡혔을것이라고 생각한다. 
( 나 혼자만의 생각일지도 모르겠다 ㄱ- )

내가 다루고 싶은건, 검색엔진에서 기존 DB에서 쓰는 검색 기법과 차이점에 더 촛점을 맞추려고 했기 때문에,

형태소 분석에 대해 더 깊게 알고 싶다면 강승식 교수님의 이나 강의자료를 읽어 보는것을 권장하고,

오픈소스 형태소 분석기 관련 프로젝트가 궁금한것이면 은전한닢프로젝트를 방문해보길 바란다.


3부에서는 재현률, 정확도에 대한 용어에 대한 이야기...검색 메소드의 개념, 
동의어 신조어 불용어 같이 검색엔진에서 품질을 위해 도입된 기술과 용어 그리고 개념들에 대한 설명을 적어볼까 한다. 



+ Recent posts