기계 학습(Machine Learning)은 즐겁다! Part 5

딥러닝(Deep Learning)과 시퀀스(Sequence)의 마법을 사용한 언어 번역(Language Translation)


우리는 모두 마법처럼 100 가지 다른 언어를 즉시 번역 할 수 있는 웹 사이트 인 구글 번역(Google Translate)을 알고 있고 사랑합니다. 심지어 휴대 전화나 스마트 워치에서도 사용할 수 있습니다:

구글 번역에 사용된 기술을 기계 번역(Machine Translation)이라고 합니다. 다른 방법으로는 절대 불가능했던 전세계 사람들의 의사 소통을 가능하게 함으로써 세상을 변화시켰습니다.

그런데, 사실 고등학생들이… 음… 지난 15 년간 스페인어 숙제를 하기위해 구글 번역의 도움을 받아 왔다는 것을 모두 알고 있습니다. 그렇다면 이건 오래된 뉴스가 아닌가요?

지난 2 년 동안, 딥러닝(deep learning)은 기계 번역에 대한 우리의 접근 방식을 완전히 새롭게 바꿔 놓았습니다. 언어 번역에 대해 거의 아는 것이 없는 딥러닝 연구자들이 세계에서 가장 뛰어는 언저 전문가가 제작한 언어 번역 시스템을 능가하는 상대적으로 간단한 기계 학습 솔루션을 앞다퉈 내놓고 있습니다.

이 획기적인 기술을 시퀀스-투-시퀀스 학습(sequence-to-sequence learning) 이라고 부릅니다. 이는 많은 종류의 문제들을 해결하는 데 사용되는 매우 강력한 기술입니다. 이제 이것이 번역에 어떻게 사용되는지 확인한 후에, AI 챗봇(Chat Bots)을 작성하거나 그림을 묘사하는 데에도 정확히 동일한 알고리즘이 어떻게 사용되는지 배울 예정입니다.

*역자주: 시퀀스-투-시퀀스(sequence-to-sequence)에서 시퀀스란 연관된 연속의 데이터를 의미합니다. 이 글에서 주로 이야기하고 있는 문장(sentences)은 결국 문법 등의 규칙으로 연관된 일련의(sequential) 단어들 집합으로 볼 수 있고, 좋은 시퀀스의 예입니다. 따라서, 시퀀스-투-시퀀스 문제란 사진을 제공하면 어떤 사물인지 분류하는 것(clustering)과는 다르게 소스 시퀀스를 결과 시퀀스로 바꾸는 문제를 말합니다. 예를 들어, 사진을 신경망에 제공하면 어떤 사진인지(슬픈지 또는 기쁜지) 일련의 문장으로 묘사하는 것이 가능해진 것입니다. 일반적으로, 앞선 설명과 같이 시퀀스-투-시퀀스 모델은 입력 데이터 처리를 위한 인코더(encoder)와 출력 데이터 처리를 위한 디코더(decoder)로 구성됩니다.
참조, https://arxiv.org/abs/1406.1078, https://arxiv.org/abs/1409.3215

자 시작하시죠!

컴퓨터가 번역할 수 있게 만들기

그렇다면, 컴퓨터가 인간 언어를 번역할 수 있도록 하려면 어떻게 프로그래밍해야 하나요?

가장 심플한 접근 방법은 문장의 모든 단어를 대상 언어의 번역 된 단어로 바꾸는 것입니다. 다음은 단어 단위로 스페인어에서 영어로 번역하는 간단한 예제입니다.

단순히 각각의 스페인어 단어를 일치하는 영어 단어로 바꿉니다.

필요한 것은 각 단어의 번역을 찾기 위한 사전이므로 이는 구현하기 쉽습니다. 그러나 문법과 문맥을 무시하기 때문에 결과는 좋지 않습니다.

이제 다음에 해야할 일은 결과를 개선하기 위해 해당 언어에 맞는 규칙들을 추가하는 것입니다. 예를 들어, 일반적인 2 단어 구문을 하나의 그룹으로 번역하는 것입니다.그리고 영어와는 다르게 스페인어에서는 명사와 형용사의 순서가 반대이기 때문에 명사와 형용사의 순서를 뒤집어 번역하는 것입니다.

