비전공자도 이해할 수 있는 AI지식 -언어의 모든 규칙을 알 수 있을까-

1. 언어의 모든 규칙을 찾아 번역하다

 

기계번역을 대표하는 회사로 1968년 설립한 시스트란이 있습니다.

 

 

 

이제는 50년이 훌쩍 넘는 역사를 자랑하는 이 회사는 헝가리 출신의 컴퓨터 과학자 피터 토마 박사가 설립했습니다.

 

초창기 기계번역을 연구해 2000년대 초반까지는 야후!와 구글에 제품을 납품할 정도로 세계 최고의 번역 품질을 자랑했습니다.

 

시스트란은 규칙 기반의 기계번역(rule-based machine translation)을 이용했습니다.

 

언어학자들이 일일이 정의한 규칙을 수십 년간 쌓아올렸고, 이를 이용해 당시 기준으로는 가장 높은 품질의 번역 서비스를 제공했습니다.

 

하지만 쉽게 예상할 수 있듯 규칙 기반에는 한계가 있습니다.

 

규칙을 아무리 세워도 언어의 무궁무진한 변화를 결코 따라갈 수 없기 때문이죠.

 

앞서 살펴본 'had'처럼 말이죠. 무려 30가지가 넘는 의미를 지닌 단어를 정확하게 번역하려면 얼마나 많은 경우의 수가 필요한지 짐작조차 할 수 없습니다.

 

문법 규칙을 너무 많이 적용하다 보면 규칙 사이에 간섭이 일어나 처리하기 곤란한 경우도 생깁니다.

 

무엇보다 언어는 정해진 규칙 대신 수천 년간 독립적으로 형성된 문화를 반영하므로 서로 다른 언어의 의미가 1대 1로 맞물리지 않는 경우도 수없이 존재합니다.

 

규칙 기반 번역 모델이 계속해서 실패했던 이유죠.

 

언제든 신조어가 등장할 수 있고, 지금도 수많은 신조어가 등장하고 있습니다.

 

당장 '캐-'라는 신조어가 등장하면서, 얼마나 많은 새로운 단어가 생겨났지를 떠올려본다면 규칙 기반 활용이 얼마나 어려운 일인지 짐작할 수 있습니다.

 

규칙 기반에게 번역은 답이 나오지 않는 문제죠.

 

게다가 우리말은 대표적인 교착어로 용언 활용만 해도 무궁무진합니다.

 

이 모든 걸 규칙으로 처리하는 건 정말 "캐어려운"문제죠.

 

아예 규칙으로 처리할 수 없는 단어도 있습니다.

 

전체적인 맥락이나 상황에 따라 전혀 다른 의미로 번역되어야 하는 경우입니다.

 

우리가 학창 시절에 배운 "동사+ing"를 "~고 있다"로 번역하는 규칙을 세웠다고 가정해보죠.

 

walk > 걷다.

walking > 걷고 있다.

 

run > 달리다.

running > 달리고 있다.

 

여기까지는 규칙이 잘 통하는 것처럼 보입니다.

 

그렇다면 'fight'는 "싸우다"이니까, 'fighting!'은 "싸우고 있다!"로 번역하면 되나요?

 

정말 어색한 번역입니다. "힘내!" 또는 그냥 "파이팅!"이라고 번역하는게 훨씬 낫습니다.

 

이처럼 번역은 전체적인 문장이나 맥락에 따라 전혀 달라지는 경우가 많습니다.

 

 

2. 번역된 예시를 공부해 새로운 번역을 하다

 

1980년대에 들어오면서 연구자들은 새로운 시도를 해봅니다.

 

특히 국내총생산액이 세계2위에 이를 정도로 급격히 성장한 일본은 국제사회에서 활약하기 위해 영어-일본어 번역이 절실했습니다.

 

교토 대학교의 나가오 마코토 교수는 예시 기반 기계 번역(example-based machine translation)이라는 획기적인 방식을 제안하고, 이에 기반해 매우 성능 좋은 영어-일본어 기계번역 시스템을 만들어냅니다.

 

