[책 리뷰] 게으른 족제비와 말을 알아듣는 로봇 | 튜링 테스트, 인공 신경망에서 논리 학습까지 - 대화형 AI 만들기

부혜선·2023년 9월 15일
0

책 리뷰

목록 보기
2/2
post-thumbnail

서론

챗지피티를 자주 사용하고 다양한 AI 서비스를 접해봤지만, AI는 내게 여전히 어려운 분야다. AI에게 학습을 시킨다는데 그 '학습'이 무얼 의미하는지도 잘 몰랐다. AI를 활용한 다양한 서비스가 등장하고 있는 지금, 전문가의 수준은 아니더라도 AI에 대해 최소한이라도 알고 있어야 겠다고 생각했다. 그리고 어떤 방식으로 AI가 학습을 하는지, 컴퓨터가 어떻게 인간의 말을 이해하는 것인지 책을 통해 배우고자 했다.

이 책은 우화 형식으로 인공지능을 만드는 과정을 전문적인 개념이 없이도 이해할 수 있도록, 인문학적으로 풀어 설명한다. 게으른 족제비들이 만들고자 하는 '뭐든 다 하는 로봇'과 이를 만들기 위해 좌충우돌하는 와중에 만나는 여러 로봇들을 통해서 언어를 다루는 기계 시스템에 대해 쉽게 배울 수 있다. 우화를 통해 알게 된 기계 학습의 과정을 정리하고 소감을 말해보려 한다.



본론

'말을 이해한다'는 것의 의미

이야기에서 중심이 되는 것은 ‘말의 의미가 무엇인가’이다. 이를 이 책에서는 다음의 두 가지 질문에 대해 탐구하고 있다.

  • 말을 알아들었다고 말할 수 있으려면 적어도 무엇이 가능해야 하는가?
  • 말을 이해한다는 행위는 적어도 무엇과 다른가?

구어를 알아듣는 일

책의 예제에 따르면, 가곡 이라는 단어의 3개의 'ㄱ' 은 모두 다른 소리를 낸다. 하지만 우리는 3가지 모두 같은 소리로 인식한다.

이처럼 발음 방식에 따른 음성의 차이는 문장이나 단어 중에 어느 위치에 있는지에 따라서 달라진다. 하지만 우리는 무의식 중에 그 차이를 무시하고 같은 종류의 소리로 인식한다. 반면 기계는 인간처럼 무의식 중에 같은 소리로 인식하는 것없이, 그 모두 다른 소리라고 인식한다. 따라서, 기계가 사람의 말을 알아듣게 하기 위해서는 발음은 다르지만 같은 음소(뜻의 차이를 일으키지 않는 같은 소리) 그룹에 넣어도 되는 음성과 다른 음소 그룹에 넣어야 하는 음성을 구별해주어야 한다. 인공지능에게 한 단어의 음을 알아듣게 하기 위해서는 그 단어에 적용된 '음성의 카테고리화 시스템'을 이해하고 귀에 들려오는 각각 다른 음성을 '카테고리(음소)'에 연결할 수 있도록 해주어야 한다.

기계의 음성 인식과 학습

기계가 사람 말을 듣고 이해하는 기술 중 대표적인 것이, 입력된 음성을 '문자열'이나 '단어 열'로 바꾸는 기술인 음성 인식 기술이다. 컴퓨터는 말소리를 다루기 위해 말소리가 가진 파장의 특징을 '숫자의 조합'으로 나타낸다. 숫자로 표현된 음성을 기계가 적절한 음소에 연결할 수 있도록 하는 기술 중 대표적인 것이 기계 학습(machine learning)이다.

기계 학습의 목적은 '함수를 구하는 일'이다. 함수를 구하는 일이 '음성을 음소와 연결하는 것'과 어떠한 연관이 있을까? 음성과 음소를 숫자로 표현하면 '음성을 음소와 연결하는 일'은 '음성을 입력하면 그에 대응하는 음소를 출력하는 함수를 구하는 일'이라고 말할 수 있다.

