SlideShare a Scribd company logo
1 of 71
머신러닝으로
쏟아지는 유저 CS 답변하기
김동화, 김범준
데브시스터즈 개발팀
1
김동화 (storykim)
KAIST 전산학부
쿠키런 서버 개발자
CS 자동화 프로젝트 리더
김범준 (nolsigan)
서울대 컴퓨터공학부
머신러닝 엔지니어
2
450,000
CS 질문-답변 페어
3
잘 활용할 수 없을까?
챗봇같은 느낌으로 자동 답변이 되면 좋을텐데
4
1.
Text Classification
5
대부분의 문의가
한정된 주제 안에서 이루어짐
그에 대한 답변도 비슷하다
Classification 문제로
접근해보자!
6
Classification 문제
- CS 담당자들이 20+ 개의 Class를 제공
(전체 데이터의 70% 차지)
- 목표 : 주어진 Class에 속하는 질문들을 자동으로 분류/답변
하자
- 질문을 vector로 ‘잘’ 만들고
좋다는 모델에 넣은 뒤
output vector로 분류하면 되겠다! (거저먹기네 이거!)
7
Classification 문제
보통 논문에서 하는 일
8
Classification 문제
보통 논문에서 하는 일
9
Preprocessing
- 제대로 붙어있지 않은 라벨
- 엉망으로 되어있는 맞춤법, 이모티콘
- 질문 내용 외의 메타 정보
(CS 양식에 포함되어 있는 유저ID, 구글ID, 영수증 정보 등)
- … 등등 말하자면 이야기가 길어지는 엄청난 노가다전처리
를 했음
10
Vectorize
Question text -> vector embedding
Question text 의 embedding vector 를 어떻게 계산할 것인가?
이미지는 그 자체로 embedding vector 인데.. text 는?
기억의 섬이 안들어가져요 ㅠㅠ
게임 빨리 하고 싶습니다아아아
고쳐주세요오 젭알
0.121 1.871 -0.882 -5.129 3.072 …
Natural language Vector
embedding
11
Vectorize
한 토큰의 벡터 학습
기억 0.699 -0.034 0.192 …
섬 1.002 0.433 0.202 …
들어가다 0.001 -0.090 2.192 …
CBOW
Skip-gram
GloVe
Swivel
다양한 기법을 통해 각 토큰과 벡터를 매핑
13
Vectorize
1. End-to-End word-level LSTM
단어 단위로 LSTM 에 넣어서 얻는 embedding vector
기억 섬 안
…
고쳐주다
0.121 1.871 -0.882 -5.129 3.072 …
LSTM
14
Vectorize
2. BoW (Bag of Words)
각 단어가 등장한 횟수가 question의 embedding vector
BoW
BoW
기억, 섬, 안, 들어가다, 게임, 빨리,
하다, 싶다, 빨리, 고쳐주다
Tokenized
환불 기억 빨리 게임 재미 …
0 1 2 1 0 …
15
Vectorize
3. TF-IDF
각 문장에서 단어가 갖는 중요도가 question의 embedding vector
BoW
TF-IDF
기억, 섬, 안, 들어가다, 게임, 빨리,
하다, 싶다, 빨리, 고쳐주다
Tokenized
환불 기억 빨리 게임 재미 …
0 0.83 0.01 0.18 0 …
16
모델에 넣어보자!
- Naive Bayes를 먼저 돌린 결과 : 정확도 59%
여기서 멈추고 다시 돌아봤어야 했다
- 딥러닝은 훨씬 잘해줄거야!
- 5개의 모델을 사용해봤으나 정확도 최대 65%
17
데이터를 더 깎자!
- 품사 분석을 통해 주요 품사만 남겨둠
- 전화번호, 주문번호, 숫자 등 특수 토큰으로 대체
- 너무 짧은 데이터 제거
- … 등등을 했으나 68%
18
왜 안 될까?
- 구현해둔 Naive bayes를 사용해서 디버깅
뉴럴넷은 디버깅이 힘들다
dominant words confusion matrix
19
왜 안 될까?
- 데이터를 좀 더 자세히 분석(또 노가다)
- ‘결제했는데 크리스탈이 안 들어왔어요’
서버 문제? 결제를 안 했나?
구글/애플 문제? 크리스탈이 실제로는 잘 들어
갔나?
- 질문만 보고 답변을 하나로 특정 지을 수 없음
20
그렇다면…
- 하나의 질문에 대해 3가지 답변 후보를 예측 하는 모델을 만
들자!
- 정확도 95%
- 함정 :
Top 3 class를 잘 맞춰봤자
결국 담당자의 손을 한 번 더 거쳐야하기 때문에 무의미
21
Lessons
- Baseline의 중요성
디버그 가능한 고전적인 ML 기법들을 사용
- 데이터를 항상 꼼꼼히 살펴보자
문제 정의, 데이터 가공, 모델링 등 모든 과정에서 인사이트를 준다
- 문제의 본질을 기억하자
Top 3을 맞추는 모델로는 봇을 만들 수 없다
- 영향도 : 하이퍼파라미터 < 모델 < 데이터 가공 < 문제 정의
하이퍼파라미터나 세세한 모델 튜닝은 보통 퍼포먼스를 크게 향상시키지 않음
22
2.
문제 재정의 - 장애 CS 대응
23
문제 재정의
- 해결 가능하면서 그 결과로 CS 담당자의 일을 줄여줘야함
- 특정 업데이트에 문제가 있으면,
수백~수천 건의 CS 문의가 들어온다
- CS 담당자는 그 질문들에 대해
정확히 똑같은 답변을 기계적으로 보냄
24
문제 재정의
특정 장애로 인해 쏟아지는 CS를
머신러닝으로 자동 분류하고, 답변하자!
25
문제 재정의
Q. 이것도 아까랑 똑같은
supervised classification 문제 아닌가요?
A. 데이터를 다 보고 학습을 하면 이미 쓸모가 없
적은 데이터만 가지고 장애 문의인지 판단해야
26
두 가지 접근 방법
Anomaly Detection Few-shot Learning
27
3.
Anomaly Detection
28
Anomaly Detection
수많은 데이터 속에서 비정상적인 데이터를 찾는
29
Anomaly Detection
일반적인 CS들 속에서 장애 관련 CS를 찾는 것
30
Anomaly Detection
다양한 기법들
• Support Vector Machine
• k-Nearest Neighbor
• Local outlier factor
• Autoencoder
- 라벨이 필요 없음. 구현이 간단. 실제 사용 예시 확인
31
Autoencoder
Normal Data로 AE를 학습
Abnormal Data가 들어왔을 때
높은 loss
32
Autoencoder
<GO> 크리스탈 안 들어오다
* word embedding with swivel
<GO>
+ h
크리스탈
+ h
안
+ h
들어오다
+ h
h
코인 안 되다 <END>
33
Autoencoder
우리의 데이터에 맞는 여러가지 variation
1. 과거의 데이터와 최근 데이터는 분포가 다르다
: 전체 데이터로 pre-train한 뒤 최근 n개/n주 데이터로 다시 학습
2. 여러 문장으로 된 긴 CS가 들어온다
: 각 문장별로 loss를 구해서 mean(또는 max)
3. 키워드들의 순서가 크게 중요할까?
: max-pooling, conv 등이 들어간 다양한 모델 시도
34
Autoencoder
결과
무의미하지는 않은 loss
프로덕션에 적용하기에는 불안
정
non-supervised의 한계?
다른 접근이 필요
인코드된 결과만 이용해보자
35
Autoencoder
인코더만 사용하기
- loss와는 다르게 스칼라가 아닌 벡터값이므로 훨씬 풍부한 데이터를 가지고 있을 것
이다
- clustering을 시도
: 역시 잘 워킹하지 않음
- 일반 CS와 장애 CS가 정확히 다르지 않다
: ‘패키지가 안 사져요’ 는 장애 CS일 수도 있고 아닐 수도 있다
- ‘장애 상황’을 직접 추가/제거하고,
그 상황에 해당하는 소수의 샘플을 통해 걸러낼 수 있는 모델이 필요
: 장애 발생시 CS 담당자들이 케이스를 추가하고, 모델에게 맡길 수 있도록
36
4. Few-Shot Learning
새로운 장애CS를
몇 개의 샘플 만으로
구별해보자!
37
Zero-Shot Learning
장애 CS ?
YES
NOTarget Question
기존 데이터
+ Machine Learning
Black Box
38
Few-Shot Learning
장애 CS ?
YES
NO
Target Question
기존 데이터
+
장애 CS 샘플
+
크리스탈 결제가 안돼요 ㅠㅠ
결제 페이지에서 튕기는데 고쳐주세요
결제 안돼 - -
Machine Learning
Black Box
39
유사도 계산 (Similarity Calculation)
KNN (K Nearest Neighbors)
KNN
A
B
A
A
A
A
B
B
B
K = 3
A : 1개
B : 2개
B
40
Baseline
TF-IDF + cosine similarity
기존 데이터 샘
플환불 부탁드립니다!
쿠키런 게임 너무 재밌어요!~~
장애 CS 샘플
기억의 섬 튕겨요 ㅠㅠ
빨리 기억의 섬 고쳐줘요
Target
Question기억의 섬 게임이 안되요
TF-IDF
환불 기억 빨리 게임 재미 …
0.68 0 0 0 0 …
0 0 0 0.18 0.23 …
0 0.72 0 0 0 …
0 0.67 0.13 0 0 …
0 0.81 0 0.09 0 …
cosine
similarity
0.172
0.539
<
장애 CS ?
YES
Similarity
41
Metrics
민감도 (Sensitivity) & 특이도 (Specificity)
1. 장애 CS를 잘 분류하는가?
2 .일반 CS를 잘 분류하는가?
42
Metrics
민감도 & 특이도
실제 장애
CS
분류된 장
애 CS
X %
43
Metrics
민감도 & 특이도
실제 일반
CS
분류된 일
반 CS
Y %
44
Baseline
TF-IDF + cosine similarity
정확도
82 %
민감도
91 %
특이도
72 %
전체 CS
실제 장애 CS
실제 일반 CS
45
유사도 계산 (Similarity Calculation)
1. Matching Network
미분가능 KNN
뉴럴넷을 통해 support set 과 target 의
임베딩(embedding)을 계산한 후
유사도를 계산하자!
Support Set
Target
Embeddings
46
실험.. 실험.. 실험.. 실험..
실험 환경
Question Embedding : BoW, TF-IDF, End-to-End LSTM
Word Embedding : 랜덤으로부터 학습, 랜덤 고정, Swivel, …
Normalization..
Dropout..
Total vocabulary size
Network size
47
실험.. 실험.. 실험.. 실험..
그래프.. 그래프..
48
실험.. 실험.. 실험.. 실험..
디버깅.. 디버깅..
49
Matching Network Best Result
Using Matching Network + Swivel + BoW
민감도
91% -> 93%
특이도
72% -> 89%
50
유사도 계산 (Similarity Calculation)
2. TCML (Few-Shot Learning with Temporal
Convolutions)
Matching Network
=> Embedding Learning + cosine similarity
TCML
=> Embedding Learning + comparison
Learning
51
유사도 계산 (Similarity Calculation)
2. TCML (Few-Shot Learning with Temporal
Convolutions)
TCML
68.8 %
Matching Network
60.0 %
5-way, 5-shot Mini-ImageNet
>
52
실험.. 실험.. 실험.. 실험..
그래프.. 그래프..
53
실험.. 실험.. 실험.. 실험..
디버깅.. 디버깅..
54
TCML Best Result
Also Using TCML + Swivel + BoW
민감도
93% -> 93%
특이도
89% -> 91%
55
TCML Code Open Source
https://github.com/devsisters/TCML-tensorflow
56
Ensemble Model
실험 과정에서 얻은 모델들로 Voting!
Model 1
Model 2
Model 3
…
장애 CS ?
YES
NO
YES
YES
57
Ensemble Model Result
실험 과정에서 얻은 64개의 모델
민감도
91% -> 94%
특이도
72% -> 92%
58
Ensemble Model Result
64개의 모델을 돌리려면..
모델을 GPU에 올리고..
질문을 모델에 넣어 계산하고..
모델을 GPU에서 내리고..
x 64
59
5. 실제 적용
지금까지 얻은 모델로
무엇을 할 수 있을까?
60
실제 적용
1. 장애 CS 분류
실제 장애
CS
분류된 장애 CS
일반 CS
93% 9%
실제 장애 CS 의 93%를 분류할 수 있고,
비장애 CS 의 9%가 잘못 분류된다
61
실제 적용
1. 장애 CS 분류
전체 CS 장애 CS 분류기
장애
CS
장애 CS
장애 CS
장애 CS
일반 CS
장애 CS
62
실제 적용
2. 장애 CS 자동 답변
장애 CS sample
similarity
- 일반 CS sample
similarity
장애 CS
일반 CS
63
실제 적용
2. 장애 CS 자동 답변
threshold 값에 따른 신뢰도 threshold 값에 따른 coverage
신뢰도 95% 일 때 : coverage = 68 %
64
실제 적용
3. Top-3 classifier로 예상 질문에 대한 답변 자동 제공
게임 실행하면 혼자 꺼지는데
어떻게 해야되요???
질문 예상 답변 제공
…
혹시 궁금하신 점이 이런 내용은 아닌가요?
강제 종료 문의
네트워크 끊김 문
의
결제 오류 문의
65
실제 적용
3. Top-3 classifier로 예상 질문에 대한 답변 자동 제공
Model질문 예상 답변 해결
CS팀에게 전달
66
실제 적용
CS 자동
분류
장애 CS
자동 답변
Top3
FAQ
적용 중 11월 초 적용
67
6. 한계점
모델의 한계는?
68
한계점
단어 단위 embedding 의 한계
새로운 단어에 대처하지 못함
버려지는 키워드들..
떼탈출 보상이 안들어와요 ㅠㅠ 보상, 안, 들어오다
기억의 섬 보상이 안들어와요 ㅠㅠ 기억, 섬, 보상, 안, 들어오다
69
한계점
실제 데이터 사용의 한계
1. 오타를 완벽하게 고치기 힘들다
2. 클래스 분류가 어렵고 버려지는 샘플이 많
다
3. 비슷한 내용인데 다른 클래스인 질문들이
존재
애가 저 몰래 결제
했는데 환불 좀 해
주세요.
아 그리고 기억의
섬 보상 안들어오
던데 언제 고쳐주
시나요???
환불 문
의
기억의
섬
장애 문
의
70
TODO
기능 개
선
Model User
Service
Feedback
성능 개
선
실험
Result
New Idea,
Hyper params
71
Thank you
72

