7. Classification 문제
- CS 담당자들이 20+ 개의 Class를 제공
(전체 데이터의 70% 차지)
- 목표 : 주어진 Class에 속하는 질문들을 자동으로 분류/답변하자
- 질문을 vector로 ‘잘’ 만들고
좋다는 모델에 넣은 뒤
output vector로 분류하면 되겠다! (거저먹기네 이거!)
10. Preprocessing
- 제대로 붙어있지 않은 라벨
- 엉망으로 되어있는 맞춤법, 이모티콘
- 질문 내용 외의 메타 정보
(CS 양식에 포함되어 있는 유저ID, 구글ID, 영수증 정보 등)
- … 등등 말하자면 이야기가 길어지는 엄청난 노가다전처리를 했음
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
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
다양한 기법을 통해 각 토큰과 벡터를 매핑
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를 사용해서 디버깅
뉴럴넷은 디버깅이 힘들다
19. 왜 안 될까?
- 데이터를 좀 더 자세히 분석(또 노가다)
- ‘결제했는데 크리스탈이 안 들어왔어요’
서버 문제? 결제를 안 했나?
구글/애플 문제? 크리스탈이 실제로는 잘 들어갔나?
- 질문만 보고 답변을 하나로 특정 지을 수 없음
20. 그렇다면…
- 하나의 질문에 대해 3가지 답변 후보를 예측 하는 모델을 만들자!
- 정확도 95%
- 함정 :
Top 3 class를 잘 맞춰봤자
결국 담당자의 손을 한 번 더 거쳐야하기 때문에 무의미
21. Lessons
- Baseline의 중요성
디버그 가능한 고전적인 ML 기법들을 사용
- 데이터를 항상 꼼꼼히 살펴보자
문제 정의, 데이터 가공, 모델링 등 모든 과정에서 인사이트를 준다
- 문제의 본질을 기억하자
Top 3을 맞추는 모델로는 봇을 만들 수 없다
- 영향도 : 하이퍼파라미터 < 모델 < 데이터 가공 < 문제 정의
하이퍼파라미터나 세세한 모델 튜닝은 보통 퍼포먼스를 크게 향상시키지 않음
33. Autoencoder
우리의 데이터에 맞는 여러가지 variation
1. 과거의 데이터와 최근 데이터는 분포가 다르다
: 전체 데이터로 pre-train한 뒤 최근 n개/n주 데이터로 다시 학습
2. 여러 문장으로 된 긴 CS가 들어온다
: 각 문장별로 loss를 구해서 mean(또는 max)
3. 키워드들의 순서가 크게 중요할까?
: max-pooling, conv 등이 들어간 다양한 모델 시도
35. Autoencoder
인코더만 사용하기
- loss와는 다르게 스칼라가 아닌 벡터값이므로 훨씬 풍부한 데이터를 가지고 있을 것이다
- clustering을 시도
: 역시 잘 워킹하지 않음
- 일반 CS와 장애 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
68. 한계점
단어 단위 embedding 의 한계
새로운 단어에 대처하지 못함
버려지는 키워드들..
떼탈출 보상이 안들어와요 ㅠㅠ 보상, 안, 들어오다
기억의 섬 보상이 안들어와요 ㅠㅠ 기억, 섬, 보상, 안, 들어오다
69. 한계점
실제 데이터 사용의 한계
1. 오타를 완벽하게 고치기 힘들다
2. 클래스 분류가 어렵고 버려지는 샘플이 많다
3. 비슷한 내용인데 다른 클래스인 질문들이 존재
애가 저 몰래 결제
했는데 환불 좀 해주
세요.
아 그리고 기억의 섬
보상 안들어오던데
언제 고쳐주시나
요???
환불 문의
기억의 섬
장애 문의