진정 스마트한 챗봇의 시대가 열리는가?
Facebook AI Research에서 최근에 BlenderBot 2.0을 공개하였습니다. 한 가지 연구결과는 아니고 그동안 FAIR에서 진행하던 대화 시스템, 챗봇 등에 관한 연구들을 조합하여 만든 시스템이라고 볼 수 있습니다. FAIR의 대화 시스템 연구 프레임워크인 ParlAI 기반으로 공개 해 놓았습니다. 아직 테스트를 진행해 보지는 않았지만 공개된 내용에 따르면 성능이 꽤 좋다고 하니, FAIR 블로그 글을 바탕으로 어떤 내용인지 간단하게 정리 해 보았습니다.
BlenderBot 2.0 은 Long-term memory 를 사용하는 챗봇입니다. 기존에는 이걸 제대로 하는 경우가 거의 없었습니다. 또한, 인터넷을 활용해서 최신 정보를 검색해서 어떤 토픽이든 잘 대화할 수 있다고 합니다. 2020년도에 오픈소스로 공개한 BlenderBot 1.0 보다 성능이 훨씬 좋아졌다고 합니다. Personality (대화하는 개인별로 다른 대응을 하는것), Empathy (감정에 공감해 주거나 하는 것), Knowledge 와 관련된 기능들을 하나의 시스템으로 녹여 넣었다고 합니다.
긴 대화를 이어나가거나 Knowledge base 를 활용하거나, 일관된 대화를 하는 면에서 1버전이나 현존하는 SOTA 성능의 챗봇들에 비해서 훨씬 뛰어나다고 합니다. 기존의 챗봇들은 단순 매칭 기반 기술을 사용하는 경우가 많고 context 관리가 잘 안되어서 일관된 대화의 성능이 많이 떨어졌습니다. 긴 대화를 이어나가는 것도 마찬가지구요. 이러한 점을 많이 개선했다고 합니다.
여기 사용된 모델은 대화를 하면서 얻은 정보를 적절하게 저장하고, 사용합니다. 이 때 정보는 Long-term mermory 에 저장되는데 이 데이터는 며칠, 몇주, 몇달간 저장될 수도 있습니다. 그리고 이 데이터들은 각각의 개인별로 다르게 저장이 되기 때문에 다른 개인과의 대화에서 이 정보는 쓰이지 않습니다. 이러한 점은 리스크 관리적 측면 뿐 아니라 개인화 측면에서도 필요한 부분입니다.
또한 대화 도중에 인터넷 검색을 위한 query 생성이 가능하며, 검색으로부터 얻은 결과를 읽거나 여기에서 값을 추출하여 물어본 것에 대한 응답을 만들어 낼 수도 있습니다. 즉, 이 모델은 고정된 것이 아니라 계속해서 변화해 가는 세상에서 up-to-date 로 정보가 유지된다고 볼 수 있을 것입니다.
연구자들이 활용할 수 있도록 이 모델에 관한 코드나 평가를 위한 세팅, 실험 결과나 학습 시 사용된 데이터셋은 모두 공개해 놓았다고 합니다.
기존의 Language generation model 들 (GPT3 나 BlenderBot 1.0 등)의 경우 진짜같이 느껴지는 텍스트들을 최소한 context 내에서는 생성이 가능했습니다. 하지만 많은 경우 Goldfish memory 문제가 있었죠. (참고로 여기서 Goldfish memory를 직역하면 금붕어 기억력으로, 형편없는 기억력을 의미합니다.) 그래서 Long-term memory 는 동적으로 업데이트 되지 않고 static한 형태로 유지되어서 특정 시점에서 정해진 값만 사용이 가능했었습니다.
그렇기 때문에 GPT3나 BlenderBot 1.0 같은 모델들은 새로운 정보가 업데이트 되지 않고 학습한 시점에 있던 데이터의 과거 값만 있게 됩니다. 예를 들어, 현재 진행되는 2021 도쿄 올림픽의 현재 결과에 대해 물어보면 잘 모를 것이고 완다비전이나 로키같은 최신 디즈니 드라마에 대해 물어봐도 잘 모를 것입니다. 따라서 결과적으로 틀린 답을 하는 경우가 많게 되는데, 이번 BlenderBot 2.0은 그렇지 않습니다.
기존의 챗봇은 음식, 영화, 음악 등에 관한 응답을 할 수는 있지만 좀 더 복잡하거나 자유로운 대화는 잘 안되었습니다. 하지만 BlenderBot 2.0 의 기반 기술은 어떤 토픽에서든 대화할 수 있는 유용한 일상적인 툴이 될 수 있을 것으로 예상됩니다. 왜냐면 BlenderBot 2.0은 기존의 데이터와 Knowledge를 활용하여 인터넷 검색을 위한 query를 만들어서 검색을 이용하는 첫번째 챗봇이기 때문입니다. (원문에서는 첫번째라고 했지만 검색 쿼리 만드는 챗봇은 꽤 많습니다. 다만 비교적 스마트하게 이용한다는 의미로 보면 될 것 같습니다. 또한 테스트 결과 기존의 시스템들을 모두 이겼다고 합니다.
BlenderBot 2.0은 검색엔진을 활용해 새로운 Knowledge를 얻어낼 수 있을 뿐 아니라 Long-term local memory store에 이 값을 저장하고 활용할 수도 있다고 합니다. 여기서는 검색을 위해서 두 가지 방법을 테스트하였다고 합니다. 첫번째는 faiss 라이브러리 (페북에서 오픈소스로 만든 많은 벡터들 사이에서 nearest neighbor를 빠르게 찾을 수 있도록 하는 라이브러리 입니다.) 를 활용하여 인터넷 덤프한 데이터로부터 Nearest Neighbor를 찾는 방식이고, 두번째는 Bing Search API 를 활용한 방식입니다.
이렇게 인터넷에서 검색을 통해 그 결과를 기반으로 적절한 대화 응답을 생성하면 최신 정보가 항상 유지되도록 할 수 있고, 다양한 곳에 활용될 수 있습니다. 또한, 이전에 이야기했던 대화에 대한 context도 기억을 하기 때문에 더 관련도 높은 대화를 할 수 있고 Knowledge를 기반으로 하기 때문에 헛소리 (많은 챗봇들이 앞뒤가 안맞거나, 문법은 맞지만 문맥이 이상하거나 의미론적으로 이상한 텍스트를 만들어내는 경우가 많습니다.)를 할 확률도 적습니다.
BlenderBot 2.0은 FAIR의 Retrieval Augmented Generation 이라는 연구에 기반한 모델을 사용하고 있습니다. 이 연구는 대화의 내용 외에도 추가적인 Knowledge를 활용해서 대화의 응답을 생성하는 연구입니다. 이 방법은 Seq2seq generator와 Information Retrieval 모델을 조합한 것으로, Long-term memory 와 인터넷 검색 결과 모두를 활용해서 응답을 생성해 냅니다. 이를 위해서, 주어진 대화 context로 검색 쿼리를 생성 해 낼 때 Encoder-Decoder 구조 아키텍쳐를 활용하였습니다.
결과로 나온 Knowledge를 사용하여 응답을 생성해 낼 때는 Fushion-in-Decoder라는 방법으로 Knowledge와 대화 기록이 인코딩되며, 이 인코딩된 값 기반으로 응답을 생성해 냅니다. 또한 챗봇의 Long-term memory store에 어떤 정보를 추가할 지 판단하는 Neural module 또한 가지고 있습니다.
현대의 Machine Learning 트렌드는 매우 큰 모델을 학습하는 것인데, 이렇게 무지막지하게 큰 모델의 경우 배운 값을 weights 에 저장하게 됩니다. 그럼으로 인하여 Parroting과 같은 문제가 발생하기도 합니다. (이와 관련해서는 Github Copilot을 설명하면서도 다루었으니 참고) 하지만, 계속해서 추가되고 변화하는 전체 인터넷을 weights 에 저장하는 것은 불가능합니다. 따라서 여기서는 on the fly로 인터넷에 접근하는 방식을 사용하였습니다.
이렇게 Long-term의 대화 히스토리 뿐 아니라 외부의 Knowledge도 활용하는 모델을 학습하기 위해서, 이러한 목적으로 사용될 데이터셋 2가지를 크라우드 소싱 플랫폼을 사용해서 만들었습니다.
인터넷 검색을 사용해서 새로운 정보를 이용해 가면서 대화하는 데이터셋. 이 데이터셋은 BlenderBot 2.0에 지도학습 용도로 사용되었습니다. 대화를 기반으로 연관된 검색 엔진 쿼리를 어떻게 생성하는지, 그리고 검색 결과를 기반으로 연관된 응답을 만들기 위해서 사용됩니다.
여러 개의 세션으로 이어지는 대화이면서, Long context를 가지는 대화 데이터셋. 즉, 특정 사람끼리 여러 세션을 대화하되 다른 세션에 있던 대화를 참고함. 이 데이터셋은 fresh knowledge를 Long-term memory 에 저장하고, 이러한 메모리가 주어졌을 때 연관된 응답을 만드는 걸 학습하기 위해서 사용됩니다.
이러한 데이터셋들을 조합하여 Multitask training 을 했다고 합니다. 참고로 BlenderBot 1.0에서 사용된 데이터 또한 활용하였다고 합니다.
BlenderBot 1.0의 경우 이미 기존의 SOTA 수준 챗봇인 Meena (Google AI 의 대화모델) 나 DialoGPT (Microsoft의 대화모델) 보다 좋은 성능을 보였다고 합니다. 그래서 BlenderBot 2.0 을 평가하기 위해 BlenderBot 1.0을 벤치마크로 삼아 Multisession chat 에서의 Long-term conversation 성능과 대화할 때 Knowledge 를 잘 활용하는지를 평가해 보았다고 합니다.
테스트 결과 훨씬 좋은 성능을 보였다고 하며, 특히 user engagement score 가 17% 향상되었으며 이전 대화 세션 활용은 55% 향상되었다고 합니다. 또한 Knowledge 사용 능력에서 헛소리하는 비율이 9.1% 에서 3.0% 로 감소했다고 하며, 12% 나 더 자주 사실 기반의 일관된 대화를 하였다고 합니다. (참고로 모든 평가결과는 사람이 직접 평가하는 정성 평가 기반입니다.) 즉, BlenderBot 2.0 의 Long-term memory 기능이 더 좋고, 인터넷 검색 결과에 기반하여 더 좋은 결과를 만들어낸다는 의미입니다.
챗봇의 안정성은 굉장히 중요합니다. 멀리 보지 않아도 Microsoft Tay 나 국내 스타트업 스케터랩의 이루다 케이스만 봐도 알 수 있습니다. 챗봇이 unsafe하거나 offensive 한 발화를 하는 경우를 막아야 하는데, 다른 사람과의 대화를 통해 점진적으로 학습하 나가는 경우 이용자들이 악의적인 데이터를 주입할 수가 있습니다. (MS Tay가 그러한 사례였습니다. 이루다의 경우 학습 데이터 필터링을 제대로 못한 초보적인 리스크 관리 실패 케이스이기 때문에 좀 다른 케이스이긴 합니다만..)
BlenderBot 2.0에서는 안정성을 테스트하기 위해서 두 가지 새로운 방법 (Baked-in-safety & Robustness to difficult prompt)을 개발하였다고 합니다. 이러한 방법들은 기존의 기술들보다 뛰어난 성능을 보여서 공격적인 응답을 90% 감소시켰고, safe한 응답은 74.5% 증가했다고 합니다. (자동으로 판별하는 classifier 를 만들어 측정했다고 합니다.) 물론 safety issue가 완전히 해결된 것은 아닙니다. 또한, BlenderBot 2.0이 인터넷 검색을 사용하고 Long-term memory 를 사용하는 것은 팩트 체크와 같은 새로운 문제를 야기하였습니다. (인터넷에 있는 내용은 잘못된 경우도 많기 때문) 이러한 것들은 앞으로 계속 개선 해 나가야 할 것이라고 이야기하고 있습니다.
이 연구에서 공개한 내용들은 현재의 SOTA 챗봇 시스템에 큰 진전을 만들 수 있을 것으로 보이지만, 앞으로 해야 할 것들도 많이 있습니다. 헛소리를 하는 경우는 줄어들었지만 아직도 존재하며, 모델이 Deeper understanding 능력을 갖기 전까지는 모순된 이야기를 하기도 합니다.
또한 아직까진 응답 발화에 대해서 safe 한지 아닌지를 완전히 이해하지 못합니다. Long-term memory 를 활용하긴 하지만 이걸로 진정한 learning을 하는 것은 아닙니다. 즉, 관련된 연구를 하기는 하지만 mistake가 있을 때 이를 바로잡는 능력 등은 부족합니다. 또한 앞으로는 사람이 실제로 채팅할 때는 이미지도 사용하는 것 처럼 Multimodal 까지 확장될 필요도 있습니다.
이러한 최신 연구들과 기술들이 하나의 AI system 으로 통합되는 것이 BlenderBot research 의 목표이며 공개한 연구, 코드, 데이터셋이 커뮤니티에 도움이 되길 기대한다고 합니다.
BlenderBot 2.0을 살펴보았는데요, 우리는 이제 스마트한 챗봇을 만날 수 있는 걸까요? 아직은 아니라고 봅니다. 예전에 ParlAI를 활용해서 이것저것 시도해 본 적이 있는데, 원하는 성능에는 많이 못 미쳤었습니다. 논문을 쓰기 위한 연구 용도로는 괜찮을 지 몰라도 서비스화 하기까지는 난관이 많지요.
FAIR에서 발표한 것들은 대단해 보이는 연구들이 많은데 실제 상용화 하기까지는 좀 애매한 경우가 많습니다. (NMT에 관한 연구만 해도 SOTA를 달성했다는 모델들을 다양하게 많이 내놓았는데 아직 제대로된 번역 서비스를 못 내놓았습니다. 이러한 것만 봐도 연구를 실제로 서비스로 만드는 건 쉽지 않은 일이고 많은 난관이 있다는 걸 알 수 있습니다.)
참고로 이 글에서 예로 든 GPT3의 경우 few-shot, one-shot learning도 어느정도 가능하기 때문에 이걸 활용해서 검색 쿼리를 만들어 내면 훨씬 더 좋지 않겠느냐는 의견이 있을 수도 있을거 같은데요, 아직까지는 걸음마 단계이기 때문에 그 성능이 많이 부족합니다. GPT3같은 매우 큰 하나의 잘되는 모델로 다양한 task에 접목해서 하는 방법도 있을 것이고 이렇게 BlenderBot 처럼 여러 개별 기술들을 모아서 만드는 경우도 있겠지만, 현재 기술로는 모든 방향성에 대한 탐색이 필요하다고 보여집니다.
물론 거대한 규모의 모델, 그리고 이렇게 다양한 연구들의 조합을 통해서 빠르게 발전해 나갈 것입니다. 어느 순간 사람과 차이를 못느끼는 수준의 챗봇도 정말 개발될 수 있을 것 같습니다만, 아직은 갈 길이 멉니다. 그만큼 발전 가능성이 크다는 이야기일 것 같습니다. 앞으로 더 많은 연구와 개발이 이뤄져서 어서 빨리 나의 인공 비서가 생겼으면 좋겠습니다.