기계 학습으로 함수를 구할 경우 확률이나 통계를 사용하기도 하는데, 확률과 통계의 신뢰도 높은 예측을 위해서는 충분한 과거 사례와 편향되지 않은 사례의 집합이 필요하다. 기계 학습도 마찬가지이다. 질 좋은 학습 데이터가 학습 결과를 좌우한다. 최근 음성 인식 기술의 발달에 영향을 미친 것은 기계 학습 방식의 발전과 확립, 그리고 활용 가능한 대량의 학습 데이터의 존재다.


튜링 테스트

1950년 영국의 교육자인 앨런 튜링이 발표한 논문 <기계가 지성을 가졌는지 여부를 판단하는 테스트>에서 진행된 연구가 튜링 테스트다. 이로부터 인공지능의 연구가 시작되었다고 알려져 있다.

  • " 만약 기계에게 인간과 구별하기 어려울 만큼 대화가 가능한 능력이 생긴다면, 그 기계는 지성을 가졌다고 판단해도 좋다. "
  • " 우리 인간끼리도 상대가 정말로 지성을 가졌는지를 판단하려면 그의 행동을 보고 추측할 수밖에 없다. 행동을 보고 판단한다는 것은 부정한다면 궁극적으로 '나 이외의 사람은 모두 지성을 갖지 못했다.'라는 독단론적 결론에 빠지고 말 것이다. "
    _앨런 튜링

질문에 대답할 줄 아는 기계의 시스템

기계에게 문장 형태로 질문을 입력해 대량의 문헌 속에서 옳은 답을 찾아내게 만드는 과제를 '질문 응답'이라고 한다. 우리가 챗지피티에게 질문하고 답을 얻는 것도 이 것이다. 질문에 대답할 줄 아는 기계의 시스템은 다음과 같다.

  1. 질문 문장 속에서 '정답 유형'을 추측한다.
  2. 질문 문장을 변환해서 '검색용 핵심어'를 만들고 정보 출처를 검색한다.
  3. 검색한 문헌에서 '정답 후보'가 될 단어를 유추한다.
  4. 정답 후보 리스트에서 '확신도(Certainty Factor)'를 기반으로 답을 고른다.

기계들이 답한 것의 정확성은 정보의 출처인 문헌군에 기반하게 된다. 문헌에 나와있지 않은, 상식적이거나 일상적인 내용의 질문은 기계가 잘 대답하지 못할 수 있다.

심층 학습의 출발점

기계에 이미지를 비춰 주고 무엇이 비치는지 대답하게 만드는 과제를 '물체 카테고리 인식'이라고 한다. 이 과제에는 "무시해야 할 차이를 무시하고, 무시하면 안 되는 차이를 무시하지 않는다."라는 까다로운 조건이 존재했다. 이를 해결하는 실마리를 준 것은 심층 학습(Deep learning)이다.

인공 신경망

일반적으로 심층 학습이라고 하면 기계에게 중간층을 두 개 이상 가진 모델을 학습시키는 것을 말한다. 위 층에서 얻은 결과를 다음 층에서 사용할 수 있다. 이 때, 인간이 사전에 "이 층(혹은 뉴런)에는 이런 역할을 분담시키자."하고 정해 놓을 필요가 없다. 또 인간이 미리 데이터의 중요한 특징을 추출해서 기계에 제공할 필요도 없다. 그런 사전 작업 없이도 학습이 잘 이루어지면 기계는 '저절로' 알아서 할 수 있게 되기 때문이다.
뉴런_출처_나무위키