효과가 있네요! 문법의 모든 부분을 적용할 때까지 규칙을 계속 추가하면, 우리 프로그램은 모든 문장을 번역 할 수 있게 될 것입니다, 그렇겠죠?

이것이 바로 가장 초기의 기계 번역 시스템이 동작한 방법입니다. 언어 학자들은 복잡한 규칙을 찾아서 하나씩 차례로 프로그래밍했습니다. 세계에서 가장 현명한 언어 학자 중 일부는 냉전 기간 동안 러시아어 통신을 보다 쉽게 해석할 수 있는 번역 시스템을 만들기 위해 수년간 노력했습니다.

유감스럽게도, 이것은 일기 예보와 같이 간단하고 평이하게 구조화 된 문서에서만 동작했습니다. 실생활 문서에서는 안정적으로 동작하지 않았습니다.

여기서의 문제는 인간의 언어가 고정된 규칙들을 따르지 않는다는 것입니다. 인간의 언어는 특수한 상황, 지역적 다양성들로 가득하며 규칙 위반이 아무렇지 않게 일어납니다. 우리가 영어로 이야기하는 방식은 앉아서 문법 규칙을 정의하는 사람들보다 수백년 전에 누군가를 침략했던 사람에 따라 더 많은 영향을 받았습니다.

통계를 이용해 컴퓨터가 번역을 더 잘할 수 있도록 만들기

규칙 기반 시스템이 실패한 후에, 문법 규칙을 대신해서 확률 및 통계 기반의 모델을 사용하는 새로운 번역 접근 방법이 개발되었습니다.

통계 기반의 번역 시스템을 만들기 위해서는 동일한 텍스트가 최소한 두 가지 언어로 번역되어 있는 많은 훈련 데이터가 필요합니다. 이러한 이중 번역문(double-translated text)를 병렬 말뭉치(parallel corpora 또는 병렬 코퍼스)라고 부릅니다. 1800년대 과학자들이 로제타 스톤 (Rosetta Stone)을 그리스어로부터 이집트 상형 문자를 이해하는 데 사용했던 동일한 방식으로, 컴퓨터는 병렬 말뭉치를 사용해 텍스트를 한 언어에서 다른 언어로 어떻게 변환해야 하는지를 추측할 수 있습니다.

다행하게도 이중 번역문(double-translated text)들은 희한한 곳에 이미 많이 있습니다. 예를 들어, 유럽 의회는 그들의 의사 진행 절차를 21개의 언어로 번역해 놨습니다. 그래서 연구자들은 종종 번역 시스템을 구축하는 데 이 데이터를 사용합니다.

훈련 데이터는 보통은 흥미롭습니다! 하지만 이건 단지 수백만 줄의 건조한 정부 문서들입니다…

확률로 생각하기

통계기반 번역 시스템과의 근본적인 차이점은 하나의 정확한 번역을 생성하려고하지 않는다는 것입니다. 그 대신에, 수천 개의 가능한 번역을 생성 한 다음 각각의 번역이 정확한가에 대해 순위를 매깁니다. 이 시스템은 훈련 데이터와 얼마나 유사한지에 따라 “정확도”를 평가합니다. 그럼, 어떻게 동작하는지 알아보겠습니다:

Step 1: 원본 문장을 여러 조각들로 나누기

먼저, 문장을 쉽게 번역될 수 있는 단순한 조각들로 분해합니다.

Step 2: 각각의 조각에 대해 가능한 모든 번역을 찾기

그런 다음, 훈련 데이터에 있는 동일한 단어 조각에 대해 사람이 이미 번역한 모든 방법을 찾아 이러한 조각들을 번역합니다.

그런데, 여기서 중요한 점은 단순히 번역 사전에서 이 조각들을 찾는게 아니라는 것입니다. 그 대신에, 우리는 실제 사람들이 실생활에서 이 동일한 단어 조각들을 어떻게 번역하는지를 확인합니다. 이를 통해 다양한 맥략으로 사용될 수 있는 모든 다른 번역 방식을 확인할 수 있습니다.

가장 일반적인 문장이라 할지라도 다양한 번역이 가능합니다.

그런데, 가능한 번역 중 일부는 다른 것들보다 자주 사용될 수 있습니다. 이렇게 훈련 데이터에서 각각의 번역이 얼마나 자주 나타나는지에 따라 점수를 부여 할 수 있습니다.

