///
Search
Duplicate
🎆

Feedback-based Self-learning in Large-scale Conversational AI Agents

Created
2021/07/04 06:54
발표일자
2020/12/07
발표자
최태균
Tags
ConversationalAI
SelfLearning
✅main
포스팅 종류
논문리뷰

배경

스케일이 커지는 대화 시스템을 개선하기 위해서 ASR이나 NLU, ER과 같은 모듈만을 개선하는 것은 효율적이지 않음 (아래 그림은 skill이 증가함에 따라 supervise에 대한 어려움이 있다는 것을 보임)
사용자가 적절한 메뉴얼의 발화를 못하여 문제가 생기지만 유저나 세션 전반적으로 봤을 때 이런 패턴이 반복됨
사용자와 시스템 간의 인터렉션 피드백 시그널을 가지고 개선을 할 수 있고자 하는 시스템을 만들고자 하였음
개선하고자 하는 부분은 시스템 입장에서 발생하는 에러가 아닌 시스템과 유저 입장에서 발생하는 에러임

메커니즘

한 세션의 발화 시퀀스 전이 상태를 표현하고 타겟 발화에 대해서는 satisfied 한 발화인지를 판별
Absorbing Markov Chain을 통해 모델을 만들어 reachable 한 발화가 있는지를 예측하도록 함
메커니즘을 표현한 전체 수식

Absorbing Markov Chain

상태 전이 행렬이 존재할 시 이를 무한히 반복했을 때 특정 상태로 수렴되는 것을 이용한 방식
여기서는 이전 발화의 상태가 다음 발화의 상태로 전이되는 행렬이 있을 경우 무한하기 반복했을 경우 하나의 발화가 특정 상태(absorbing state)로 전이되도록 수렴
발화에 대해서 여러번 전이를 하게되면 성공 또는 실패라는 상태로 수렴될 수 있는 점이 활용 근거
여기서는 사용자가 한 세션 안에서 빈번하게 발생하는 발화 패턴을 찾는 것이 목적이라 보는 것 같음 (이와 같은 방법을 seq2seq 과 같은 딥러닝 모델에 적용하기는 어려울 것)
Absorbing Markov Chain은 transient state와 Absorbing state로 구성되고 transient state들에 대해서 무한히 반복했을 때 전이 상태를 생성하여 표현함

Interpretation Space

Markov Chain을 위한 전이 상태를 표현
여러 발화에 대해서 상태를 Normalize하는 것으로 보임
NLU와 NER을 통해 나온 발화 정보를 하나의 상태로 간주함
NLU와 NER을 통해 발화의 상태를 만들기 때문에 발화에서 상태로 전환하는 것이 일대일 대응을 활용하기 어려움 (알렉사 NLU의 stochasticity에 영향을 받기 때문)
발화에서 상태, 상태에서 발화로 전환 하기 위한 매핑 확률 분포가 필요함

Transient State

발화 상태의 다음 발화 상태가 발생할 확률을 표현하도록 함
현재 발화 상태와 그 다음 발화 상태에 대한 카운트를 먼저 세고 현재 발화와 인접한 발화들에 대한 카운트를 하여 marginalize를 함
위에 수식은 대화 한 세션에 대한 발화 순서를 기호로 표기한 것인데 발화 시퀀셜 끝에는 해당 발화에 대한 satisfaction feedback을 주도록 함 (이를 absorbing state라 함)
transient state에 대한 확률 표현에 대한 수식은 다음과 같음

Implicit/Explicit Feedback & Absorbing State

Explicit feedback
사용자가 개입된 피드백
Implicit feedback
시스템 내에서 발생한 이슈로 시스템이 응답을 하지 못한 피드백
각 피드백에 대한 상태 표현은 success, failure 형태로 표현을 하고 이들을 absorbing state로 표현하고자 함
absorbing state도 마찬가지로 확률로 표현을 하며 마지막 발화가 success 또는 failure에 발생할 횟수를 통해 확률 표현을 함

Markov Model에 대한 수식 표현 과정

source 발화 상태가 target 발화 상태로 바뀔 수 있는 reachability를 수식으로 표현하면
source 발화 상태가 target발화 상태로 reachable을 확인하는 방법
source 상태에서 target 상태로 가는 reachability가 source의 absorbing state값 (source 상태에서의 reachability 값) 보다 크면 reachable 하다고 할 수 있음
위에서 표현한 reachability를 행렬 수식형태로 변경을 하면 전이 행렬의 n승에 대한 summation으로 표현
absorbing state에 대한 확률 표현도 같이 하게되면 이와 같은 연산으로 표현됨

Markov Model에 대한 활용 및 Inference

발화 상태 전이 행렬에 대해서 fundamental 행렬을 생성 (이 행렬이 전이 행렬을 무한히 했을 때 수렴된 상태의 행렬을 표현)
한 발화 상태에 대해서 reachable 한 상태들을 표현한 벡터 N과 각 상태에 대한 success에 대한 absorbing state를 elementwise 곱을 하고 그 중 가장 큰 reachability 값을 선택

서비스 적용 시나리오

서비스 적용 데이터 스케일 및 구성

3개월 동안 뮤직 도메인에서 발생한 세션 데이터를 활용
발화 상태가 약 10^6 이므로 예상 발화 수는 약 100만 단위인 것으로 보임
세션으로 간주하는 발화의 간격은 45초 이하이고, 세션의 발화 시퀀스 길이는 5 이하로 정의
세션의 수는 한 세션당 3~5일 것일 것으로 가정하여 약 20만 이상인 것으로 보임

발화 전이 그래프 및 행렬의 이슈와 구성

10^6의 발화 상태 그래프를 inversion하는 것은 cost 대비 비효율적
따라서 scale out을 해야하고 그래프에 대함 approximation을 필요로 함
대부분의 발화 상태가 짧은 발화 턴 내에서 absorbing state(success, failure)로 수렴함
이로인해 reformlation 시 reachability가 높은 (high-confidence)인 발화 상태가 드뭄 (이와 같은 표현을 아래 수식처럼 표현할 수 있음)
이 점은 전이 행렬 Q를 굉장히 sparse하게 하고 상태들 간에 파편화된 조직을 가지게 함
이러한 점은 많은 양의 세션 데이터를 가지고 분산처리를 통해 전이 그래프를 생성할 수 있도록 함
분산 처리의 기준은 source 발화 상태에 대한 경로를 기준으로 구분하여 approximate 전이 행렬을 만듬
depth를 5로 고정한 breath-first search 탐색을 하여 그래프를 완성하고 fundamental 행렬을 만들어 냄
Spark를 통해 이러한 작업을 진행하였음
그래프에 적용한 세션 데이터는 acyclic이고 absorbed가 되지 않은 데이터임 (아닌 경우 pruned off 함)

적용 방식

약 3개월의 데이터를 가지고 전이 그래프를 생성
offline에서 그래프를 구성하고 online에서는 look-up 형태로 진행
시스템의 upstream, downstream이 있기 때문에 매일 batch 잡을 실행하여 업데이트 할 수 있도록 함
가장 최신의 rewrite을 제공할 수 있도록 함
매일 metric을 통해 online alarm을 하여 쿼리티 조절을 함
metric에 큰 변화가 발생할 시 data에서 직접 살펴보도록 함

결과 및 결론

9개월 동안 서비스를 진행
높은 precision을 보이고 30%의 유저의 에러를 줄일수 있었음 win/loss ratio는 11.8임
매주 유저의 satisfaction을 살핌