심층 학습의 기본은 '신경망(뉴런 네트워크)'에 있다. 신경망이란 신경세포(뉴런)를 본뜬 계산 단위를 연결한 것이다. 간단하게 말하자면, 뉴런의 수상 돌기가 입력값이 되고, 시냅스는 가중치, 축삭돌기로 전해지는 것이 출력값으로 대응된다. 이 신경망 네트워크의 학습은 신경망 모델에게 많은 예제를 제공하여 최대한 정답이 출력되도록 가중치를 조정하는 일이다.

이미 아는 것에서 새로운 것을 알아내기

논리란 무엇인가

'논리'의 사전적 정의는 '사고의 법칙, 형식. 사고나 논의를 뻗어나가는 과정'이라고 볼 수 있다. 우리가 사고하는 방식에서는 법칙성이 발견되는데, 그 것은 무의식적이든 의식적이든 간에 "만약 어떤 일이 사실이라면 다른 어떤 일도 사실일 것이다."라고 내렸던 판단들의 축적으로 성ㄹ입된다. 이러한 판단을 일반적으로 '추론'이라고 한다. 우리는 '이미 알고 있는 것'에서 '아직 모르는 것'을 도출하고 있다.

추론과 뜻 이해

어떤 문장으로부터 어떤 문장이 추론되느냐 아니냐를 판단하는 능력은 어떤 문장이 참인지 거짓인지 확인할 때도 도움이 된다. '만약 그것이 옳다면 반드시 이럴 것'이라는 추론을 거듭함으로써 우리의 오감으로 확인할 수 있는 수준의 문장으로 구현한 다음, 그 가설이 옳은지 틀린지 검증하기 위한 실험을 설계할 수 있다.

그리고 우리가 어떤 문장들을 '같은 뜻', '다른 뜻'이라는 판단을 할 때도 추론이 관여한다. 또 대답하기 쉽지 않은 기능어의 의미도 추론을 통해 파악이 가능하다.

논리적인 사고를 방해하는 것

  1. 감정과 입장
  2. 단순한 오류
  3. 말의 정의
  4. 숨겨진 전제
  5. 모호성

기계에게 '문장과 문장의 논리적 관계' 판단하게 하기

문장을 추론 패턴에 넣기

말을 추론 패턴에 적용하는 단계를 어렵게 만드는 요인 중 하나가 '문장의 형태와 추론 패턴이 일대일로 대응하지 않는다는 점이다. 그리고 문장 구조를 알아야만 문장 속 어느 부분이 '덩어리'이고 어떤 단어가 어떤 단어의 '영향 범위' 안에 있는지를 알 수 있으므로 '문장 구조'에 신경을 써야 한다. 또 문장을 추론 패턴에 넣을 때 상식이나 어휘 지식 등 숨겨진 전제를 보충해야 하는 경우도 있다. 인간끼리의 의사소통에서는 상대방과 어느 정도 지식이 공유될 것을 기대할 수 있지만, 기계에게는 대부분 완전한 기초 지식부터 제공해야 한다.

문장끼리 얼마나 닮았는지 따지기

활발히 이용되고 있는 방법은 '전제' 문장과 '결론' 문장이 서로 얼마나 닮았는지 주목하는 방법이다. 기계 학습에서 '뜻이 얼마나 가까운지'를 추측하는 데에 가장 영향을 주는 것은 '문자나 문장들이 표면젖ㄱ으로 얼마나 비슷하냐'이다. 하지만 이 것만으로는 해결되지 않는 문제가 있으며, 그럴 경우 동의어나 유의어 등 단어의 뜻이 얼마나 비슷한지 판별할 수 있게 해주는 추상적인 정보가 필요하다.

기계에게 '단어 간 의미적 관계' 알려주기

컴퓨터가 학습할 수 있는 것은 '문자에 상당하는 전기 신호의 나열'이다. 기계가 사전이나 백과사전으로 부터 정보를 얻더라도 이를 이해하는 것이 아니다. 기계에게 동의와 같은 정보를 주는 사전 중 대표적인 것이 '워드 넷(WordNet)인데, 이는 다양한 과제에 이용된다. 다만 '함의 관계 인식'에 이용하기에는 다의성 취급 문제, 다룰 수 있는 단어 범위의 한계 문제 등이 거론된다.