예를 들어, “Quiero”는 “I want”라는 의미 보다는 “I try”를 의미하는 경우가 훨씬 더 일반적입니다. 따라서 우리는 Quiero가 우리 훈련 데이터에서 덜 빈번하게 사용되는 번역 보다 “I want”로 번역되는 빈도만큼 여기에 가중치를 줄 수 있습니다.

Step 3: 모든 가능한 번역문을 만들고 가장 좋은 것 찾기

다음으로, 이 조각들의 가능한 모든 조합을 통해 가능한 모든 번역문을 생성합니다.

Step 2에서 나열했던 조각들에 대한 번역으로부터 우리는 이 번역 조각들을 여러 가지 방법으로 조합해서 거의 2,500 가지의 다양한 문장을 생성 할 수 있습니다. 여기 몇 가지 예가 있습니다:

I love | to leave | at | the seaside | more tidy.
I mean | to be on | to | the open space | most lovely.
I like | to be |on | per the seaside | more lovely.
I mean | to go | to | the open space | most tidy.

그런데, 실제 시스템에는 더 많은 조각들의 조합이있을 것입니다. 왜냐하면, 단어의 또다른 순서와 문장을 조각내는 다양한 방법을 시도해야 하기 때문입니다:

I try | to run | at | the prettiest | open space.
I want | to run | per | the more tidy | open space.
I mean | to forget | at | the tidiest | beach.
I try | to go | per | the more tidy | seaside.

이제 이렇게 생성된 모든 문장을 확인하고 “가장 인간”다운 문장 하나를 찾아야 합니다.

이렇게 하기 위해서, 우리는 생성 된 각 문장을 영어로 쓰여진 책과 뉴스 기사의 수백만 개 실제 문장과 비교합니다. 비교할 영어 텍스트가 많을수록 좋습니다.

다음과 같은가능한 번역을 살펴 보겠습니다:

I try | to leave | per | the most lovely | open space.

아무도 이런식의 영어 문장은 쓰지 않았을 것처럼 보입니다. 따라서, 우리의 훈련 데이터 세트에 있는 어떤 문장과도 유사하지 않습니다. 우리는 이 가능한 번역에 낮은 확률 점수를 줄 것입니다.

그러면, 다음과 같은 다른 가능한 번역을 보겠습니다.

I want | to go | to | the prettiest | beach.

이 문장은 분명 우리의 훈련 데이터 세트에 있는 어떤 것과 유사 할 것입니다. 따라서, 높은 확률 점수를 얻을 것입니다.

모든 가능한 번역문을 확인해서, 실제 영어 문장과 가장 유사한 문장이면서 가장 가능성이 큰 조각 번역을 포함한 번역을 선택할 것입니다.

우리의 최종 번역은 “I want to go to the prettiest beach.”입니다. 나쁘지 않네요!

통계기반 기계 번역(Statistical Machine Translation)은 엄청난 이정표였습니다

통계기반 기계 번역 시스템은 충분한 훈련 데이터를 제공하면 규칙 기반 시스템보다 훨씬 뛰어납니다. Franz Josef Och는 이러한 아이디어를 개선해서 2000 년대 초 구글 번역(Google Translate)을 구축했습니다. 마침내 전 세계에 기계 번역(Machine Translation) 서비스가 제공되었습니다.

초기에는, 언어학자들이 설계한 규칙 기반 시스템보다 확률에 기반한 이 “바보 같은” 접근 방식이 더 효과적인 것에 대해 모든 사람들이 놀랐습니다. 이 때문에, 80 년대 연구원들 사이에서는 (다소 심한) 이런말이 있었습니다.

“언어학자를 한명 해고할 때 마다, 정확도가 높아진다”
Frederick Jelinek

통계기반 기계 번역의 한계

통계기반 기계 번역 시스템은 잘 동작하지만 구축하고 유지하기가 어렵습니다. 번역하고자 하는 새로운 언어 한쌍마다 새로운 여러 단계의 번역 경로(pipeline)을 전문가가 수정하고 조정해야합니다.

