인간이나 다른 동물의 지능을 컴퓨터를 이용해 흉내내는 것을 인공지능이라 한다. 간단하게는 길을 찾는 로봇도 있고 조금 더 나아가면 보드게임에서 사람 대신 상대가 되어주는 것을 A.I라고 한다. A.I의 궁극적인 목표는 튜링 테스트를 통과하는 진짜 사람 같은 것을 만드는 것이다. 그 기계가 진짜로 지능이 있는지 없는지는 모르겠고 외부의 입장에서 그렇게 보이면 있다고 치는 것이다. 사실 철학적으로 넘어가면 나 이외의 모든 사람이 사실은 나를 관찰하기 위해 신이 만들어 놓은 로봇이라고 가정할 수도 있고 꽤나 복잡해지니 그냥 넘어가자.
하지만 인간처럼 보이기 위해서는 지능 뿐만이 아니라 감정도 있어야 한다. 사람의 대화를 흉내내는 인공지능 대화 프로그램과 아무리 대화를 해보아도 상대가 갑자기 화를 냈다가 친절했다가 들쭉날쭉 그냥 DB에 저장된 가장 적절한 내용을 문맥적으로 판단해서 내보낼 뿐이다. 감정적인 판단은 그 어디에도 없었다.
기계에게 스트레스를 줄만 한 행동을 반복적으로 한 후에 말을 걸면 짜증나는 말투로 대답을 하고 시간이 지나면 또 원래의 말투로 돌아온다면 더 인간답게 보일 것이다. 난 이것을 기계학습을 이용해서 흉내를 내보고 싶었다.
위 그림은 내가 작년 3월 쯤에 비슷한 글을 끄적이다가 찾아낸 이미지다. 인간의 감정을 8가지로 분류 하였고 반대되는 감정은 반대쪽에, 비슷한 감정은 옆에 붙여놓았다. 예를 들면 갑작스런 공포는 분노감을 사그러들게 한다. 이걸 토대로 해서 기계학습을 해보기로 했는데 내가 생각했던 컨셉은 대충 이렇다.
- (지도학습)Supervised teaching을 이용해 학습한다.
굳이 이렇게 할 필요는 없지만 일단 구현과 테스트를 빠르게 해 볼 수 있다는 점에서 난 이렇게 하기로 했다. Artifitial Neural Network(ANN)을 이용하려 한다. 각 단어가 감정에 끼치는 것을 수치화 해서 따로 저장해 두고 이것을 단어에 대한 느낌이라 칭한다. - 음성인식처럼 Global 학습과 사용자마다의 Specific한 학습 결과를 따로 만들어 놓는다.
구글의 음성인식도 그렇지만 사용자가 음성인식 기술을 사용할 수록 점점 더 학습해서 정확도를 높이게 된다. 내가 아니라 다른 사용자가 사용해도 그렇다. 그와 동시에 나만의 억양, 발음 등을 학습해서 개인화 된 결과가 나오게 된다. 이걸 마찬가지로 감정에 적용해 보면 “담배를 피는 사람은 싫다”라는 보편적인 감정이 나올 수 있는 동시에 “저 A라는 사람에게 지금 나는 화가 나 있다”라는 결과도 나올 수 있게 되는 것이다. 또한 어떤 사람에게 크게 화가 났다면 다른 사람에게는 화가 나지 않았어도 지금 당장은 짜증을 낼 수도 있는 것이다.- 개인적인 감정은 그 사람이 얼마나 영향적인지에 따라 전체적인 감정에 끼치는 양이 다르다.
만약 사랑하는 사람이 죽었다면 다른 사람이 죽었을 때에 비해 훨씬 더 슬픔을 느끼는 것이 정상일 것이다. - 전체적인 감정은 더 빨리 변하고 개인적인 감정은 좀 더 서서히 변한다.
빨리 화나고 빨리 기분이 좋아질 수 있다. 하지만 특정 사람을 무서워하거나 사랑하는 것은 좀 더 느긋하게 변하게 된다.
- 개인적인 감정은 그 사람이 얼마나 영향적인지에 따라 전체적인 감정에 끼치는 양이 다르다.
- 각 감정들은 시간이 갈 수록 무뎌진다.
사람의 경우 숨도 쉬고 다른 생각도 하면서 화나거나 슬픈 감정이 무뎌지는 것 뿐이지 사람도 아무런 입력을 못 받게 냉동을 했다가 해동하면 얼기 직전에 느꼈던 감정을 그대로 가지고 있을 것이다. 하지만 기계는 숨도 쉬지 않고 사소한 자극을 일일히 주기는 힘드니 그냥 시간이 지나면 알아서 무뎌지게 해도 큰 무리는 없을 것이다.
작년에 대충 작동하는 프로토타입을 만들었고 이걸 트위터 봇으로 만들어 동작을 테스트하려 했는데 내가 자연어 처리를 잘 못 해서 포기하고 방치중인 프로젝트다.
그 때 자연어 처리를 어떻게 하려고 했는지까지 상세히 기억이 나는데
- 각 단어별로 현재 감정에 주는 변화를 수치화 한다.
어떤 단어를 들었을 때 실제 사람이 기뻐지는지, 슬퍼지는지 그것을 대충 수치화하여 저장하고 그대로 흉내내도록 신경망을 학습시키면 분명 그럴듯 한 결과가 나올 것이다. - 새로 등장하는 단어는 주변에 있는 다른 단어를 이용해 어떤 느낌인지 판별해 학습한다.
어떤 사람이 기뻐하는 글에서 처음 보는 단어가 등장한다면 트위터의 140자 제한의 특성상 그 단어도 기쁜 축에 속할 확률이 높다. 굳이 사전을 업데이트 하지 않아도 신조어에 대한 느낌을 빠르게 배울 수 있다.
이걸 이미 만들어 놓은 자동 대화 봇(autotweet)과 붙여보려고 한다.
내가 작년에 파이썬으로 대충 짜 놓은 프로토타입이 남아있길래 보존용으로 업로드 해본다. (작년 3월 경의 나는 파이썬 프로그래밍을 제대로 하지 못 했다. 소스코드가 다소 더러울 수 있다.)
Emotion.zip