More Related Content

What's hot

Machine Learning Tutorial Part - 1 | Machine Learning Tutorial For Beginners ...
Machine Learning Tutorial Part - 1 | Machine Learning Tutorial For Beginners ...Machine Learning Tutorial Part - 1 | Machine Learning Tutorial For Beginners ...
Machine Learning Tutorial Part - 1 | Machine Learning Tutorial For Beginners ...
Simplilearn
 

What's hot (20)

알아두면 쓸데있는 신비한 딥러닝 이야기
알아두면 쓸데있는 신비한 딥러닝 이야기알아두면 쓸데있는 신비한 딥러닝 이야기
알아두면 쓸데있는 신비한 딥러닝 이야기
 
Machine Learning
Machine LearningMachine Learning
Machine Learning
 
Introduction to Machine learning
Introduction to Machine learningIntroduction to Machine learning
Introduction to Machine learning
 
Ai 그까이거
Ai 그까이거Ai 그까이거
Ai 그까이거
 
Sentiment analysis
Sentiment analysisSentiment analysis
Sentiment analysis
 
Introduction to machine learning
Introduction to machine learningIntroduction to machine learning
Introduction to machine learning
 
Introduction of Deep Reinforcement Learning
Introduction of Deep Reinforcement LearningIntroduction of Deep Reinforcement Learning
Introduction of Deep Reinforcement Learning
 