이렇게 언어별로 다른 경로(pipeline)을 구축하는 것은 힘들기 때문에 절충안이 필요합니다. Google에서 그루지야어(Georgian)를 텔루구어(Telegu)로 번역 요청을 하면, 그루지야어를 텔루구어로(Georgain-to-Telegu) 번역하는 것은 충분한 투자를 할정도로 빈번하지 않기 때문에, 내부적으로는 중간단계인 영어로 번역을 합니다. 그렇다 보니, 보다 일반적인 경우인 불어를 영어로(French-to-English) 번역하는 것을 요청했을 때보 다 덜 향상된 번역 경로을 사용해 번역을 수행하게 될 것입니다.

컴퓨터가 우리를 위해 이 모든 귀찮은 개발 작업을 하게 한다면 있다면 멋지지 않을까요?

컴퓨터가 번역을 더 잘하게 만들기 — 비싼 전문가들 없이

기계 번역의 성배는 훈련 데이터만 주면 알아서 번역하는 방법을 배우는 블랙박스 시스템(black box system)입니다. 통계기반 기계 번역을 사용하더라도 인간이 직접 여러 단계의 통계 모델을 만들고 조정해야 합니다.

*역자주: 여기서 블랙박스 시스템(black box system)이란 작동원리는 감춰진 또는 알아서 동작하는 시스템을 의미

2014 년, 조경현(KyungHyun Cho) 팀이 돌파구를 만들었습니다. 그들은 딥러닝(deep learning)을 적용해 이 블랙박스 시스템을 구축하는 방법을 찾아냈습니다. 그들의 딥러닝 모델은 병렬 말뭉치(parallel corpora 또는 병렬 코퍼스)를 사용해 사람의 아무런 개입이 없이도 두 언어 사이의 번역 방법을 학습합니다.

이는 순환 신경망(recurrent neural networks) 인코딩(encodings)이라는 두 가지의 큰 아이디어를 통해 실현되었습니다. 이 두 가지 아이디어를 영리하게 결합하면, 자가 학습 번역 시스템(self-learning translation system)을 만들 수 있습니다.

순환 신경망(Recurrent Neural Networks)

우리는 Part 2에서 순환 신경망에 대해 이미 다루었습니다만, 빠르게 다시 확인해 보겠습니다.

일반적인 (순환하지 않는) 신경망은 숫자 목록을 받아 (이전 훈련을 기반으로) 결과를 계산하는 일반 기계 학습 알고리즘입니다. 신경망은 많은 문제를 해결하는 블랙 박스로 사용될 수 있습니다. 예를 들어 신경망을 사용해서 어떤 집의 속성을 기반으로 그 집의 대략적인 가치를 계산할 수 있습니다.

그러나 대부분의 기계 학습 알고리즘과 마찬가지로 신경망도 상태를 저장하지 않습니다(stateless). 숫자 목록을 전달하면 신경망은 그 결과를 계산합니다. 동일한 숫자를 다시 전달하면 항상 동일한 결과과 값을 계산합니다. 과거의 계산값들에 대한 저장소(memory)가 없습니다. 즉, 2 + 2는 항상 4입니다.

순환 신경망 (또는 줄여서 RNN)은 신경망의 이전 상태가 다음 계산의 입력 값 중 하나가 되는 신경망이 약간 수정 된 버전입니다. 이는 이전 계산이 미래의 계산 결과에 영향을 미친다는 것을 의미합니다.

인간은 순환신경망을 싫어합니다: 이 단 하나의 이상한 묘책이 기계를 더 똑똑하게 만들었습니다!

그런데 왜 이 일을 해야 하나요? 우리가 마지막으로 계산한 결과와 상관 없이 2 + 2는 항상 4여야 하지 않나요?

이 묘책을 통해 신경망은 일련의 데이터에서 패턴을 학습 할 수 있습니다. 예를 들어, 단어의 처음 몇 글자만 보고도 다음으로 나올 가장 가능성있는 글자를 예측할 수 있습니다.

순환망은 스마트폰 키보드 앱의 ‘자동 수정’을 구현할 수 있는 유일한 방법입니다.

RNN은 데이터에서 패턴을 학습하고자 할 때 유용합니다. 인간 언어는 단지 하나의 크고 복잡한 패턴 이기 때문에, 자연어 처리의 많은 영역에서 RNN이 점점 더 많이 사용되고 있습니다.

RNN에 대해 더 자세히 알고 싶다면, 이를 사용해서 가짜 Ernest Hemingway 책을 만들고 또 가짜 Super Mario Brothers 레벨을 만들어 봤던 Part 2를 읽어보십시오.

인코딩(Encodings)

