일반적으로 (1+2)*6 = ? 의 값을 계산하려면 계산기 parser를 설계해야 한다고 많이들 알고 있다.
만약 당신이 자비스나 아수라다 같은 인공지능 기기를 만든다고 생각하면 무었이 필요한가 생각해 본적이 있는가?
첫번째 필요한것은 음성을 인식 하는것일 것이다.
"음성을 인식한다" 너무 범위가 넓다. "1+3*6 계산해라" 라는 말을 하면 인공 지능이 입장에서는 어떻게 해야할까?
일단 생각해 볼 수 있는것이 단어의 인식이 먼저일 것이다.
사람 목소리에 대한 "일 더하기 삼 곱하기 육" 하나하나 낱말로 할것인지 발음 하나 하나로 할것인지 결정하면, 패턴 인식이나 신경망으로 구현하면 할 수 있을것 같다.
그런 다음 단어의 배열만 가지고 어떤 동작을 해야하는지 알기 힘들기 때문에 언어 파서가 필요한것이다.
그래서 영어로된 파서가 있는지 검색해보니 Link Grammar http://www.link.cs.cmu.edu/link/ 이곳에서 훌륭하게 소스도 공개해주고 있었다.
링크를 타고 들어가면 http://www.abisource.com/projects/link-grammar/ 여기가 나오는데
용도는 워드프로세서의 맞춤법 검사용인것 같다.
좀 더 링크를 타고들어가면 http://wiki.opencog.org/w/OpenCog 도 볼 수 있다.
인식에 대한 open source 커뮤니티 인것으로 추측된다.
자 다시 돌아와서 아래 링크에 영어 문장을 넣으면 문장 분석을 해준다.
http://www.link.cs.cmu.edu/link/submit-sentence-4.html
- You can click on a link label to see the definition of that link type. 이런 문장을 넣어보았다.
++++Time 0.01 seconds (189.71 total) Found 3 linkages (3 with no P.P. violations) Linkage 1, cost vector = (UNUSED=0 DIS=2 AND=0 LEN=26) +----------------------------------------------Xp------------------------ | +-----------MVi-----------+ | | +------Js-----+ | +- | | | +-----Ds----+ | +------Os-----+ | +--Wd--+-Sp-+---I--+-MVp-+ | +--AN--+ +-I-+ +---D*u--+---Mp--+ | | | | | | | | | | | | | LEFT-WALL you can.v click.v on a link.n label.n to see.v the definition.n of ---------------------+ | -------Js--------+ | +-----Dsu-----+ | | +--AN--+ | | | | | that.d link.n type.n . Constituent tree: (S (NP You) (VP can (VP click (PP on (NP a link label)) (S (VP to (VP see (NP (NP the definition) (PP of (NP that link type)))))))) .)
생각해보건데 영어 공부용으로도 구현이 가능하리라 생각된다.
문장 형식이 몇형식인지 고민할 필요없이 아래 tree구조만 보면 해석이 쉬워지는듯 하다.
간단하게 설명하자면 VP 동사구, NP 명사구 PP 전치사 구
GPL 라이센스를 가지고 있으며 소스는 모두 C/C++언어로 되어있다.
그리고 배경이 되는 논문은 여기에 있다.
http://www.link.cs.cmu.edu/link/ftp-site/link-grammar/LG-IWPT93.pdf
대충 봤을때는 link grammer라는 의미는 D- D+는 붙을 수 있고 S- S+ 와 붙는 다는 의미로 이해하면 될 듯 하다.
a the : D-
snake cat : D- & (O- or S+)
Mary : O- or S+
ran : S-
chased : S- & O+
댓글 없음:
댓글 쓰기