기존의 규칙 기반 대신 풍부한 데이터를 활용하는 방식을 고안해냈죠.

 

이 방식은 이전과는 완전히 다르게, 사람들이 실제로 활용하는 문장 전체의 맥락을 살펴보는 데 주안점을 두었습니다.

 

즉 규칙을 통해 언어를 "이해"하기보다, 경험을 통해 "모방"하는 형태로 접근했습니다.

 

기본적인 문장의 의미를 파악한 다음 비슷한 문장의 의미를 비교해 전체 의미를 "유추"해내는 거죠.

 

이 과정은 우리가 영어를 공부할 때 먼저 "숙어"를 암기하고 숙어에 단어를 갈아 끼우며 전체 문장을 번역하는 과정과 매우 유사합니다.

 

"I'm going to the gym"을 번역한다고 하면, 풍부한 데이터를 바탕으로 "I'm going to the theater"과 "I'm going to the hospital"같은 유사한 문장을 찾아냅니다.

 

여기서 "I'm going to"는 "나는 ~ 갈 거야"라는 뜻임을 알아냅니다.

 

이제 "the gym"을 포함한 또 다른 예시를 찾아서 "체육관"이라는 뜻을 알아냅니다.

 

마지막으로 찾아낸 의미들을 재배열하여 완전한 번역문을 만들어냅니다.

 

그렇게 "I'm going to the gym"을 "나는 체육관에 갈 거야"로 번역하는 거죠.

 

예시와 데이터가 많을수록 결과는 정교해집니다. 하지만 수많은 동음이의어를 직접 처리해야 하는 등 이 방식에도 수많은 한계가 있었습니다.

 

연구자들은 이내 더 효율적인 방법을 찾아나섭니다.

 

 

 

3. 확률을 이용해 더 나은 번역을 하다

 

1990년대에 들어서는 통계적인 방법을 접목한 통계 기반 기계번역(statistical machine translation)이 등장해 더 나은 성능을 보입니다.

 

기존의 규칙 기반이나 예시 기반을 뛰어넘는, 본격적인 번역 모델이었습니다.

 

이 모델은 문장을 단어 또는 구문 단위로 분할한 다음 이를 번역하고 다시 문장으로 합치는 과정에 확률적인 방법을 접목합니다.

 

먼저 수많은 문장을 분석해 확률을 계산해냅니다. 예시 기반처럼 데이터, 즉 문장은 많을수록 좋습니다.

 

다양한 문장을 살펴보면서 어떤 단어가 어떤 의미로 번역되는지 확률을 계산합니다.

 

예를 들어 'House'는 '집'으로 번역되는 경우가 가장 많았고, '가정'으로 번역되는 경우가 그 다음, '상점'으로 번역되는 경우가 가장 적었습니다.

 

이렇게 번역될 확률을 계산해 다음과 같이 순서대로 결과를 나열합니다.

 

집 >> 95%

가정 >> 78%

...

상점 >> 42%

 

이처럼 문장에 속한 모든 단어의 번역 확률을 나열하고, 확률이 높은 순으로 의미를 조합해 번역문을 완성합니다.

 

번역 품질을 높이기 위해서는 각 단어의 의미가 좀 더 정확한 확률을 갖도록 더 많은 문장을 구하기만 하면 됩니다.

 

어떤 단어로 번역할지는 수많은 문장을 바탕으로 기계가 스스로 계산합니다.

 

'I want to study linguistics'를 통계 기반으로 번역해봅시다.

 

I want to study linguistics
나는(93%) 원하다(96%) ~으로(90%) 공부하다(96%) 언어학(98%)
내가(72%) 바라다(71%) ~쪽으로(70%) 배우다(73%)  
  필요로 하다(30%) ~에(31%) 연구하다(20%)  
  ~고 싶다(21%) ~에게(27%) 조사하다(15%)  
    ~까지(16%)    

 

먼저 'I'는 '나는', '내가'가 비슷한 확률로 등장합니다.

 