Prediction of Exchange Rate Using Deep Neural Network
Prediction of Exchange Rate Using Deep Neural Network  Prediction of Exchange Rate Using Deep Neural Network
Prediction of Exchange Rate Using Deep Neural Network
 
Rethinking Attention with Performers
Rethinking Attention with PerformersRethinking Attention with Performers
Rethinking Attention with Performers
 
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
 
Machine Learning
Machine LearningMachine Learning
Machine Learning
 
Machine Learning Tutorial Part - 1 | Machine Learning Tutorial For Beginners ...
Machine Learning Tutorial Part - 1 | Machine Learning Tutorial For Beginners ...Machine Learning Tutorial Part - 1 | Machine Learning Tutorial For Beginners ...
Machine Learning Tutorial Part - 1 | Machine Learning Tutorial For Beginners ...
 
Machine learning algorithms
Machine learning algorithmsMachine learning algorithms
Machine learning algorithms
 
Introduction to AI & ML
Introduction to AI & MLIntroduction to AI & ML
Introduction to AI & ML
 
Machine Learning
Machine LearningMachine Learning
Machine Learning
 
Trending Topics in Machine Learning
Trending Topics in Machine LearningTrending Topics in Machine Learning
Trending Topics in Machine Learning
 
인공지능, 기계학습 그리고 딥러닝
인공지능, 기계학습 그리고 딥러닝인공지능, 기계학습 그리고 딥러닝
인공지능, 기계학습 그리고 딥러닝
 
Deep Learning in Computer Vision
Deep Learning in Computer VisionDeep Learning in Computer Vision
Deep Learning in Computer Vision
 
기획자의 포트폴리오는 어떻게 써야 할까
기획자의 포트폴리오는 어떻게 써야 할까기획자의 포트폴리오는 어떻게 써야 할까
기획자의 포트폴리오는 어떻게 써야 할까
 
Artificial Intelligence = ML + DL with Tensor Flow
Artificial Intelligence = ML + DL with Tensor FlowArtificial Intelligence = ML + DL with Tensor Flow
Artificial Intelligence = ML + DL with Tensor Flow
 

Viewers also liked

Viewers also liked (20)

밑바닥부터시작하는360뷰어
밑바닥부터시작하는360뷰어밑바닥부터시작하는360뷰어
밑바닥부터시작하는360뷰어
 
[141]네이버랩스의 로보틱스 연구 소개
[141]네이버랩스의 로보틱스 연구 소개[141]네이버랩스의 로보틱스 연구 소개
[141]네이버랩스의 로보틱스 연구 소개
 
[111]open, share, enjoy 네이버의 오픈소스 활동
[111]open, share, enjoy 네이버의 오픈소스 활동[111]open, share, enjoy 네이버의 오픈소스 활동
[111]open, share, enjoy 네이버의 오픈소스 활동
 
[131]chromium binging 기술을 node.js에 적용해보자
[131]chromium binging 기술을 node.js에 적용해보자[131]chromium binging 기술을 node.js에 적용해보자
[131]chromium binging 기술을 node.js에 적용해보자
 
웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화
 
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
 
