비전공자도 이해할 수 있는 AI지식 -컴퓨터가 글을 읽는 방법-

1. 규칙으로 컴퓨터가 글을 이해하게 할 수 있을까

 

인간의 입에서 나온 음성 파형을 텍스트 문장으로 바꿨다면, 이때부터 컴퓨터는 또 다른 어려운 문제에 직면합니다.

 

문장의 의미를 알아내는 일입니다

 

과거 애플 컴퓨터용으로 출시됐던 세계 최초 어드벤처 게임인 콜로설 케이브 어드벤처(colossal cave adventure)는 이 문제를 아주 쉽게 처리했습니다

 

콜로설 케이브 어드벤처 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

 

게이머가 단 두 단어만 사용할 수 있도록 정했습니다.

 

모든 명령어는 "Go West(서쪽으로 가)", "Grab Ax(도끼를 잡아)" 이런 식이었죠

 

얼핏 봐도 규칙은 매우 간단합니다.

 

동사 + 명사 형태였습니다. 출시된 연도가 1976년도였으니 당시 기술로는 어쩔 수 없는 일이기도 했습니다.

 

이런 경우 언어를 이해하는 방식은 매우 간단합니다.

 

띄어쓰기를 기준으로 첫 번째 단어와 두 번째 단어를 분리한 후 첫 번째 단어인 동사는 명령, 두 번째 단어인 명사는 목표로 설정하는 거죠

 

이제 어떠한 "목표"에 대해 어떠한 "명령"을 내리도록 프로그래밍하면 됩니다.

 

언어의 이해가 모두 끝난거죠.

 

하지만 아쉽게도 현실은 게임이 아닙니다. 현실은 매우 복잡합니다. 

 

인간이 만든 단어 간 관계와 규칙은 상상할 수 없을 정도로 복잡하고 무궁무진합니다. 

 

초기에 과학자들은 규칙을 컴퓨터에게 열심히 가르쳤습니다. 언어학자들이 인간의 언어 규칙을 파악한 다음, 그 규칙을 일일이 프로그래밍으로 입력했죠.

 

하지만 이 같은 방식은 한계가 분명했습니다. 같은 단어라도 의미나 표현하는 방식은 정말로 다양했고 규칙은 끝이 없었죠.

 

예를 들어 "달리다"를 뜻하는 "run"은 그 의미가 무려 200가지가 넘습니다. 

 

뿐만 아니라 run은 동사로 주로 쓰이지만 명사로 쓰이기도 합니다.

 

이렇게 되면 단순히 run이 등장했을 때 이 단어가 어떤 의미인지, 명사인지 동사인지 앞뒤 단어나 문맥을 파악하지 못하면 결코 알아낼 수 없죠

 

게다가 사람들은 간혹 비논리적이고 문법에 맞지 않는 말도 사용합니다.

 

때로는 중요한 단어를 생략하죠. 그럼에도 불구하고 기계는 문장의 의미를 파악해야 합니다.

 

 

2. 자연어 이해, 기계가 글의 의미를 이해하는 과정

 

기계가 이러한 난관을 뚫고 과정을 처리하는 것을 자연어 이해(NLU, Natural Language Understanding)라고 합니다.

 

말이나 글의 의미가 무엇인지 알 수 있도록 언어를 구조화하는 것이죠.

 

스마트 스피커가 텍스트 문장을 감지하면 먼저 도메인을 구분합니다.

 

이를 도메인 분류라고 합니다. 스마트 스피커에 들어가는 기술이 아직 표준화된 것은 아니라서 각각의 스피커마다 이를 지칭하는 용어가 다릅니다.

 

여기서는 가장 먼저 스마트 스피커를 출시한 아마존이 주로 사용하는 용어를 따르겠습니다.

 

아마존은 도메인이라고 부르는데, 이는 카테고리를 분류하는 과정입니다.

 

발화 도메인
"오늘 날씨 어때?" 날씨
"최신 가요가 듣고 싶어." 음악
"레스토랑 예약해줘." 예약

 

이처럼 문장이 어떤 카테고리에 해당하는지 판별하는 과정이 바로 도메인 분류입니다. 자연어 이해의 첫 관문이기도 합니다.

 

도메인을 분류한 이후에는 무엇을 해야할까요?

 

사용자의 의도를 파악해야합니다. 이를 인텐트 분류라고 합니다.

 