'want'는 '원하다'가 가장 확률이 높고, 그 다음 확률로 '바라다'등이 있습니다.

 

이런 식으로 각각의 의미를 확률 순으로 나열해 서로 조합해서 문장을 만들어냅니다.

 

당연히 가장 유력한 후보는, 확률이 가장 높은 맨 위의 뜻으로 조합한 문장입니다.

 

가장 확률이 높은 번역은, "나는", "원하다", "~으로", "공부하다", "언어학"이고, 이를 조합하여 문장으로 만들어보면 "나는 언어학 공부를 원합니다" 정도가 됩니다.

 

아직 어색한가요? 그렇다면, 모든 경우를 조합해서 가장 자연스러운 문장을 찾아냅니다.

 

여기서는 2*4*5*4*1 = 160가지 조합을 만들어낼 수 있습니다.

 

여러 조합 중 'want'의 경우 가장 마지막 뜻인 "~고 싶다"로 적용했을 때, 번역한 문장이 가장 자연스러워 보입니다.

 

이렇게 "나는 언어학을 공부하고 싶습니다"를 최종 번역 결과로 채택합니다.

 

이처럼 모든 과정에서 한국어 말뭉치를 참고해 확률적인 방법으로 계산합니다.

 

이처럼 확률적인 방법으로 번역어를 찾아내는 방식은 매우 잘 작동했지만, 조합한 문장을 보면 어색한 경우가 많았습니다.

 

아무리 완벽하게 단어를 번역해냈다 할지라도, 그걸 다시 문장으로 제대로 조합하기란 더 어려운 문제였죠.

 

그래서 좀 더 자연스러운 문장으로 번역하기 위해 확률 계산을 단어 단위에서 구문(phrase)단위로 확장했습니다.

 

'had lunch'를 예로 들면, 단어 기반에서는 'had'와 'lunch'를 분리하여, 'had'를 '가졌다', '보냈다', '먹었다' 등으로 번역하고, 'lunch'는 '점심'으로 번역한 다음, 이를 다시 조합하여 문장 후보를 만들어냅니다.

 

1. 점심을 가졌다.

2. 점심을 보냈다.

3. 점심을 먹었다.

 

이렇게 하면 세 문장이 나옵니다. 확률적으로는 'had'에 '가졌다'라는 의미가 가장 빈번하지만, 구문으로 만들었을때는 '점심을 먹었다'가 훨씬 더 자주 쓰입니다.

 

'점심을 가졌다'보다 '점심을 먹었다'가 훨씬 더 자연스러운 문장인 거죠.

 

이처럼 단어 기반에서는 여러 확률로 조합해본 다음, 가장 자연스러운 문장을 다시 확률적인 방법으로 찾아내는 과정이 필요합니다.

 

또 자칫 잘못해서 '점심을 가졌다'로 번역하는 경우도 있습니다.

 

'had'가 '가졌다'는 의미로 쓰일 확률이 가장 높기 때문이죠.

 

하지만 구문 기반에서는 이런 일이 없습니다. 'had lunch'의 확률을 따지므로, 가장 확률이 높은 '점심을 먹었다'로 번역하죠.

 

구문 기반은 이처럼 훨씬 더 자연스러운 문장을 만들어냈습니다.

 

영어를 공부할 때 단어 대신 숙어를 통째로 외우는 것과 마찬가지입니다.

 

뿐만 아니라 단어 기반은 문장의 확률을 점검하는 규칙도 만들어야 하지만, 구문 기반은 그럴 필요가 없습니다.

 

훨씬 더 단순해졌습니다. 이제 언어학자가 더 이상 규칙을 만들 필요가 없고, 오히려 규칙을 없앨수록 더 자연스러운 문장을 만들어낼 수 있었습니다.

 

이즈음 IBM의 과학자 프레더릭 젤리넥은 언어학을 전공한 분이라면 누구나 분노할만한 유명한 명언을 남겼습니다.

 

"언어학자를 해고할 때마다 성능은 높아진다"

 

TAGS.

Comments