텍스트의 통계학: (1) 구글신의 새 마음텍스트는 문장으로, 문장은 단어로 이뤄져있다. 누군가 "철수는 영희를.."이라고 말하면 우리는 그 다음에 어떤 단어가 나올지 귀를 쫑긋 세우고 기다릴 것이다. 그 다음 자리에는 "사랑한다"가 나올 수도 있고 "미워한다"가 나올 수도 있다. 다시 말해 한 문장에서 어떤 단어가 나올지는 모두 확률적이다. 유니그램(unigram) 모형은 이것을 가장 간단하게 표현하는 것이다.
'유니(uni-)'는 '하나', '그램(gram)'은 '말'이라는 뜻이다. 유니그램 모형은 하나하나의 단어가 어떤 확률 분포에서 독립적으로 추출되었다고 가정한다. 쉽게 말해 한 면마다 단어가 쓰인 거대한 주사위를 던져서, 나온 단어들로 문장이 이뤄졌다고 보는 것이다. 물론 말이 안된다. 하지만 단순히 각 단어가 사용되는 빈도를 알고 싶다면 유니그램 모형으로 충분하다.
유니그램 모형을 가지고 텍스트를 생성할 수도 있다. 단어마다 문장에서 나타날 확률을 알고 있으므로, 거꾸로 단어들을 이 확률에 따라 랜덤하게 생성하는 것이다. 다음은 셰익스피어의 글들을 유니그램 모형에 학습시킨 다음에, 새로운 문장을 생성하게 한 것이다.
(a) To him swallowed confess hear both. Which. Of save on trail for are ay device and rote life have.
(b) Every enter now severally so, let.
(c) Hill he late speaks; or! a more to leg less first you enter.
(d) Will rash been and by I the me loves gentle me not slavish page, the and hour; ill let.
(e) Are where exeunt and sighs have rise excellency took of. Sleep knave we. near; vile like.
무슨 말인지 해석이 안되는 건 여러분이 영어를 못해서 그런게 아니라 유니그램 모형이 영어를 못해서 그렇다. "or!"라니 도대체 뭔소리야. 유니그램 모형은 그대로 쓸모가 있지만, 아무래도 이것만으로 할 수 있는 건 제한적이다. 그럼 유니그램 모형을 확장해서 좀 더 쓸모 있게 만들어보자.
그것이 바이그램(bigram) 모형이다. '바이(bi-)'는 '둘'이라는 뜻이다. 아래 그림처럼 한 단어가 나타날 확률이 앞 단어에 영향을 받는다고 가정하는 것이다.
그림으로 보는 통계: (1) 쥐와 사람의 관계에서도 설명했지만 관찰된 사건이 머리-대-꼬리로 연결하는 두 사건 사이에는 아무런 관련이 없다. 위의 그림에서 '사랑한다'가 나타날 확률은 '영희를'에만 영향을 받지, '철수는'에는 영향을 받지 않게 된다. 그래서 바이그램에서는 항상 바로 앞단어와 지금 단어, 두 단어의 관계만 문제가 된다. 그래서 '바이'그램인 것이다. 이 모형은 통계학에서 1차 마코프 연쇄(first-order Markov chain)라고 한다.
유니그램의 경우와 마찬가지로 바이그램에게 셰익스피어를 학습시켜서, 문장을 생성하게 해보았다.
(a) What means, sir. I confess she? then all sorts, he is trim, captain.
(b) Why dost stand forth thy canopy, forsooth; he is this palpable hit the King Henry. Live King. Follow.
(c) What we, hath got so she that I rest and sent to scold and nature bakrupt, nor the first gentleman?
(d) The world shall - my lord!
여전히 말은 안되지만 유니그램 모형보다 좀 더 문장 꼴을 한다. 물론 말이 안되기는 여전히 마찬가지다. 그럼 똑같은 방식으로 바이그램 모형을 확장해서 트라이그램(trigram) 모형을 만들 수도 있겠다. '트라이(tri-)'는 3이라는 뜻이므로 이번엔 한 단어가 나타날 확률이 바로 앞단어만이 아니라 그 앞단어에도 영향을 받는다. 숫자가 하나 더 늘었니까 통계학적 명칭으로는 2차 마코프 연쇄(second-order Markov chain)이 되겠다.
역시 트라이그램으로 생성한 문장.
(a) Sweet prince, Falstaff shall die. Harry of Monmouth's grave.
(b) This shall forbid it should be branded, if renown made it empty.
(c) What is't that cried?
(d) Indeed the duke; and had a very good friend.
(e) The seet! How many then shall posthumus end his miseries.
여전히 말이 안되긴 마찬가지지만 "had a very good firend"처럼 멀쩡한 소리도 한다. 유니그램, 바이그램, 트라이그램 같은 모형을 모두 합쳐서 N그램이라고 부르는데 N을 늘리면 늘릴 수록 점점 더 말같은 소릴 하는 모형을 만들 수 있다. 마지막으로 테트라그램(tetragram) 모형, 3차 마코프 연쇄로 생성한 문장을 보자. 예상했겠지만 테트라(tetra-)는 '넷'이란 뜻이다.
(a) King Henry. What! I will go seek the traitor Gloucester. Exeunt some of the watch. Agreat banquet serv'd in;
(b) Will you not tell me who I am?
(c) It cannot be but so.
(d) Indeed the short and the long. Marry, 'tis a noble Lepidus.
(e) They say all lovers sear more performance than they are wont to keep obliged faith unforfeited!
이 간단한 N그램 모형이 N을 늘리면 늘릴 수록 점점 더 셰익스피어처럼 글을 쓴다. 하지만 N그램만으로는 완전한 문장을 쓸 수가 없다. 일단 N그램 모형은 의미론적인 부분을 처리하는 부분이 전혀 없기 때문에 아무리 N이 늘어나도 자기가 무슨 소릴 하고 있는지 모르는데다가, 구문론적인 관계를 전혀 포착하지 못하기 때문이다. 예를 들어 "철수가 영희를 사랑했을 때, 영희는 철수를 미워했다."라는 문장이 있다면 앞 절의 동사가 '과거'이므로 뒷 절의 동사도 '과거'여야 한다. 이런 부분은 단순히 N을 늘려서 포착할 수 있는 게 아니다.
그래도 N그램 모형은 간단한 텍스트 처리를 할 때는 요긴하다. 예를 들어 "눈이 아파"라는 문장이 있다면 이 '눈'은 펄펄 내리는 눈(雪)이 아니라 사람의 몸에 있는 눈(目)일 확률이 높다는 것 정도는 N그램 모형으로 식별할 수 있다. 따라서 검색엔진 같은데서 활용하면 동음이의어를 더 잘 구별할 수 있게 만들 수 있다.
또, 오자 교정에도 활용할 수 있다. "바람이 푼다"라는 문장이 있다면 '바람'도 '푼다'도 모두 사전에 있는 말이니까 일반적인 워드프로세서는 오타라고 감지를 하지 못한다. 그런데 N그램 모형을 이용하면 ㅂ을 ㅍ으로 잘못 칠 확률과 '바람이'라는 말 뒤에 '푼다'가 나올 확률을 비교해서 앞의 확률이 높으면 오타라고 판단하고, 뒤의 확률이 높으면 오타가 아니라고 판단하게 만들 수 있다. 간단한 모형만 가지고도 좀 더 영리한 오자 교정 프로그램을 만들 수 있는 것이다. 물론 의도적으로 독특한 표현을 쓸 때는 걸리적거릴 수도 있다.
N그램은 그 자체로도 쓸모가 있지만 이것을 N을 늘리는 방법 말고 다른 방식으로 계속 확장해보면 아주 재미있는 모형들을 많이 만들 수 있다. 글이 길어졌으므로, 그건 또 나중에.
(계속)
후주. 본문의 N그램으로 생성한 문장 예제는 모두 Jurafsky, D., & Martin, J. H. (2000).
Speach and Language Processing. New Jersey:Prentice Hall.에서 인용한 것이다.