유한상태변환기를 이용한 한국어_형태소_분석_이상호
TRANSCRIPT
http://www.rouzeta.com https://www.youtube.com/watch?v=PjqUYvqK8v4
형태소 분석기란?
• 나는 나/대명사 + 는/조사 (나는 간다)
날/용언 + 는/어미 (높이 나는 새)
나/용언 + 는/어미 (피어 나는 곳)
• 고마워 고맙/용언 + 어/어미
• 해 해/명사 (해가 뜬다)
하/용언 + 어/어미 (해 주세요)
• 갈 갈/용언 + ㄹ/어미 (칼을 갈 사람)
가/용언 + ㄹ/어미 (거기 갈 사람)
품사 태깅 (Part-of-speech tagging)이란?
• 형태소 분석은 언제나 Ambiguity가 발생된다.• Ambiguity는 문맥을 보고 추정해야 한다.
• 형태소 분석기는 모든 가능한 형태소 분석 결과를 내어 주어야되는 모듈이고,
• 품사 태깅은 그 문장에서 해석되는 형태소 분석 결과를 선택하는 과정이다.
어디에 쓰이나?• 검색 시스템에서 색인어 추출
• 음성 인식기/합성기 개발에서 [단어:발음] 관계를 구해야 되는데품사를 알아야 정확한 발음을 알 수 있다.
• 단어 품사 발음
• 머리를 감기가 힘들다.• 감/용언 + 기/명사화접미사 [감끼가]
• 내가 감기가 걸렸다.• 감기/체언 [감기가]
그 당시 형태소 분석 방법
• Dictionary (사전)을 Trie로 만들어서 가지고 있는다.
• 주어진 어절에 대해서 CYK parsing 방법과 같은 것으로 가능한 모든 결과를 관리한다.
• 형태소 접점부분에서 발생되는 변이 현상을 추정, 혹은 그냥 ‘異형태’를 사전에 넣어버리고 만다.
• 고마워 고마 + 워 (‘고맙’의 이형태 ‘고마’도 사전에 넣어버린다)
95년도에 형태소 분석기를 오픈 소스로 공개
• KTS (Korean Tagging System)
• 사전을 참조하고, 격자 (lattice)를 만들면서 형태소 분석을 함.
• 형태소 접점시 불규칙 현상/탈락되는 현상이 발생되는 음절 리스트를 가지고 있으며, ‘원형’을 복원한다.• 이형태 ‘고마‘ ‘워‘ 이런 것을 사전에 넣지 않는다.
미등록어를 고려한 한국어 품사 태깅 시스템 구현
이상호, KAIST, 1995.
𝑡1..𝑛∗ = arg𝑚𝑎𝑥𝑡..𝑛 𝑃 𝑤𝑖 𝑡𝑖 𝑃(𝑡𝑖|𝑡𝑖−1)
• Eric Brill의 ‘Transformational Rule-based Learner’를 Finite state transducer로 바꾸고 이를 순차적으로 적용하여 하나의Finite state transducer로 만들면, 품사 태깅 과정이deterministic하게 할 수 있다.
• 시간 복잡도가 O(n) (n은 단어 개수)로 변해 버린다.
• 그것보다도, 뭔가 처리하는 과정이 인간이 생각하는 과정(?)과비슷하다는 느낌을 받음.
문장을 읽을 때, 인간은 품사 ambiguity를 계속 쌓다가 어느 순간 확실한 clue를 만나면 그 동안 해결하지 못한 것을 한번에 해결하지 않나?
•하나의 단어에 가장 고빈도의 품사를 먼저 할당시킨다.
•이후 finite state transducer를 통과시킨다.
Vbn : 과거 분사Vbd : 과거Np : 명사
A movie recommended by you is ….
처음에는 과거형이라고 생각했다가뒤에 ‘by’를 보는 순간 과거 분사형이라는것을 추정하게 된다.‘by’를 보는 순간까지 사실 정확한 결정을 미룬다.
DET NP VBD by ….
하나의 언어에서 나오는 모든 가능한 문장에대해서 형태소 분석/생성 transducer 모델을만들 수 있나?
그것도, 형태소 접점에서 발생되는 변이를 모두 포함되어 있는 어휘형표층형 간 심벌매핑으로 된 거대한 transducer를 만든다?
이 모든게 가능하다.
• 그렇다면, 이것보다 모델이 더 아름다울 수 없다.
• 그냥 transducer를 실행시키는 프로그램 하나만 있으면 된다. 이거 동작시키는 프로그램은 구현하기도 쉽다.
• String string으로 mapping되는 문제는 모두 이 framework로 풀 수 있다.
• 그런데 어떻게 하나의 transducer를 만들지?
Composition Operator
• foma[0]: define A [하나:one] ;
• foma[0]: define B [one:いち] ;
• foma[0]: define C [いち:一] ;
• foma[1]: regex A .o. B .o. C ;
중간 심벌이 사라진다.
문제를 단계별로 나눈 후 해결한다.그 이후 모든 transducer를 composition하여 전체 문제를 해결한다.
Replace Rule Operator
• Upper lower || leftcontext _ rightcontext
• foma[0]: define A a -> b || c _ d ;
aaccad aaccbd
Replace Rule Operator
define EDeletion e -> 0 || _ "^" [ i n g | e d ] ;define EInsertion [..] -> e || s | z | x | c h | s h _ "^" s ;define A %_ㄷ -> %_ㄹ || _ %/irrd %/vb ㅇ ;
한국어 규칙을composition한다.
define ARules NPFilter .o. ! 체언 + 조사 규칙 적용 : 사과는/사람은
VEFilter .o. ! 용언 + 어미 불가 필터 : 아름답+는/고마웠+아야지
VHarmony .o. ! 용언 모음 조화 : 막아/저어
RuleYI .o. ! '이' 축약 & '이' 생략 : 사과다/사과였다/가졌다
DropEU .o. ! '으' 탈락 현상 : 써도
InsertEU .o. ! '으' 삽입 현상 : 먹으면
IrrConjO .o. ! '오' 불규칙 현상 : 다오
DropL .o. ! 'ㄹ' 탈락 현상 : 아니까
DropS .o. ! 'ㅅ' 불규칙 현상 : 그어
ConjEAE .o. ! 'ㅐ'/'ㅔ'의 '어'탈락 : 메, 개, 갰다
IrrConjD .o. ! 'ㄷ' 불규칙 현상 : 깨달아
IrrConjB .o. ! 'ㅂ' 불규칙 현상 : 고와
IrrConjl .o. ! '르' 불규칙 현상 : 굴러
IrrConjL .o. ! '러' 불규칙 현상 : 푸르러
IrrConju .o. ! '우' 불규칙 현상 : 퍼
IrrConjYEO .o. ! '여' 불규칙 현상 : 하여, 해
IrrEola .o. ! '거라'/'너라' 불규칙 : 자거라, 오너라
IrrConjH .o. ! 'ㅎ' 불규칙 현상 : 하얘, 빨간
ConjDiph .o. ! 용언+어미 모음 축약 : 가(가+아), 됐다 (되+었+다)
ReducedWords .o. ! 줄임말들 처리 : 흔치 않다.
FilterOut .o. ! 기본적인 는/을/는다의 과분석 제거
ChangeNullCoda ;! Null 종성 삽입/삭제
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! '하다' + '어' => '하여' '하다' + '어' => '해'
! '하다' + '어서' => '하여서' '하다' + '어서' => '해서'
! '하다' + '었다' => '하였다' '하다' + '었다' => '했다'
!
! 하여 => * ㅎ ㅏ %_ /vb + ㅇ ㅓ * /e*
! (1) => * ㅎ ㅏ %_ /vb + ㅇ ㅕ * /e*
! (2) => * ㅎ /vb + ㅐ * /e*
! => (1) | (2)
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
define IrrConjYEO1 ㅓ -> ㅕ || ㅎ ㅏ FILLC [%/vb|%/vi|%/vj|%/vx|%/xj|%/xv] ㅇ _ ;
define IrrConjYEO2 ㅏ FILLC %/vb ㅇ ㅕ (->) %/vb ㅐ || ㅎ _ .o.
ㅏ FILLC %/vi ㅇ ㅕ (->) %/vi ㅐ || ㅎ _ .o.
ㅏ FILLC %/vj ㅇ ㅕ (->) %/vj ㅐ || ㅎ _ .o.
ㅏ FILLC %/vx ㅇ ㅕ (->) %/vx ㅐ || ㅎ _ .o.
ㅏ FILLC %/xj ㅇ ㅕ (->) %/xj ㅐ || ㅎ _ .o.
ㅏ FILLC %/xv ㅇ ㅕ (->) %/xv ㅐ || ㅎ _ ;
define IrrConjYEO IrrConjYEO1 .o. IrrConjYEO2 ;
foma[1]: upapply up> 고마웠다
고맙/irrb/vj었/ep다/ef
고맙/irrb/vj었/ep다/ex
apply up> 빨개서
빨갛/irrh/vj아서/ef
빨갛/irrh/vj아서/ex
빨갛/irrh/vj아/ec서/pa
빨/vb_ㄹ/ed개서/nc
apply up> 사괄 먹는다사과/nc_ㄹ/po 먹/vb는다/ef
사과/nc_ㄹ/po 먹/vb는다/ex
사과/nc_ㄹ/po 먹/vx는다/ef
반대로, ‘고맙’ ‘어’를 넣으면 ‘고마워'가나온다.
통상 분석기를 만드는 사람들은 ‘분석'만 되게 만들지만,FST는 분석의 input/output symbol pair를 바꾸기만 하면, ‘생성 모델'이 된다.
국내에서 FST 기반 한국어 형태소 분석기오픈 소스는 처음임.• 더 이상 실행 속도가 빨라지는 것은 쉽지 않다.
• 수학적으로 sound함. 더 이상 아름다울 수가 없음.
• High level information을 넣는 것이 수월함• Composition operator를 이용해서
• 단점 (?)• 절대 시간 이상의 공부가 필요함.
• ‘Replace Operator’ 같은 것을 공부하고 싶다면, 머리에서 쥐난다.
• 모델에 대한 근원적 제약 조건이데, 풀어야 되는 문제가 Context-free grammar 같은 것을 사용해야 하는 string-to-string 문제라면approximiate 접근법을 취해야 한다. – 하지만 parsing을 FST로 푸는논문이 많음.
품사 태깅 예• 나 는 <space> 학 교 에 서 <space> 공 부 합 니 다 .
• 나 /np 는 /pt <space> 학 교 /nc 에 서 /pa <space> 공 부 /na 하 /xv _ㅂ 니 다 /ef . /sf
• 선 을 <space> 그 어 <space> 버 렸 다 . • 선 /nc 을 /po <space> 긋 /irrs /vb 어 /ex <space> 버 리 /vx 었 /ep
다 /ef . /sf
• 고 마 웠 다 . • 고 맙 /irrb /vj 었 /ep 다 /ef . /sf
• 이 것 은 <space> 사 과 다 .• 이 것 /nm 은 /pt <space> 사 과 /nc 이 /pp 다 /ef . /sf