추가로 검토해야할 개념는 인코딩(Encodings)입니다. Part 4에서는 얼굴 인식 과정의 한 부분으로 인코딩에 대해 설명했습니다. 인코딩을 설명하기 위해, 약간 우회해서 서로 다른 두 사람을 컴퓨터가 어떻게 구별 할 수 있는지 알아보겠습니다.

컴퓨터로 두 얼굴을 구별하기위해서는 각각의 얼굴에서 서로 다른 측정 값을 수집해 얼굴을 비교합니다. 예를 들어, 각 귀의 크기 또는 눈 사이의 간격을 측정하고 두 사진에서 이러한 측정 값을 비교하면 동일한 사람인지 확인할 수 있습니다.

당신은 아마도 이미 황금시간대 방송되는 CSI 같은 수사물을 통해 이러한 아이디어에 익숙할 것입니다:

CSI에서 나온 장면인 이 단순한 gif를 너무 좋아해서 다시 사용했습니다 — 왜냐하면 사실 완전히 말도 안되긴 하지만, 어쨌든 이 아이디어를 잘 보여주기 때문입니다.

얼굴을 측정값 목록으로 바꾸는 아이디어가 바로 인코딩(encoding)의 예입니다. 우리는 원본 데이터(얼굴 사진)를 대표하는 측정값 목록(인코딩)으로 변환합니다.

그런데, Part 4에서 봤듯이 우리가 직접 얼굴을 측정하기 위한 특별한 측정 목록을 신경쓸 필요는 없습니다. 대신에, 신경망이 얼굴 사진으로부터 측정값을 생성하게 하면 됩니다. 컴퓨터는 어떤 측정값이 비슷한 두 사람을 구분하기에 딱 맞는지를 찾아내는데 있어 우리 보다 훨씬 뛰어납니다:

이러한 얼굴 특징 측정값들은 다른 사람들의 얼굴이 다른 결과값으로 나오도록 훈련 된 신경망에 의해 생성됩니다.

이것이 바로 인코딩입니다. 인코딩은 우리가 매우 복잡한 무엇(얼굴 사진)인가를 단순한 것(128 개의 숫자)로 표현할 수있게 해줍니다. 이제 두 개의 다른 얼굴을 비교하는 것이 전체 이미지를 비교하는 대신에 각각의 얼굴에 대한 128 개의 숫자들만 비교하면 되기 때문에 훨씬 쉬어졌습니다.

그런데 말입니다. 문장으로도 똑같은 작업을 할 수 있습니다! 가능한 모든 문장들을 일련의 고유한 숫자로 나타내는 인코딩을 만들수 있습니다:

이 숫자 목록은 영어 문장인 “Machine Learning is Fun!”을 나타냅니다. 다른 문장은 다른 숫자의 집합으로 표현될 것입니다.

이러한 인코딩을 생성하기 위해서는 RNN에 문장을 제공하되 한 번에 한 단어 씩 제공합니다. 마지막 단어가 처리되면 최종 결과는 전체 문장을 나타내는 값들이 됩니다:

RNN에는 전달된 각 단어를 “저장(memory)”하고 있기 때문에, 계산된 최종 인코딩은 문장에 있는 모든 단어를 나타냅니다.

좋습니다. 이제 문장 전체를 고유 한 숫자들로 표현할 수 있는 방법이 생겼습니다. 인코딩의 각 숫자가 무엇을 의미하는지 알지 못하지만 실제로 중요하지도 않습니다. 각 문장이 고유 한 숫자 집합으로 식별될 수만 있다면, 그 숫자가 어떻게 생성되었는지 정확하게 알 필요는 없습니다.

이제 번역을 해 봅시다!

자 이제 우리는 RNN을 사용해서 문장을 고유 한 숫자들로 인코딩하는 방법을 알았습니다. 그래서 이것이 어떤 도움이 될까요? 정말 멋진 것들이 여기 있습니다!

두 개의 RNN을 서로 연결하면 어떤일이 일어날까요? 첫 번째 RNN은 문장을 나타내는 인코딩을 생성하게 할 수 있습니다. 그런 다음 두 번째 RNN이 해당 인코딩으로부터 원래 문장으로 다시 디코딩하기 위해 동일한 로직을 역으로 수행하게 할 수 있습니다:

물론 원래 문장을 인코딩하고 다시 디코딩하는 것이 그리 쓸모 있는 것은 아닙니다. 그러나 두 번째 RNN을 영어 대신 스페인어로 디코딩하도록 훈련시킬 수 있다면 어떨까요? 병렬 말뭉치(parallel corpora )를 사용해 이를 수행하도록 훈련시킬수 있습니다:

이렇게 해서, 영어 단어로 된 시퀀스를 이에 해당하는 스페인어 단어의 시퀀스로 변환해주는 일반적인 방법이 만들어졌습니다!

이것은 정말 멋진 아이디어 입니다:

  • 이 접근 방법은 보유한 훈련 데이터의 양과 수행할 컴퓨터의 성능에만 제약이 있습니다. 기계 학습 연구자들이 겨우 2년전에 이것을 발명했지만, 벌써 개발하는데만 20년이 걸리는 통계기반 기계 번역 시스템과 동일한 성능을 보여주고 있습니다.
  • 이 방법은 인간 언어에 관한 어떠한 규칙에도 의존하지 않습니다. 알고리즘이 이러한 규칙 자체를 파악합니다. 즉, 번역 경로(pipeline)의 각 단계를 조정해줄 전문가가 필요하지 않습니다. 컴퓨터가 대신 그 일을 합니다.
  • 이러한 접근법은 거의 모든 종류의 시퀀스-투-시퀀스(sequence-to-sequence) 문제에 적용할 수 있습니다! 사실 많은 흥미로운 문제들은 결국 시퀀스-투-시퀀스 문제입니다. 어떤 멋진 일들을 할 수 있는지 계속 읽어보세요!

실제 데이터로 이러한 작업을 수행하는 데 필요한 몇 가지 사항만을 강조했다는 것을 아셔야 합니다. 예를 들어, 다양한 길이의 입력 및 출력 문장을 처리하기 위한 추가 작업이 있습니다 ( bucketing and padding 참조). 드물게 쓰이는 단어를 올바르게 번역하는 데에도 문제가 있을 수 있습니다.

나만의 시퀀스-투-시퀀스(sequence-to-sequence) 번역 시스템 구축

나만의 언어 번역 시스템을 만들고 싶다면, TensorFlow에 포함된 영어와 불어간 번역 을 위한 실제 데모를 참고하십시오. 그렇다고 해서, 이 데모가 대충 테스트해보고 싶거나 예산이 부족한 사람들을 위한 것은 아닙니다. 이 기술은 여전히 새롭고 많은 리소스를 필요로 합니다. 고성능 비디오 카드가 있는 고속 컴퓨터를 사용하더라도 나만의 언어 번역 시스템을 훈련하는데 대략 1개월 정도의 연속적인 처리 시간이 소요될 수 있습니다.

또한 시퀀스-투-시퀀스 언어 번역 기술이 급속도로 향상되고 있어 이를 따라잡기는 매우 어렵습니다. 최근의 많은 개선(예를 들어, attention mechanism 또는 tracking context)은 결과를 크게 향상시켜 주지만, 이러한 것들은 너무 새롭기 때문에 아직 위키피디아 페이지에 조차 없습니다. 시퀀스-투-시퀀스 학습으로 무엇인가 대단한 일을 하고 싶다면, 새로운 개발 방법이 나올때 마다 이를 공부해야만 합니다.

시퀀스-투-시퀀스(Sequence-to-Sequence) 모델의 황당한 힘

그렇다면, 시퀀스-투-시퀀스 모델로 또 어떤 것을 할 수 있나요?

약 1 년 전, Google의 연구원들은 시퀀스-투-시퀀스 모델을 사용해 AI 챗봇(chat bot) 을 만들 수 있음을 보여주었습니다. 아이디어는 너무 간단해서 동작하는 것이 놀라울 정도입니다.

먼저 Google 직원과 Google 기술 지원 팀 간의 채팅 로그를 수집했습니다. 그런 다음 직원의 질문이 입력 문장이고 기술 지원 팀의 응답이 해당 문장의 “번역”으로 해서 시퀀스-투-시퀀스 모델을 훈련시켰습니다.

사용자가 챗봇과 대화할 때, 각각의 사용자 메시지를 이 시스템으로 “번역”하고 챗봇의 응답을 얻습니다.