단어 뜻을 자동으로 알게 하기

위의 문제를 보완하기 위해 대량의 언어 데이터로부터 자동으로 단어의 뜻 정보를 얻는 연구가 이루어지고 있다. 주로 동의어나 유의어를 골라내는 데 이용하는데, 이를 가능하게 만들어 준 것이 '문맥의 주변에 등장하기 쉬운, 공기 관계를 지니는 단어의 정보를 바탕으로 단어의 말뜻을 표현하는 일'이다. 이는 "비슷한 문맥에서 나타나는 단어끼리는 비슷한 뜻을 가지는 경향이 있다."(Harris, 1954)라는 생각(분포 가설)에 기반한다.

이 아이디어에 따라 단어의 뜻을 벡터로 나타내는 일이 활발히 이루어지고 있다. 벡터는 방향과 크기를 가진 양을 나타내는데, 화살표나 숫자 그룹도 그 표현 방법 중에 하나다. 단어의 뜻을 벡터로 나타낸다는 말은 개개의 단어 뜻을 이런 '숫자 그룹'과 숫자 그룹에 따라 표현되는 '화살표'로 나타낸다는 것이다. 단어의 뜻을 벡터화하면 단어끼리의 뜻이 가까운 정도를 구체적인 수치로 나타낼 수 있다.

많은 양의 단어(ex. 국어에 속하는 모든 단어)를 비교 대상으로 설정하게 되면 벡터의 차원 수가 너무 높아져 컴퓨터 상에서 다루기 어려워진다. 이에 낮은 차원의 벡터로 단어 뜻을 나타내는 방안이 모색되고 있는데, 그 중 구글이 개발한 워드투벡터(word2vec)가 있다. 워드투벡터 알고리즘으로는 수십에서 수백 수준의 비교적 낮은 차원으로 단어 뜻을 표현할 수 있다.

뜻과 의도

언어를 연구하는 학문에서 말뜻과 의도는 종종 구별된다. 구별법 중 하나로 '말뜻'을 '문장 그 자체가 나타내는 내용'으로, '의도'를 '그 문장을 말한 화자가 그 문장에서 나타내고 있는(혹은 나타내고 싶어 하는) 내용'으로 정의하는 방법이 있다. 왜 말뜻과 의도를 구별해야 하나? 그것은 말뜻과 의도 사이에 '어긋남'이 생기는 일이 있기 때문이다.

모호성 해소

'말뜻과 의도의 어긋남'을 발생시키는 요인 중 하나가 모호성이다. 상대방이 모호한 말을 할 경우, 두 가지 이상의 의미로 해석될 수 있는 말을 할 경우, 제대로 의도를 가려내지 못하면 적절하게 반응할 수 없다.

모호성이 발생하는 요인은 다음과 같다.

  1. 다의어
  2. 명사(구)가 지시하는 것
  3. 문장의 구조

대화의 함축

'대화 함축'을 적절하게 해석할 수 있느냐에 따라 화자의 의도 판단의 결과가 나뉘기도 한다. 대화 함축이란 문장으로부터 직접 추론되는 내용이 아니라 문장이 뱉어진 상황에서 추측되는 내용을 말한다.(ex. "케이크 먹고 싶다." = "케이크 사다 줘.") 대화 함축을 적절히 이해하려면 우선 문장에 포함된 단어의 뜻, 그리고 그 단어들이 생기는 의미를 이해해야 한다. 그리고 그 문장이 이야기된 상황이나 장면, 그 문장에 다다르기까지 있었던 대화의 흐름, 상대방과 본인의 관계 등 여러 가지 요소를 고려해야 할 필요가 있다.




결론

