번역 알고리즘에 관하여

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

1. 문장을 단어 수준으로 나눈다.

2. 각 단어의 품사를 판정한다.

3. 단어 중에서 전치사와 접속사를 찾는다.

4. 전치사에서 파생된 전치사구에 해당하는 단어를 찾아서 전치사구로 묶어준다.

5. 접속사에서 파생된 종속절에 해당하는 단어를 찾아서 절로 묶어준다.

6. 전치사구를 해석한다.

7. 종속절을 해석한다.

8. 주절을 해석한다.

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

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

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

이게 실제로 작동할 수 있는 알고리즘인지는 잘 모르겠지만, 언젠가 실제로 구현을 해보고 싶은 생각이 들었다.

그런데 결정적인 문제가 있다.

모든 단어에 대해서 각각의 단어가 가질 수 있는 품사에 대한 정보를 수록한 사전과, 각각의 단어가 각각의 품사일 때 어떤 뜻을 갖는지에 대한 정보를 수록한 사전이 필요하다. 이 사전을 구축하는 것도 실제로 일이 될 것 같다.

코멘트

“번역 알고리즘에 관하여”에 대한 6개 응답

  1. 
                  snowall
                  아바타

    현재분사-명사-명사가 되면 해석 순서가 (현재분사-명사)-명사이거나 현재분사-(명사-명사) 처럼 될텐데, (현재분사-명사)-명사로 해석한다면 현재분사에 딸린 놈이 있으므로 뒤로 가야 하는데 앞에 있습니다. 따라서 문법적으로 틀린건 아니지만 잘 안쓰겠죠. (학원에서는 틀렸다고 가르칩니다 -_-;)

    그리고, verbing과 weirds는 사전에 없는 단어이므로 사실은 해석이 안됩니다.

  2. 
                 rainyvale
                 아바타

    아… 그런 식으로 움직이는군요. 감사합니다. 그러니까 품사를 판단할 때 단어 자체의 원래 가능한 품사 뿐만 아니라 그 활용형태 (분사인지, s가 붙는지 ed가 붙는지 등등)까지 함께 판단하는군요.

    아마 1번과 4번 중에 높은 스코어를 주는 것을 따라갈 것 같습니다. 현재분사도 명사를 앞에서 수식하기도 하니까 1번도 가능한 답이 아닌가 해서요.

    “Verbing weirds language.”는 스누피 만화에서였던가… 사람들이 자꾸 동사 아닌 단어를 동사처럼 써서 문제야 라고 한 사람이 말하니, 듣던 사람이 저렇게 답합니다. verb, weird 둘 다 동사가 아닌데 동사처럼 쓰는 거죠. 언어의 변화무쌍함이라고나 할까요…

  3. 
                  snowall
                  아바타

    찾아보니까 verbing이 사전에 없는 단어인데요…

    어쨋든 verbing은 ing가 붙어있으니까 현재분사거나 동명사겠죠.

    weirds도 사전에 없는 단어네요.

    근데 s를 붙였으니 아무튼 명사이거나 동사겠죠. 그럼 가능한 경우의 수는

    1.현재분사-명사-명사

    2.동명사-명사-명사

    3.현재분사-동사-명사

    4.동명사-동사-명사

    이렇게 됩니다. 그중, 1번은 현재분사가 명사를 수식할 경우에는 뒤로 가게 되므로 틀렸고, 2번은 문장 구조가 명사 두개로 이루어져 있으므로(동명사 and 명사) 명사들이 주어, 동사, 목적어중에 어떤 것도 될 수가 없습니다. 3번은 동사의 주어가 없으므로 틀렸고, 4번이 완전한 문장 형태가 되겠군요.

  4. 
                 rainyvale
                 아바타

    Verbing weirds language. 이런 문장은 저 알고리즘으로 어떻게 동작할까요? ^^

  5. 
                  snowall
                  아바타

    그것도 재미있겠지만, 어쨌든 언어는 그냥 관심사일 뿐 제가 전공하고 싶은건 수학이랑 물리학입니다. -_-;

  6. 
                ㄹㄹㄹ
                아바타
    ㄹㄹㄹ

    자연어 처리 이전에 컴파일러를 먼저 공부해 보심이.

rainyvale 에 응답 남기기응답 취소

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.