앞서 표에 내용을 좀 더 채워보도록 하죠

 

발화 도메인 인텐트
"오늘 날씨 어때?" 날씨 조회
"최신 가요가 듣고 싶어." 음악 재생
"레스토랑 예약해줘." 예약 진행

 

각 문장의 의도를 파악해 인텐트를 분류했습니다. 

 

이처럼 내용을 구조화하면 기계가 각각의 내용에 따라 적절한 행동을 취할 수 있겠죠?

 

요컨대 어떤 음성이 도메인 "음악", 인텐트 "재생"으로 분류됐다면, 이제 스피커는 스트리밍 서비스에서 음악을 재생하려 할 겁니다.

 

그런데 여기서 중요한 부분이 빠졌습니다.

 

"오늘 날씨 어때?"라는 질문에 과연 어느 지역의 날씨를 알려줘야할까요?

 

전국의 날씨가 다를텐데 말이죠. 이렇게 누락된 정보를 채워주는 과정을 슬롯 필링(slot filling)이라고 합니다.

 

말 그대로 빈 공간(slot)을 채우는(filling)과정이죠.

 

"오늘 날씨 어때?"라는 문장에서 지역 정보가 비어 있으니, 이 정보를 예측하여 채워줘야 합니다. 

 

위치를 말하지 않았다는 건 십중팔구 현재 위치를 말하는 거겠죠? 

 

이제 현재 위치의 정보를 채워주면 됩니다. 이것이 바로 슬롯 필링입니다. 

 

"최신 가요가 듣고 싶어"라는 요청에는 어떻게 반응해야 할까요?

 

이 문장에는 비어 있는 슬롯이 없네요. "최신 가요"라는 명확한 목표가 있고, 재생이라는 인텐트를 파악했으니 "최신 가요"를 "재생"하면 될 것 같습니다.

 

아마 필요한 슬롯이 채워져 있기 때문에 슬롯 필링이 필요하지 않습니다.

 

하지만 마지막 사례는 조금 어려워보입니다.

 

"레스토랑 예약해줘"라는 요청을 해결하기 위해서는 어느 레스토랑(장소)인지, 언제(시간) 예약이 필요한지, 몇명(인원)인지 등과 같은 추가 정보가 필요합니다.

 

이 정보를 자동으로 파악하거나 유추하기는 매우 어려워 보입니다. 

 

이 경우에는 슬롯을 채우기 위해 추가 질문을 합니다. 사람과 대화하듯이 대화를 이어나가는 거죠.

 

이를 멀티 턴(multi-turn)이라고 합니다. 

 

필요한 정보를 얻기 위해 여러 번 반복해서 묻고, 응답에서 필요한 정보를 추출하여 빈 슬롯을 채워나가는 거죠.

 

---------------------------------------------------------

 

레스토랑 예약해줘!

 

>> "어디로 예약할까요?"

 

VIPS로 예약해줘

 

>> "몇 시"로 예약할까요?

 

오늘 오후 7시

 

>> "몇 명" 예약할까요?

 

3명

 

>> "예약이 완료되었습니다"

 

-----------------------------------------------------------------------------------------------------------

 

필요한 정보가 모두 채워지면 그제야 완료되었다는 메시지를 출력하고, 예약 과정을 모두 종료합니다.

 

발화 도메인 인텐트 슬롯 슬롯 필링
"오늘 날씨 어때?" 날씨 조회 위치: 현재 위치 O
"최신 가요가 듣고 싶어" 음악 재생 대상: 최신 가요 X
"레스토랑 예약해줘" 예약 진행 장소: 빕스
시간: 오늘 오후 7시
인원: 3명
O

 

 

자, 이제 표의 내용을 모두 채웠고 이렇게 자연어 이해가 끝났습니다.

 

사실 레스토랑 예약의 슬롯 필링을 모두 채우려면 여러 번 대화를 반복해야 하고, 이전 대화를 기억해야하므로 다양한 기능을 구현해야합니다.

 

단순히 자연어 이해 단계에서 한번에 처리할 수 있는 기능은 아니죠.

 

이러한 기능은 다음 단계인 다이얼로그 매니저(dialog manager)에서 처리합니다.

 

다이얼로그 매니저는 자연어 이해에서 처리한 내용을 받아 실행 명령을 내리는 역할도 겸합니다.

 

 

 

TAGS.

Comments