우화를 통해 알아 본 '언어를 이해하기 위해 필요한 조건'은 아래의 7가지로 정리할 수 있다.

  1. 음성과 문자의 열을 단어 열로 변환할 수 있는 능력
  2. 문장 내용의 참-거짓을 따질 수 있는 능력
  3. 말과 바깥 세계를 연결 지을 줄 아는 능력
  4. 문장과 문장 간 의미 차이를 이해하는 능력
  5. 말을 사용한 추론이 가능한 능력
  6. 단어 뜻에 대한 지식을 가지는 능력
  7. 상대방의 의도를 추측할 줄 아는 능력

그리고 위의 능력을 '대량의 데이터를 활용하여' 기계에게 학습시키기 위해서 적용되는 공통적인 과제는 다음과 같다.

  • 기계를 위한 '예제'나 '지식 데이터베이스'가 될, 신뢰할 만한 대량의 데이터를 어떻게 모을 것인가?
  • 기계에게 이 '정답'이 옳으며, 또한 포괄적이란 것을 어떻게 보증할 것인가?
  • 눈에 보이는 형태로 나타내기 어려운 정보는 어떻게 기계에 제공할 것인가?

학습을 위한 양질의 데이터를 확보하는 것은 쉽지 않다. 그래서 현재 '말을 이해할 수 있는' 인공지능 학습에는 한계가 존재하는 게 아닐까 싶다. 저자 또한 비교적 데이터 수집이 쉬운 과제를 해내는 기계나 용도와 목적이 적절히 제한된 기계를 만드는 편이 더 나을 수 있다고 말하고 있다. 이 방법이 현재 기술의 이점을 살리는 방법이자 인간에게 도움이 되는 기계를 한층 더 빨리 만들어 낼 수 있는 방법이라고 말하면서 말이다.

소소한 소감

기계 학습 과정을 보면서 인공지능이라는 게 굉장히 대단하고 어려운 기술이라는 것을 새삼 다시 느끼게 되었다. 과연, 내가 인공지능 관련한 개발을 한다면 할 수 있을까? 라는 물음부터 생각이 났다. 아직은 할 줄 아는 게 매우 적은 병아리 개발자이기 때문이다(아니 아직 직장을 갖지 못 했으니 개발자라고도 할 수 없다. 개발자 지망생이다).

그리고 게으른 족제비들이 생각보다 멋진 녀석들이 아닐까 생각했다. 게으름을 피우기 위해서 '모든 것을 할 줄 아는 로봇'을 완성하기 위해 필요한 단계를 하나하나 좁혀 간다. 어쩌면 작은 순간인 '게으름'을 위해서 고군분투를 하는 것이다. 이를 보며 조금만 더 편리하게, 조금만 더 쉽게를 바라며 이상을 꿈꾸고 이를 이루기 위한 단계를 수행하는 인간의 모습이 떠올랐다. 게으름이 세상을 바꾼다고 하지 않나. 물론, 늘어져 잠만 자는 게으름을 포함하여 말하는 것은 아니다. 변화를 위한 끊임없는 탐구를 말하는 것이다. 개발도 곧, '편리성'과 '효율성'을 위한 탐구의 영역이다. 그렇기 때문에 보다 나은 것을 향해 탐구하는 자세는 개발자로서 갖추고 있어야 한다고 생각한다.

다양하게 고민하기 위해서는 폭넓게 알고 있는 지식이 필요한 것 같다. 그래서 내가 잘 알지 못하는 영역을 배우고자 책을 읽고 있다. 꾸준히 책을 읽기 시작한지 얼마 되지 않았다. 아직은 개발자가 되기 위해 필요한 지식을 얻는 것이 목적인 책 읽기이지만 개발자로 취업에 성공하고 여유가 생긴다면 더 넓은 영역의 책을 읽고 간접 경험을 할 수 있는 기회가 늘어나지 않을까 기대해 본다.

profile
이동통신 서비스와 서버 운영을 담당하는 운영/서비스 엔지니어

0개의 댓글