요새 GRE랑 TOEFL 때문에 문법 공부를 좀 하다 보니, 그리고 GEB를 읽다 보니 영어를 한국어로 자동 번역하는 알고리즘에 대해서 생각하게 되었다. 영어와 한국어의 가장 큰 차이는 어순 차이이고, 따라서 단어를 일괄적으로 치환한 후에 어순에 맞도록 붙여주기만 하면 일차적으로 괜찮은 수준의 초벌 번역이 되지 않을까 생각해 보았다. 그래서, 아무생각없이 알고리즘을 한번 구성해 보려고 했는데, 생각해보니 이게 좀 복잡하다.

1. 문장을 단어 수준으로 나눈다.
2. 각 단어의 품사를 판정한다.
3. 단어 중에서 전치사와 접속사를 찾는다.
4. 전치사에서 파생된 전치사구에 해당하는 단어를 찾아서 전치사구로 묶어준다.
5. 접속사에서 파생된 종속절에 해당하는 단어를 찾아서 절로 묶어준다.
6. 전치사구를 해석한다.
7. 종속절을 해석한다.
8. 주절을 해석한다.

여기에 부가적으로 동사구를 해석해서 시제, 태, 단/복수, 자/타동사를 처리하는 해석기가 필요하다.

일단 가장 난이도가 있는 부분은 각 단어의 품사를 판정하는 부분이다. 가령, 문장을 단어들의 나열인 [a,b,c,d,..]로 이루어진 벡터라고 보자. 그럼 a는 명사, 형용사, 동사, 부사... 등등의 품사 중에서 하나일 것이다. b, c... 등등의 단어도 각각의 품사를 갖고 있을 것이다. 문제는 하나의 단어가 여러개의 품사를 가지는 경우이다. 가령 an는 관사로만 쓰이기 때문에 품사가 형용사밖에 없다. 그러나 characteristic은 명사로도 쓰이고 형용사로도 쓰인다. 그래서 품사가 뭔지를 알아내는 것은 꽤 어려운 작업이다. 그래서 생각해본 것이, 그 단어가 무엇을 수식하는지 알아내면 낫지 않을까 싶었다. 가령, 타동사는 반드시 목적어가 있어야 하고, 형용사는 반드시 그것이 서술하는 대상이 필요하다. 부사는 반드시 형용사, 동사, 다른 부사, 문장 전체중의 하나를 수식해야만 한다. 전치사는 반드시 그 목적어로 명사가 필요하다. 따라서 문장 내에 있는 특정 단어는 반드시 그 다음에 해석할 단어를 지정할 수 있다. (반드시 라고 말하면 어폐가 있겠지만...)

그래서 이것을 하기 위해, 한 단어의 품사를 일단 가정한 후, 그 단어가 수식해야 할 대상을 지정할 수 있으면 넘어가고, 지정할 수 없다면 그 가정이 틀렸다고 판단하는 것이다. 이 과정을 재귀적으로 반복하다보면 더이상 품사 변환을 할 수 없는 고정점 벡터가 하나 나올 것이다. 그럼 이제 품사도 판정했고, 단어의 해석 순서도 결정 되었다. 이제 그 다음 3단계부터 쭉 따라가면 된다.

이게 실제로 작동할 수 있는 알고리즘인지는 잘 모르겠지만, 언젠가 실제로 구현을 해보고 싶은 생각이 들었다.
그런데 결정적인 문제가 있다.
모든 단어에 대해서 각각의 단어가 가질 수 있는 품사에 대한 정보를 수록한 사전과, 각각의 단어가 각각의 품사일 때 어떤 뜻을 갖는지에 대한 정보를 수록한 사전이 필요하다. 이 사전을 구축하는 것도 실제로 일이 될 것 같다.
by snowall 2008. 8. 31. 00:06