카카오톡봇

자동학습 작동원리

나더단 2019. 5. 17. 16:31


 위 대화 내용은 자동학습테스트 내용중 일부 입니다.

 자동학습은 말 그대로 직접 손으로 if문같은거로 말을 가르치거나 /가르치기 기능을 이용하지 않고 봇이 스스로 대화내용을 분석해 말을 배워서 하는 것입니다. 그렇기 때문에 가끔 아무말이나 하는 경향이 있습니다. 이러한 문제를 해결하기 위해 여러 작업들을 해야하는데요. 오늘은 그 작업들에 대해 알려드리겠습니다.

 우선 저는 간단하게 sender1이 A라는 말을 하고 sender2가 일정 시간 안에 B라는 말을 하면 그 말들을 기록해 저장하는 것을 만들었습니다. 이 과정에서 중요한 것은 필터링인데요. indexOf를 이용해 배우지 못하게 할 단어들을 골라주시면 됩니다.

 그런데 또 문제가 발생을 하는데 A라는 말 뒤에 B라는 말이 오는데 이것이 문맥에 맞는말인지를 봇은 전혀 인식할 수 없다는 것입니다. 예를들어 안녕 이라는 말 뒤에 안녕하세요 이라는 말이 오는것을 학습하면 잘 학습됐다 할 수 있지만 엉뚱한 말이 오면 이상하게 학습될 수 있습니다.

case1)
sender1: 안녕
sender2: 안녕하세요!!

case2)
sender1: 안녕
sender2: 아 배고파

 이를 해결하기 위해 저는 가중치를 부여했습니다. 안녕 이라는 말 뒤에 상황에 따라 다른말들이 올것인데 이런 말들을 일단 파일에 모두 저장하는 것입니다. 그리고 많이 나오는 말에 더 높은 가중치를 부여해 더 많이 나오게 할것입니다.

 여기서 저는 가정 하나를 두었는데요. "만약 문맥에 맞는말이라면 문맥에 맞지 않는 말보다 더 많이 저장도리 것이다." 입니다. 안녕 이라는 말 뒤에 어떠한 말들이 가장 많이 올까요? 보통은 인사말들이 가장 많이 올것 입니다. 그래서 데이터가 쌓일수록 문맥에 맞는 말들이 더 많이 쌓일거라는 가정을 두었습니다. 그래서 일단 안녕 이라는 말 뒤에 오는 말들을 모두 저장해보았습니다. 그 결과는 다음 사진과 같이 나왔습니다.


 안녕 말고 다른키워드들도 살펴보았습니다.
 


 이런식으로 문맥에 맞지않은 말들도 꽤 많이 학습됐지만 문맥에 맞는 단어 절반정도를 가져왔다는 것을 알게되었습니다.

 이제 메세지가 오면 그 메세지에 대한 학습이 저장되어 있으면 일정 확률로 저장된 단어중 랜덤으로 뽑아 말을 하게했습니다. 그렇다면 자연적으로 더 많이 학습되어있는 단어들이 나올 확률이 뫂아지게 됩니다. 그래서 만약 문맥에 맞는 단어가 약 50%정도 학습됐다면 봇이 말하는 말의 약 50%는 문맥에 맞게 말할 수 있게 될것입니다.

소스는 곧 공개하겠습니다.