[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기
[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기
[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기
 
[132]웨일 브라우저 1년 그리고 미래
[132]웨일 브라우저 1년 그리고 미래[132]웨일 브라우저 1년 그리고 미래
[132]웨일 브라우저 1년 그리고 미래
 
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
 
[143]알파글래스의 개발과정으로 알아보는 ar 스마트글래스 광학 시스템
[143]알파글래스의 개발과정으로 알아보는 ar 스마트글래스 광학 시스템 [143]알파글래스의 개발과정으로 알아보는 ar 스마트글래스 광학 시스템
[143]알파글래스의 개발과정으로 알아보는 ar 스마트글래스 광학 시스템
 
[124]자율주행과 기계학습
[124]자율주행과 기계학습[124]자율주행과 기계학습
[124]자율주행과 기계학습
 
[123]동네 커피샵도 사이렌 오더를 쓸 수 있을까
[123]동네 커피샵도 사이렌 오더를 쓸 수 있을까[123]동네 커피샵도 사이렌 오더를 쓸 수 있을까
[123]동네 커피샵도 사이렌 오더를 쓸 수 있을까
 
[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술
 
what is_tabs_share
what is_tabs_sharewhat is_tabs_share
what is_tabs_share
 
[113]how can realm_make_efficient_mobile_database
[113]how can realm_make_efficient_mobile_database[113]how can realm_make_efficient_mobile_database
[113]how can realm_make_efficient_mobile_database
 
[142] 생체 이해에 기반한 로봇 – 고성능 로봇에게 인간의 유연함과 안전성 부여하기
[142] 생체 이해에 기반한 로봇 – 고성능 로봇에게 인간의 유연함과 안전성 부여하기[142] 생체 이해에 기반한 로봇 – 고성능 로봇에게 인간의 유연함과 안전성 부여하기
[142] 생체 이해에 기반한 로봇 – 고성능 로봇에게 인간의 유연함과 안전성 부여하기
 
웨일 보안 이야기
웨일 보안 이야기웨일 보안 이야기
웨일 보안 이야기
 
유연하고 확장성 있는 빅데이터 처리
유연하고 확장성 있는 빅데이터 처리유연하고 확장성 있는 빅데이터 처리
유연하고 확장성 있는 빅데이터 처리
 
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색
 
[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술
[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술
[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술
 

Similar to [125] 머신러닝으로 쏟아지는 유저 cs 답변하기

Similar to [125] 머신러닝으로 쏟아지는 유저 cs 답변하기 (20)

머신러닝으로 쏟아지는 유저 CS 답변하기 DEVIEW 2017
머신러닝으로 쏟아지는 유저 CS 답변하기 DEVIEW 2017머신러닝으로 쏟아지는 유저 CS 답변하기 DEVIEW 2017
머신러닝으로 쏟아지는 유저 CS 답변하기 DEVIEW 2017
 
T ka kr_4th
T ka kr_4thT ka kr_4th
T ka kr_4th
 
Open domain dialogue Chatbot(잡담봇 삽질기)
Open domain dialogue Chatbot(잡담봇 삽질기)Open domain dialogue Chatbot(잡담봇 삽질기)
Open domain dialogue Chatbot(잡담봇 삽질기)
 
기계학습을 이용한 숫자인식기 제작
기계학습을 이용한 숫자인식기 제작기계학습을 이용한 숫자인식기 제작
기계학습을 이용한 숫자인식기 제작
 
Naive ML Overview
Naive ML OverviewNaive ML Overview
Naive ML Overview
 
세미나
세미나세미나
세미나
 
PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)
PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)
PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)
 
(주)위세아이텍 - 비지도 학습을 적용한 유사 금형설계도면 검색
(주)위세아이텍 - 비지도 학습을 적용한 유사 금형설계도면 검색 (주)위세아이텍 - 비지도 학습을 적용한 유사 금형설계도면 검색
(주)위세아이텍 - 비지도 학습을 적용한 유사 금형설계도면 검색
 
언플러그드 활동의 이론과 실제(Unplugged Activity / Computing)
언플러그드 활동의 이론과 실제(Unplugged Activity / Computing)언플러그드 활동의 이론과 실제(Unplugged Activity / Computing)
언플러그드 활동의 이론과 실제(Unplugged Activity / Computing)
 
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
 
악플분류 모델링 프로젝트
악플분류 모델링 프로젝트악플분류 모델링 프로젝트
악플분류 모델링 프로젝트
 
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
 
데이터는 차트가 아니라 돈이 되어야 한다.
데이터는 차트가 아니라 돈이 되어야 한다.데이터는 차트가 아니라 돈이 되어야 한다.
데이터는 차트가 아니라 돈이 되어야 한다.
 
파이썬 라이브러리로 쉽게 시작하는 데이터 분석
파이썬 라이브러리로 쉽게 시작하는 데이터 분석파이썬 라이브러리로 쉽게 시작하는 데이터 분석
파이썬 라이브러리로 쉽게 시작하는 데이터 분석
 
강화학습 살사 알고리즘
강화학습 살사 알고리즘강화학습 살사 알고리즘
강화학습 살사 알고리즘
 
[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료
 
데이터 분석가는 어떤 SKILLSET을 가져야 하는가? - 데이터 분석가 되기
데이터 분석가는 어떤 SKILLSET을 가져야 하는가?  - 데이터 분석가 되기데이터 분석가는 어떤 SKILLSET을 가져야 하는가?  - 데이터 분석가 되기
데이터 분석가는 어떤 SKILLSET을 가져야 하는가? - 데이터 분석가 되기
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
 
Escamp Seminar @KAIST
Escamp Seminar @KAISTEscamp Seminar @KAIST
Escamp Seminar @KAIST
 
밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2
 

More from NAVER D2

More from NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

Recently uploaded

Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
Wonjun Hwang
 

Recently uploaded (7)

도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 

[125] 머신러닝으로 쏟아지는 유저 cs 답변하기

  • 1. 머신러닝으로 쏟아지는 유저 CS 답변하기 김동화, 김범준 데브시스터즈 개발팀 1
  • 2. 김동화 (storykim) KAIST 전산학부 쿠키런 서버 개발자 CS 자동화 프로젝트 리더 김범준 (nolsigan) 서울대 컴퓨터공학부 머신러닝 엔지니어 2
  • 4. 잘 활용할 수 없을까? 챗봇같은 느낌으로 자동 답변이 되면 좋을텐데 4
  • 6. 대부분의 문의가 한정된 주제 안에서 이루어짐 그에 대한 답변도 비슷하다 Classification 문제로 접근해보자! 6
  • 7. Classification 문제 - CS 담당자들이 20+ 개의 Class를 제공 (전체 데이터의 70% 차지) - 목표 : 주어진 Class에 속하는 질문들을 자동으로 분류/답변 하자 - 질문을 vector로 ‘잘’ 만들고 좋다는 모델에 넣은 뒤 output vector로 분류하면 되겠다! (거저먹기네 이거!) 7
  • 10. Preprocessing - 제대로 붙어있지 않은 라벨 - 엉망으로 되어있는 맞춤법, 이모티콘 - 질문 내용 외의 메타 정보 (CS 양식에 포함되어 있는 유저ID, 구글ID, 영수증 정보 등) - … 등등 말하자면 이야기가 길어지는 엄청난 노가다전처리 를 했음 10
  • 11. Vectorize Question text -> vector embedding Question text 의 embedding vector 를 어떻게 계산할 것인가? 이미지는 그 자체로 embedding vector 인데.. text 는? 기억의 섬이 안들어가져요 ㅠㅠ 게임 빨리 하고 싶습니다아아아 고쳐주세요오 젭알 0.121 1.871 -0.882 -5.129 3.072 … Natural language Vector embedding 11
  • 12. Vectorize 한 토큰의 벡터 학습 기억 0.699 -0.034 0.192 … 섬 1.002 0.433 0.202 … 들어가다 0.001 -0.090 2.192 … CBOW Skip-gram GloVe Swivel 다양한 기법을 통해 각 토큰과 벡터를 매핑 13
  • 13. Vectorize 1. End-to-End word-level LSTM 단어 단위로 LSTM 에 넣어서 얻는 embedding vector 기억 섬 안 … 고쳐주다 0.121 1.871 -0.882 -5.129 3.072 … LSTM 14
  • 14. Vectorize 2. BoW (Bag of Words) 각 단어가 등장한 횟수가 question의 embedding vector BoW BoW 기억, 섬, 안, 들어가다, 게임, 빨리, 하다, 싶다, 빨리, 고쳐주다 Tokenized 환불 기억 빨리 게임 재미 … 0 1 2 1 0 … 15
  • 15. Vectorize 3. TF-IDF 각 문장에서 단어가 갖는 중요도가 question의 embedding vector BoW TF-IDF 기억, 섬, 안, 들어가다, 게임, 빨리, 하다, 싶다, 빨리, 고쳐주다 Tokenized 환불 기억 빨리 게임 재미 … 0 0.83 0.01 0.18 0 … 16
  • 16. 모델에 넣어보자! - Naive Bayes를 먼저 돌린 결과 : 정확도 59% 여기서 멈추고 다시 돌아봤어야 했다 - 딥러닝은 훨씬 잘해줄거야! - 5개의 모델을 사용해봤으나 정확도 최대 65% 17
  • 17. 데이터를 더 깎자! - 품사 분석을 통해 주요 품사만 남겨둠 - 전화번호, 주문번호, 숫자 등 특수 토큰으로 대체 - 너무 짧은 데이터 제거 - … 등등을 했으나 68% 18
  • 18. 왜 안 될까? - 구현해둔 Naive bayes를 사용해서 디버깅 뉴럴넷은 디버깅이 힘들다 dominant words confusion matrix 19
  • 19. 왜 안 될까? - 데이터를 좀 더 자세히 분석(또 노가다) - ‘결제했는데 크리스탈이 안 들어왔어요’ 서버 문제? 결제를 안 했나? 구글/애플 문제? 크리스탈이 실제로는 잘 들어 갔나? - 질문만 보고 답변을 하나로 특정 지을 수 없음 20
  • 20. 그렇다면… - 하나의 질문에 대해 3가지 답변 후보를 예측 하는 모델을 만 들자! - 정확도 95% - 함정 : Top 3 class를 잘 맞춰봤자 결국 담당자의 손을 한 번 더 거쳐야하기 때문에 무의미 21
  • 21. Lessons - Baseline의 중요성 디버그 가능한 고전적인 ML 기법들을 사용 - 데이터를 항상 꼼꼼히 살펴보자 문제 정의, 데이터 가공, 모델링 등 모든 과정에서 인사이트를 준다 - 문제의 본질을 기억하자 Top 3을 맞추는 모델로는 봇을 만들 수 없다 - 영향도 : 하이퍼파라미터 < 모델 < 데이터 가공 < 문제 정의 하이퍼파라미터나 세세한 모델 튜닝은 보통 퍼포먼스를 크게 향상시키지 않음 22
  • 22. 2. 문제 재정의 - 장애 CS 대응 23
  • 23. 문제 재정의 - 해결 가능하면서 그 결과로 CS 담당자의 일을 줄여줘야함 - 특정 업데이트에 문제가 있으면, 수백~수천 건의 CS 문의가 들어온다 - CS 담당자는 그 질문들에 대해 정확히 똑같은 답변을 기계적으로 보냄 24
  • 24. 문제 재정의 특정 장애로 인해 쏟아지는 CS를 머신러닝으로 자동 분류하고, 답변하자! 25
  • 25. 문제 재정의 Q. 이것도 아까랑 똑같은 supervised classification 문제 아닌가요? A. 데이터를 다 보고 학습을 하면 이미 쓸모가 없 적은 데이터만 가지고 장애 문의인지 판단해야 26
  • 26. 두 가지 접근 방법 Anomaly Detection Few-shot Learning 27
  • 28. Anomaly Detection 수많은 데이터 속에서 비정상적인 데이터를 찾는 29
  • 29. Anomaly Detection 일반적인 CS들 속에서 장애 관련 CS를 찾는 것 30
  • 30. Anomaly Detection 다양한 기법들 • Support Vector Machine • k-Nearest Neighbor • Local outlier factor • Autoencoder - 라벨이 필요 없음. 구현이 간단. 실제 사용 예시 확인 31
  • 31. Autoencoder Normal Data로 AE를 학습 Abnormal Data가 들어왔을 때 높은 loss 32
  • 32. Autoencoder <GO> 크리스탈 안 들어오다 * word embedding with swivel <GO> + h 크리스탈 + h 안 + h 들어오다 + h h 코인 안 되다 <END> 33
  • 33. Autoencoder 우리의 데이터에 맞는 여러가지 variation 1. 과거의 데이터와 최근 데이터는 분포가 다르다 : 전체 데이터로 pre-train한 뒤 최근 n개/n주 데이터로 다시 학습 2. 여러 문장으로 된 긴 CS가 들어온다 : 각 문장별로 loss를 구해서 mean(또는 max) 3. 키워드들의 순서가 크게 중요할까? : max-pooling, conv 등이 들어간 다양한 모델 시도 34
  • 34. Autoencoder 결과 무의미하지는 않은 loss 프로덕션에 적용하기에는 불안 정 non-supervised의 한계? 다른 접근이 필요 인코드된 결과만 이용해보자 35
  • 35. Autoencoder 인코더만 사용하기 - loss와는 다르게 스칼라가 아닌 벡터값이므로 훨씬 풍부한 데이터를 가지고 있을 것 이다 - clustering을 시도 : 역시 잘 워킹하지 않음 - 일반 CS와 장애 CS가 정확히 다르지 않다 : ‘패키지가 안 사져요’ 는 장애 CS일 수도 있고 아닐 수도 있다 - ‘장애 상황’을 직접 추가/제거하고, 그 상황에 해당하는 소수의 샘플을 통해 걸러낼 수 있는 모델이 필요 : 장애 발생시 CS 담당자들이 케이스를 추가하고, 모델에게 맡길 수 있도록 36
  • 36. 4. Few-Shot Learning 새로운 장애CS를 몇 개의 샘플 만으로 구별해보자! 37
  • 37. Zero-Shot Learning 장애 CS ? YES NOTarget Question 기존 데이터 + Machine Learning Black Box 38
  • 38. Few-Shot Learning 장애 CS ? YES NO Target Question 기존 데이터 + 장애 CS 샘플 + 크리스탈 결제가 안돼요 ㅠㅠ 결제 페이지에서 튕기는데 고쳐주세요 결제 안돼 - - Machine Learning Black Box 39
  • 39. 유사도 계산 (Similarity Calculation) KNN (K Nearest Neighbors) KNN A B A A A A B B B K = 3 A : 1개 B : 2개 B 40
  • 40. Baseline TF-IDF + cosine similarity 기존 데이터 샘 플환불 부탁드립니다! 쿠키런 게임 너무 재밌어요!~~ 장애 CS 샘플 기억의 섬 튕겨요 ㅠㅠ 빨리 기억의 섬 고쳐줘요 Target Question기억의 섬 게임이 안되요 TF-IDF 환불 기억 빨리 게임 재미 … 0.68 0 0 0 0 … 0 0 0 0.18 0.23 … 0 0.72 0 0 0 … 0 0.67 0.13 0 0 … 0 0.81 0 0.09 0 … cosine similarity 0.172 0.539 < 장애 CS ? YES Similarity 41
  • 41. Metrics 민감도 (Sensitivity) & 특이도 (Specificity) 1. 장애 CS를 잘 분류하는가? 2 .일반 CS를 잘 분류하는가? 42
  • 42. Metrics 민감도 & 특이도 실제 장애 CS 분류된 장 애 CS X % 43
  • 43. Metrics 민감도 & 특이도 실제 일반 CS 분류된 일 반 CS Y % 44
  • 44. Baseline TF-IDF + cosine similarity 정확도 82 % 민감도 91 % 특이도 72 % 전체 CS 실제 장애 CS 실제 일반 CS 45
  • 45. 유사도 계산 (Similarity Calculation) 1. Matching Network 미분가능 KNN 뉴럴넷을 통해 support set 과 target 의 임베딩(embedding)을 계산한 후 유사도를 계산하자! Support Set Target Embeddings 46
  • 46. 실험.. 실험.. 실험.. 실험.. 실험 환경 Question Embedding : BoW, TF-IDF, End-to-End LSTM Word Embedding : 랜덤으로부터 학습, 랜덤 고정, Swivel, … Normalization.. Dropout.. Total vocabulary size Network size 47
  • 47. 실험.. 실험.. 실험.. 실험.. 그래프.. 그래프.. 48
  • 48. 실험.. 실험.. 실험.. 실험.. 디버깅.. 디버깅.. 49
  • 49. Matching Network Best Result Using Matching Network + Swivel + BoW 민감도 91% -> 93% 특이도 72% -> 89% 50
  • 50. 유사도 계산 (Similarity Calculation) 2. TCML (Few-Shot Learning with Temporal Convolutions) Matching Network => Embedding Learning + cosine similarity TCML => Embedding Learning + comparison Learning 51
  • 51. 유사도 계산 (Similarity Calculation) 2. TCML (Few-Shot Learning with Temporal Convolutions) TCML 68.8 % Matching Network 60.0 % 5-way, 5-shot Mini-ImageNet > 52
  • 52. 실험.. 실험.. 실험.. 실험.. 그래프.. 그래프.. 53
  • 53. 실험.. 실험.. 실험.. 실험.. 디버깅.. 디버깅.. 54
  • 54. TCML Best Result Also Using TCML + Swivel + BoW 민감도 93% -> 93% 특이도 89% -> 91% 55
  • 55. TCML Code Open Source https://github.com/devsisters/TCML-tensorflow 56
  • 56. Ensemble Model 실험 과정에서 얻은 모델들로 Voting! Model 1 Model 2 Model 3 … 장애 CS ? YES NO YES YES 57
  • 57. Ensemble Model Result 실험 과정에서 얻은 64개의 모델 민감도 91% -> 94% 특이도 72% -> 92% 58
  • 58. Ensemble Model Result 64개의 모델을 돌리려면.. 모델을 GPU에 올리고.. 질문을 모델에 넣어 계산하고.. 모델을 GPU에서 내리고.. x 64 59
  • 59. 5. 실제 적용 지금까지 얻은 모델로 무엇을 할 수 있을까? 60
  • 60. 실제 적용 1. 장애 CS 분류 실제 장애 CS 분류된 장애 CS 일반 CS 93% 9% 실제 장애 CS 의 93%를 분류할 수 있고, 비장애 CS 의 9%가 잘못 분류된다 61
  • 61. 실제 적용 1. 장애 CS 분류 전체 CS 장애 CS 분류기 장애 CS 장애 CS 장애 CS 장애 CS 일반 CS 장애 CS 62
  • 62. 실제 적용 2. 장애 CS 자동 답변 장애 CS sample similarity - 일반 CS sample similarity 장애 CS 일반 CS 63
  • 63. 실제 적용 2. 장애 CS 자동 답변 threshold 값에 따른 신뢰도 threshold 값에 따른 coverage 신뢰도 95% 일 때 : coverage = 68 % 64
  • 64. 실제 적용 3. Top-3 classifier로 예상 질문에 대한 답변 자동 제공 게임 실행하면 혼자 꺼지는데 어떻게 해야되요??? 질문 예상 답변 제공 … 혹시 궁금하신 점이 이런 내용은 아닌가요? 강제 종료 문의 네트워크 끊김 문 의 결제 오류 문의 65
  • 65. 실제 적용 3. Top-3 classifier로 예상 질문에 대한 답변 자동 제공 Model질문 예상 답변 해결 CS팀에게 전달 66
  • 66. 실제 적용 CS 자동 분류 장애 CS 자동 답변 Top3 FAQ 적용 중 11월 초 적용 67
  • 68. 한계점 단어 단위 embedding 의 한계 새로운 단어에 대처하지 못함 버려지는 키워드들.. 떼탈출 보상이 안들어와요 ㅠㅠ 보상, 안, 들어오다 기억의 섬 보상이 안들어와요 ㅠㅠ 기억, 섬, 보상, 안, 들어오다 69
  • 69. 한계점 실제 데이터 사용의 한계 1. 오타를 완벽하게 고치기 힘들다 2. 클래스 분류가 어렵고 버려지는 샘플이 많 다 3. 비슷한 내용인데 다른 클래스인 질문들이 존재 애가 저 몰래 결제 했는데 환불 좀 해 주세요. 아 그리고 기억의 섬 보상 안들어오 던데 언제 고쳐주 시나요??? 환불 문 의 기억의 섬 장애 문 의 70
  • 70. TODO 기능 개 선 Model User Service Feedback 성능 개 선 실험 Result New Idea, Hyper params 71

Editor's Notes

  1. 안녕하세요, 머신러닝으로 쏟아지는 유저 CS 답변하기 라는 주제로 이번 세션을 맡게 된
  2. 데브시스터즈의 김동화입니다. 저는 데브시스터즈에서 쿠키런 서버 개발을 맡고 있고, 이번 CS 자동화 프로젝트를 리드하고 있습니다. 이 세션의 앞부분은 제가 발표를 맡고, 뒷부분은 저희의 머신러닝 엔지니어인 김범준님이 맡아주시겠습니다.
  3. 저희 데브시스터즈는 2013년부터 지금까지 약 4년 반동안 쿠키런 시리즈를 서비스해오면서 약 45만개의 고객 문의와 그에 대한 답변 데이터를 쌓아 왔습니다.
  4. 이렇게 쌓여있는 보석같은 데이터를 어떻게 잘 활용할 수 있을까 고민을 해봤는데요, 특히 프로젝트를 시작할 당시 챗봇에 관한 아티클이나 자료가 많이 올라오고 있어서 이 데이터를 학습해서 문의에 자동으로 답변을 하는 봇을 만들면 좋겠다는 생각이 들었습니다.
  5. 그런 시스템을 만들기 위해 저희가 처음으로 선택한 접근 방식은 Text classification인데요,
  6. 데이터를 좀 살펴보니, 대부분의 문의가 한정된 주제 안에서 이루어지고, 그에 대한 답변도 비슷하다는 사실을 발견했습니다. 그래서, 이 문제를 하나의 classification 문제로써 접근해보기로 결정했습니다
  7. 원활한 진행을 위해서 CS 담당자분들께 대표적인 답변 케이스를 요청드렸고, 전체 데이터의 70%를 커버하는 20개 정도의 class를 제공받았습니다. 저희는 이 20개 클래스에 속하는 질문들을 자동으로 분류하고, 답변할 수 있는 모델을 만드는 것을 목표로 삼았는데요, 당시에는 세상을 너무 쉽게보고, 그냥 질문을 잘 벡터화 해서, rnn을 비롯한 다양한 모델에 넣어보고, 그 결과로 나온 벡터에 softmax를 취하면 분류가 되겠다! 라고 생각했었습니다.
  8. 실제로 방금 제가 말씀드린 과정이 보통 논문에서 다루는 부분이고, ML공부할 때도 주로 신경쓰는 부분인데요, 실제 데이터를 가지고 ML 문제를 해결하려면 보통 하나의 고통스러운 과정이 더 필요합니다.
  9. 바로 전처리라는 건데요
  10. 저희 데이터는 특히 전처리해야할 요소들이 상당히 많이 있었습니다. 애초에 45만개의 데이터에 라벨이 제대로 붙어있는게 거의 없었고, 유저들이 모바일 환경에서 많이 보내다보니 맞춤법 오류나 이모티콘도 많이 있었으며, 유저 ID나 구글ID 등 질문 외적으로도 답변에 영향을 미치는 메타 정보들이 있었습니다. 이 외에도 엄청나게 많은 것들을 지저분한 방식으로 처리해야했고, 사실 프로젝트에서 시간상으로는 가장 많이 투자한 부분이기도 합니다.
  11. 다음 과정은 텍스트를 문장으로 만드는 작업입니다. 흔히 classification 연구에서 다루는 이미지들은 그 자체를 벡터라고 볼 수도 있지만, 텍스트는 그렇지 않기 때문에 따로 벡터화하는 과정이 필요한데요,
  12. 이런 작업을 위해서는 먼저 한 토큰, 즉 한 단어의 벡터를 학습해야합니다. 흔히 알려진 많은 기법들이 있지만, 저희는 구글에서 연구한 swivel이라는 모델을 사용했고, 굉장히 만족스러운 결과를 얻었습니다.
  13. 그 뒤 문장을 벡터화시키는 데는 LSTM이나
  14. 각 단어의 갯수를 세는 Bag of Words,
  15. 단어의 중요도를 사용하는 TF-IDF 등의 모델을 이용해서 벡터화시킬 수 있었습니다.
  16. 이렇게 데이터를 정제하고, 벡터화 시켰으니 모델에 넣고 돌리는 일만 남았습니다. 실제 딥러닝을 적용시켜보기전에 Naive Bayes 기법을 이용해봤는데요, 59%의 정확도가 나왔습니다. 사실 오래된 기법이기는 해도 Naive Bayes는 굉장히 좋은 베이스라인이기 때문에 정확도가 이정도밖에 안 나왔을 때 다시 한번 문제 정의나 자료를 돌아봤었어야 했는데요, 그 당시에는 딥러닝에 너무 취해있어서 그런 생각을 하지 못하고, 이런 저런 모델을 막 구현하고 돌려봤습니다. 하지만, 아무리 좋다는 모델을 사용하고 튜닝을 해도 정확도는 최대 65%에서 그쳤습니다.
  17. 데이터 전처리가 부족했던건 아닐까 싶어서 좀 더 처리를 해봤습니다. 한국어 분석기를 이용해서 의미없는 품사들을 걸러내기도 했고, 자주 등장하는 특수한 패턴들을 토큰으로 대체하기도 해봤으며, 너무 짧은 데이터는 제거하기도 했습니다. 그러나, 여전히 정확도는 68%정도에서 그쳤습니다.
  18. 왜 이렇게 정확도가 안 나왔을까요? 뉴럴네트워크라는게 사실 디버깅하기가 굉장히 힘들기 때문에 베이스라인으로 구현해둔 NB를 이용해서 결과를 뜯어봤습니다. 한 클래스를 결정하는 주요 단어들을 뽑아보기도 하고, confusion matrix를 살펴보기도 했는데요,
  19. 뭔가 이상한 점이 있어 데이터를 좀 더 자세히 분석해본 결과, 문제를 발견할 수 있었습니다. 결제했는데 크리스탈이 안 들어왔어요 라는 뉘앙스의 CS가 있을 때, 정말 서버에 문제가 있을 수도 있고, 구글이나 애플에 문제가 있을 수도 있고, 유저가 결제를 안 했을수도 있고, 크리스탈이 실제로 잘 들어갔을 수도 있습니다. 즉, CS 데이터만 보고는 답변을 하나로 특정지을 수 없는 질문들이 존재하는 거죠.
  20. 그렇다면, 하나의 질문에 대해 3가지 답변 후보를 예측하는 모델을 만들어보면 어떨까요? 이렇게 구현하면, 정확도는 95%가 나옵니다. 아까에 비해 훨씬 높아졌고 뭔가 성공한 것 같아 보이는데요, 사실 여기에는 함정이 있습니다. 3개의 답변을 내서 잘 맞춰봤자, 결국 담당자의 손을 한 번 더 거쳐야하기 때문에, 결국 봇이 봇이 아니게 되는거죠.
  21. 나이브하게 텍스트 classification으로 접근하려는 시도는 실패로 끝났지만, 아무것도 얻지 못한 건 아니었습니다. 베이스라인을 잘 잡아두면 프로젝트가 잘 흘러가는지 가늠할 수 있고, 디버깅이 용이하다는 레슨, 데이터를 항상 꼼꼼히 살펴봐두면 프로젝트 전반에서 많은 인사이트를 얻을 수 있다는 레슨, 항상 문제의 본질을 기억하자는 레슨, 하이퍼파라미터나 모델의 디테일은 생각보다 중요하지 않다는 레슨 등을 얻을 수 있었습니다.
  22. 이런 레슨은 레슨이고, 분명히 이 데이터들을 가지고 해볼 수 있는 일이 있다고 생각해서 문제를 다시 정의해보기로 했습니다.
  23. 먼저, 좋은 문제란 무엇인가에 대해 생각해봤습니다. 좋은 문제는, 해결 가능하면서 CS 담당자의 일을 줄여줄 수 있어야겠죠. 그런 일이 어떤게 있을까 데이터도 많이 살펴보고, 담당자들과 이야기도 나눠본 결과, 특정 업데이트에 문제가 있으면 수백건에서 수천건의 문의가 쏟아져들어온다는 것을 알게되었습니다. 그리고, CS 담당자는 그 질문에 대해 정확히 똑같은 답변을 계속 보내고 있다는 사실도요.
  24. 그래서, 특정 장애로 인해 쏟아지는 CS를 자동으로 분류하고, 답변해서 담당자들이 기계적인 일보다는 정말 사람이 해야하는 일에 집중하게 도와주자는 목표를 세우게 되었습니다.
  25. 이걸 보시면서, 아까와 똑같은 supervised classification 문제가 아닌가 싶은 분들도 계실 텐데요, 사실 이 문제는 조금 다른 문제입니다. 왜냐하면, 데이터를 다 보고 학습을 하면 의미가 없기 때문이죠. 이 문제를 해결하기 위해서는 적은 데이터만 가지고도 장애 문의인지 아닌지 판단할 수 있는 모델이 필요합니다.
  26. 저희는 이 문제에 대해 크게 두 가지방법으로 접근해봤는데요,
  27. 먼저 anomaly detection부터 살펴보겠습니다.
  28. anomaly detection은, 수많은 데이터 속에서 비정상적인 데이터를 찾는 것입니다.
  29. 이 문제에 적용시키면, 일반적인 CS들 사이에서 장애 관련 CS를 찾는 것이 되겠지요.
  30. 이런 anomaly detection 문제를 해결하기 위해 많은 기법들이 존재합니다. 그 중에 저희는 오토인코더를 이용해서 문제를 해결해볼 건데요, 오토인코더를 선택한 이유는 구현이 쉽기도 하고, 모든 데이터에 대한 라벨이 필요 없기 때문입니다.
  31. 오토인코더란 뭘까요? 이름 그대로, 어떤 인풋 벡터가 들어왔을 때, 그 벡터보다 낮은 차원으로 인코딩하는 뉴럴 네트워크를 말합니다. 그림에서 보시는 것처럼 보통 학습은 디코더까지 뒷 레이어에 둬서 output과 원본을 비교해서 로스를 계산하는 식으로 학습을 합니다. 저희의 가설은, 일반 CS데이터로 학습시킨 오토인코더에 장애 데이터가 들어오면, 평소에 보지 못한 패턴의 CS일 것이기 때문에 로스가 높을 것이라는 가설이었습니다.
  32. 다만 인풋이 평범한 벡터가 아니라 문장이었기 때문에, 이런식으로 LSTM을 이용한 인코더와 디코더를 만들고, 아웃풋과 인풋을 가지고 sequence loss를 계산하여 학습시켰습니다.
  33. 여기에 저희의 데이터에 맞게 이런저런 튜닝도 했습니다. 시간에 따라 게임이 변하기 때문에 들어오는 CS의 패턴도 변하게 되서, 전체 데이터로 먼저 학습시킨 뒤 최근 데이터로 다시 학습을 시켜보기도 했고요, 여러 문장으로 된 긴 CS가 들어오는 것도 빈번했기 때문에 각 문장별로 loss를 구해서 합치기도 했습니다 또, 키워드들의 순서가 크게 중요하지 않다고 여겨 단순한 RNN이 아니라 다양한 모델을 통해 인코딩을 시도해 봤습니다.
  34. 사진은 저희 오토 인코더의 결과인데요, 빨간 점은 정상 데이터를, 파란 점은 장애 데이터를 나타냅니다. 보시면 loss의 분포가 무의미하지는 않지만, 일부 정상 데이터도 높은 loss를 가지고 있어 프로덕션에 적용시키기에는 꽤 불안정하다고 판단했고, 다른 접근이 필요하다는 판단을 내렸습니다.
  35. 바로 인코더만 사용하는건데요, loss와는 다르게 인코딩만 하면 그 장애CS를 표현하는 벡터가 나올 것이기 때문에 훨씬 풍부한 데이터를 가지고 있을 것이라고 예상했습니다. 하지만, 이 벡터를 이용한 접근 방식도 잘 워킹하지 않았는데요, 저희는 그 이유를 일반 CS와 장애 CS가 정확히 다르지 않기 때문이라고 판단했습니다. ‘패키지가 안 사져요’라는 CS는 어떤 상황에서는 장애CS고, 어떤 상황에서는 장애CS가 아니기 때문이죠. 즉 저희는, 매 장애 상황마다 우리가 직접 클래스를 추가/제거하고, 그 상황에 해당하는 소수의 샘플만을 이용하여 문제를 해결할 수 있는 모델이 필요했습니다. 이런 모델이 있다면 CS담당자들이 장애를 인지했을 때 해당 케이스를 추가한 뒤, 우리의 자동화 모델에게 맡길 수 있기 때문이죠. 이런 일을 해주는 방법이 few-shot learning인데요, 이 이후로는 앞서 설명드린 범준님께서 발표를 이어가시겠습니다.
  36. 자기소개 오토인코더의 한계 Few-shot learning Zero, few shot 의미
  37. - zero-shot learning
  38. 몇개의 샘플만으로 (5~10) 효율적으로 이용해야한다
  39. 유사도 계산 A,B 클래스에 대한 명확한 이해 없이도 단순 비교를 통해 판별
  40. TF-IDF + cosine similarity baseline 예제 설명
  41. 우리가 만든 모델이 얼마나 잘하는지 판단하기 위해선 적절한 metric설정이 필요 우리 모델의 목표는 크게 두가지 장애CS를 잘 분류하지만 일반CS를 잘 분류하지 못한다면 불순물이 많이 섞인다 둘다 일정 수준 이상으로 잘하는 모델을 원함
  42. - 민감도 설명
  43. - 특이도 설명
  44. metric을 설정했으니 이제 baseline이 얼마나 잘하는지 알아보자 전체 CS에 대한 정확도 82% 하지만 민감도는 높고 특이도는 낮다 편향된 선택을 하는 모델 딥모델을 적용했을때 단순히 정확도 뿐만 아니라 덜 편향된 모델
  45. 첫번째로 시도한 모델은 Matching Network 개 종류 분류 문제 미분가능 KNN Pixel difference가 큰 같은 종류의 개가 비슷한 임베딩을 가져서 저희처럼 text에 적용할때에는 다른 단어들로 이루어진 비슷한 질문이 비슷한 임베딩을 가져서 Embedding만 배우면 되기 때문에 Simple Few-shot learning 모델중 거의 유일하게 text에 적용된 예시가 있었던 모델
  46. 수많은 실험을 통해 성능 확인
  47. 실험 과정에서 수많은 그래프들을 보게되고.. 그래프 지옥
  48. 모델이 제대로 동작하는지 확인하기 위해 수많은 디버깅 Tensor board text summary를 이용한 visualize
  49. 최고 결과는 Swivel과 BoW를 사용했을 때 Sensitivity 93%, Specificity 89% 전체적인 정확도도 올랐지만 특히 편향성이 많이 사라졌다 Swivel이 항상 좋은 성능을 냄 end-to-end로 word embedding이 학습되는것보다 미리 계산해놓는게 더 좋은 결과를 얻었다 Swivel의 경우 전체 데이터셋을 보고 학습하지만 end-to-end의 경우 데이터의 일부분(batch)씩 보며 업데이트되기 때문에 의미 학습이 더 어려운것 같다 실제 적용해볼만한 결과가 나왔지만 few-shot learning model이 text에도 reasonable한 결과를 얻는다는것을 알았기 때문에 SOTA급 model의 성능을 알고 싶었다
  50. 2017년 7월에 나온 논문 TCML 모델 간단 설명 Black box이기 때문에 어떤 비교연산을 배웠는지는 알기 어렵다 더 좋은 방법을 배웠다면 matching network보다 잘나올테고 아니면 반대
  51. 실제로 5-way, 5-shot Mini-ImageNet에서 테스트 시 MatchingNetwork보다 좋은 성능을 내게 된다 5-way란 5개의 클래스가 주어지고 어떤 클래스인지 맞추는 문제
  52. - TCML도 매칭 네트워크와 마찬가지로 많은 실험과..
  53. - 디버깅을 거쳐..
  54. 얻게된 가장 좋은 결과는 역시나 Swivel과 BoW를 썼을때 민감도는 비슷한 값을 가졌지만 특이도가 조금 더 올랐다
  55. - TCML 코드 오픈소스
  56. 더욱 성능을 끌어올리기 위해 ensemble model 적용 실험 과정에서 얻게 되는 수많은 모델들 투표를 통해 결정 -> 모델들이 가지고 있는 편향성을 더 줄일 수 있다
  57. 64개의 모델을 사용하여 얻게 된 결과 baseline과 비교해보자면..
  58. Ensemble model을 실제 적용은 안하고 있다 -> 무겁고 느리다
  59. 실제 적용을 하지 않는다면 모델은 무쓸모 무엇을 할 수 있을까요? 크게 3가지 아이디어
  60. 첫번째는 얻은 모델로 실제로 장애CS를 분류해주는 방법 실제 장애CS의 93%가 분류되고 비장애 CS의 9%가 불순물로 섞이게 된다
  61. 이렇게 분류기로 전체CS를 불순물이 어느정도 섞여있는 더 작은 subset으로 한번 걸러내준다 장애CS의 경우에는 유저 정보에 따른 편집이 따로 필요가 없기때문에 손쉽게 몇개의 일반CS만 체크해제하고 빠르게 처리가능 원래 전체CS에서 하나하나 클릭해서 복사붙여넣기 해야했던걸 생각하면 훨씬 빠르게 처리 CS팀의 반복적이고 소모적인 일을 덜어주고 사람만이 할 수 있는 일에 집중할 수 있도록
  62. 두번째는 장애CS에 대해 실제로 자동 답변하는 방법 신뢰도가 가장 중요하기 때문에 장애CS와 일반CS 샘플과의 유사도 차이값을 threshold를 취해 분류한다 원래대로라면 threshold = 0
  63. threshold를 높게 잡으면 신뢰도가 높아지고, 반대로 전체 장애CS의 coverage는 낮아진다 현재 신뢰도 95%일때 약 68%의 장애CS를 커버할 수 있다 적은양은 아니지만 신뢰도를 아무리 높게 잡아도 항상 잘못보내는 답변이 존재 실제 적용은 안함
  64. 마지막은 처음 만들었던 top-3 classifier를 사용 실적용이 어렵다고 생각했지만 예상답변 제공에 사용 가능 예시 설명 유저가 만족한다면 CS팀에게 전달되지 않고 자동 해결
  65. 총 프로세스를 그려보자면..
  66. 이렇게 해서 총 3개의 적용방안중 리스크를 가지고 있는 자동답변을 제외한 두가지 모델이 개발중 빠르면 11월초에 실제 적용될 것 같다 이렇게 해서 문제 정의에서 시작해서 시행착오를 겪고 모델 퍼포먼스를 높혀서 실제 적용에 이르기까지의 스토리를 공유드렸다
  67. 하지만 저희 모델이 가지고 있는 한계 또한 분명하다 간단하게 짚고 넘어가보자
  68. 첫번째는 모든 text를 단어단위 embedding으로 다뤘다는 점 가장 큰 문제는 새로운 단어에 대처하지 못한다 두개의 비슷한 질문을 구별하는건 떼탈출, 기억의 섬이라는 키워드 떼탈출이란 키워드가 vocab에 없기때문에 unknown 토큰 처리되게 된다 큰 업데이트 시 새로운 키워드가 나타나게 되면 누락되기 때문에 주기적으로 학습해야한다 어느정도 커버 가능하지만 여전히 처음 등장하게 되는 단어를 놓치게 된다는 한계
  69. 두번째는 실제 데이터를 사용하기때문에 생기는 한계 오타가 너무 많은데 토큰화, 맞춤법검사기 등을 사용해도 완벽하게 고치기 어렵다 클래스 분류가 애매해서 버려지게 되는 샘플들이 많다 비슷한 내용의 질문인데 서로 다른 클래스인 질문들이 존재한다 클래스 분류가 어려워 버려지는 샘플의 예 설명
  70. 이러한 한계점을 가진채로 실적용한 후에 계속해서 두가지 방향으로 개선해나갈 예정 새로운 아이디어나 파라미터를 실험하여 앞서 언급한 한계점을 극복하거나 metric 값을 향상시키는 성능 개선 유저, 즉 CS팀분들과 문의를 넣은 고객들과 인터랙션 해가며 받은 피드백을 통한 기능개선
  71. 네 저희 발표는 여기까지이구요, 이상으로 데브시스터즈팀의 CS자동화 발표를 마치겠습니다. 감사합니다.