배경
•
스케일이 커지는 대화 시스템을 개선하기 위해서 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을 살핌