결과적으로 실제 기술 지원 질문에 (때때로) 대답 할 수 있는 준-인텔리전트 챗봇(a semi-intelligent bot)이 만들어졌습니다. 다음은 이 논문에서 따온 사용자와 챗봇 간의 샘플 대화의 일부입니다.

Human: connection refused or something like that
Machine: may i know the version of network connect you connect?
Human: i am not sure i know that
Machine: is the network connect prompting for any user certificate?
Human: yes
Machine: are you at home or at work at the moment? office?
Human: i am at home
Machine: try this. goto <URL redacted> page and enter your name and password
Human: done
Machine: try logging in with <NAME redacted> and check if its working fine now
Human: yes, now it works!
Machine: great. anything else that i can help?

이들은 또한 수백만 개의 영화 자막을 기반으로 한 챗봇을 만들어 봤습니다. 이 아이디어는 영화 등장인물들 간의 대화를 사용해 챗봇을 훈련시키고 인간처럼 이야기하게 하는 것이 었습니다. 입력 문장은 한 등장 인물이 말한 대화의 한줄이고 “번역”은 다음 등장 인물이 대답한 한 것입니다:

정말로 흥미로운 결과가 나왔습니다. 챗봇은 인간처럼 대화를 나눌 수 있었을 뿐만 아니라 아주 적긴 하지만 지능을 보여줬습니다.

Human: my name is david. what is my name?
Machine: david.
Human: my name is john. what is my name?
Machine: john.
Human: are you a leader or a follower?
Machine: i’m a leader.
Human: are you a follower or a leader?
Machine: i’m a leader.

이것은 단지 가능성의 시작일뿐입니다. 한 문장을 다른 문장으로 변환하는 것에만 국한되지 않습니다. 이미지를 문장으로 바꾸는 이미지-투-시퀀스(image-to-sequence)모델을 만드는 것도 가능합니다!

Google의 또다른 팀은 첫 번째 RNN을 (Part 3에서 배웠던) 컨볼루션 신경망(Convolutional Neural Network)로 바꿔서 이를 구현했습니다. 이렇게하면 입력을 문장 대신 사진으로 사용할 수 있습니다. 나머지는 기본적으로 같은 방식으로 동작합니다.

그러면 당연하게도, 우리는 그림을 글로 바꿀 수 있습니다(물론 아주 많은 훈련 데이터가 필요합니다)!

Andrej Karpathy이 아이디어를 확장해서 이미지의 여러 영역을 개별적으로 처리함으로써 이미지를 매우 자세하게 설명 할 수있는 시스템을 구축했습니다.

Andrej Karpathy논문에서 가져온 이미지

이를 이용하면, 구체적인 검색어와 신기할 정도로 일치하는 이미지를 찾을 수있는 이미지 검색 엔진을 만들 수 있습니다:

http://cs.stanford.edu/people/karpathy/deepimagesent/rankingdemo/의 예제 화면

심지어 이와는 반대로 설명하는 문장 만으로 전체 그림을 생성하는 문제를 해결하려는 연구원들도 있습니다!

이러한 예제들로부터 당신은 어떤 가능성도 상상할 수 있습니다. 지금까지 음성 인식(speech recognition)에서 영상 처리(computer vision)에 이르기까지 모든 분야에서 시퀀스-투-시퀀스 애플리케이션이 연구되어 왔습니다. 분명히 내년에는 훨씬 더 많은 것이 만들어 질 것입니다.

시퀀스-투-시퀀스 모델과 번역에 대해 좀더 깊게 알고 싶다면, 추천하는 다음 자료들을 참고하십시오:


이 글이 마음에 들었다면, 제 Machine Learning is Fun! 이메일 리스트에 가입하는 것도 좋습니다! 새롭고 멋진 소식이있을 때만 이메일을 보내 드리겠습니다. 제가 이런 종류의 추가 글을 올릴때가 언제인지 알 수 있는 가장 좋은 방법입니다.

Twitter의 @ageitgey인 저를 팔로우하거나, 직접 이메일을 보내거나 또는 linkedin에서 저를 찾을 수도 있습니다. 기계 학습으로 제가 당신이나 당신의 팀을 도울 수 있다면 언제든 연락 주십시오.

*역자주: 번역글과 관련해 의견 주시려면, 저에게 직접 이메일을 보내시거나 LinkedIn에서 저를 찾으셔도 됩니다.