[AI_BM과정] 3일차 : 자연어처리 (형태소분석기)
[1] 형태소분석기의 설치와 사용
1. 형태소 분석기
1) 형태소 분석기 모음
http://koalanlp.github.io/koalanlp/
2) RHINO
- 사용이 쉬움
- 높은 정확도
- 다양한 언어에서 사용 가능
- Window, Linux에서 사용 가능 (Mac X)
- 파이썬 버전(rhinoMorph) : https://pypi.org/project/rhinoMorph/
3) Colab에서 설치
4) 단어 분석기가 아니라 형태소분석기인 이유
예1)
아침시간(X) : 아침 시간(O) 우리말에 아침시간이라는 단어는 없다.
점심시간(O) : 점심 시간(X) 점심시간은 하나의 단어이다. 자주 사용. → 형태소분리(점심, 시간)
저녁시간(X) : 저녁 시간(O)
- 어떤 것이 단어가 되느냐의 여부는 자주쓰이느냐의 여부
- 점심시간은 하나의 단어이지만, 두 개의 형태소로 이루어져있다.
- 저녁 시간은 두 개의 단어이고, 두 개의 형태소로 이루어져있다.
예2)
탄도미사일 : 자주 쓰이므로 하나의 단어
형태소 : 탄도, 미사일
단어 : 하나의 단어
단거리탄도미사일, 중거리탄도미사일, 장거리탄도미사일
이중에 중거리탄도미사일만 중거리의 개념을 어디까지 둘 것이냐 등의 문제가 있어와서 자주 사용하는 단어임. 많이 사용되었기 때문에 중거리탄도미사일만 하나의 단어이다.
단거리는 너무 쉽게 만들수있어서 언급을 안함. 장거리는 못만들어서 아예 언급을 안함
→ 복수의 형태소가 자주 사용되면 하나의 단어가 될 수 있다. 형태소 분석기의 원 개념을 따라가자면, 중거리탄도미사일은 중거리, 탄도, 미사일로 분리가 되어야 하나 실제로는 형태소분석기라 쓰고 단어 분석기처럼 사용을 한다.
예3)
나는 너를 사랑한다
형태소분리 : 사랑하 + 다
단어분리 : 사랑한다
사랑하 : 형태소 (단어가 못 됨)
어미가 같이 붙어주어야 (사랑한다) 단어가 된다.
→ 단어분석기라고 칭한다면 사랑한다를 더이상 분리하면 안된다.
하지만 그럴수 없으므로 형태소 분석기라고 부른다!
→ 만약, 단어분석기라고 하면 아래가 모두 별 개의 단어가 되어버린다.
사랑한다
사랑했다
사랑할
사랑한
→ 하지만 명사를 분류를 할 때는 형태소분석기지만 단어분석기처럼 사용한다.
2. 형태소
1) 실질 형태소 (명사, 동사 등)
: 그 의미가 실질적인 의미를 가지고 있는 것. 단어로서 텍스트의 생각을 대신 알게 해준다.
→ 실질 형태소에는 정보의 양이 많이 담겨있으므로 실질형태소만을 추출해낸다.
2) 형식형태소 (어미, 조사) : 그 의미가 형식적(추상적)인 의미를 가지고 있는 것
→ 형식형태소는 어디에 사용해야 할 지 아직 잘 알 수 없다. 실질형태소는 단어로서 우리의 생각을 대신 알게 해준다.
3) 많은 경우는 실질형태소만 원하게 된다. 하지만 항상 그런것은 아니다.
! ? -> .에 비하여 감정을 더 가지고 있을 가능성
^^ :) -> 이모티콘 또한 감정요소
(*참고1)
Part Of Speech (품사)
: I love you very much 처럼 영어는 띄어 쓴 모든 것들이 단어이다. 모든 단어를 받아서 처리한다.
불용어(a, an, the..)로 처리하여 제외. 한국어는 실질형태소만 받아서 처리
(*참고2)
명사의 결합들은 하나의 단어일 가능성이 높다.
예) 전자금융, 전자결제 : 하나의 단어로 쓰이는 경우
→ 전자의 금융(X), 전자의 결제(X) : 사전에 등록이 되어있지 않은 경우. 하나의 단어(X)
→ 붙여썼다는 것은 하나의 단어로 인식하고 있다는 의미 (한글텍스트)
3. 품사태그
N : 명사계열
V : 동사계열
M : 수식어계열
J :조사계열
E : 어미계열
S : 기호류 계열
N : 잘 모르겠다 계열^^
NA (not answered) : 분석불능범주, 결측치, 결측값
- 의존명사는 명사계열이나, 형식형태소임 : 분, 개, 마리
- 보조용언은 원 의미가 아닌 다른 의미를 갖는다 V1 V2
예) 먹어주다 / 해버리다
- 긍정지정사 (이다) / 부정지정사 (아니다)
- 간투사(Interjection) : 아하!
4. 어근(XR)
: 단어의 뿌리가 되는 것. 어근 자체만으로는 단어가 되지 못한다.
어근의 많은 수는 동사로 변환을 한다. 명사, 부사로도 쓰인다
어근->명사 (셈 + 0형태 ==> 셈(명사))
어근->동사
어근->부사
1) 국립국어원 기준
- 어근은 어근대로 놔둬야 한다
셈+하다 -> 셈하다(동사)
셈(XR) + 하(XSV) + 다(EF)
- xrVv = True
셈하다 -> 셈하(VV) + 다(EF)
자연언어처리는 항상 정형데이터 분석보다 기법이 늦게 개발이 되고는 한다.
기본적으로는 숫자를 예측하는 기법에서 발전시켜 비정형데이터 분석 기법이 나오기 때문이다.
다만 최근에 나오고 있는 문장 생성 기법은 자연어처리의 독창적인 부분이라고도 할 수 있지만,
기본적으로는 순환신경망을 이용하는 것이고, 순환신경망은 기본신경망 알고리즘을 변형한 것이다.
어쨌든 자연언어처리는 정형데이터 분석보다 복잡하다.
그 이유는 숫자는 0-9까지의 10개만 인식하면 되는데 자연언어처리는
우리말의 경우 11172자가 몇 개의 길이로 결합할 지 모르는 매우 방대한 조합이 이루어지기 때문이다.
여기에 보다 높은 분석을 위해서는 문장의 구조를 분석할 수 있어야 하는데 쉽지 않은 일이다.
실제 평가에서 주어, 서술어, 목적어, 수식어 및 단문과 복문을 가르는 구분은 30%를 넘기 어려운 실정이다.
(다만 몇 년 전 엑소브레인 프로젝트로 잘 알려진 정부 공개 결과물은 성능이 꽤 높게 나오는 것으로 알려져있다.)