6. Motivation
• 뉴럴넷은 내부적으로 수많은 벡터 연산을 수행하지만,
• 벡터 값을 눈으로 봐도 아무것도 알 수 없습니다
• 이 거대한 기계의 동작을 이해하려면 어떻게 접근해야 할까요?
• 이 발표에서는 NMT 동작을 이해하기 위해 시도한 시각화 방법들을 소개합니다
어떤 원리로 번역이 이루어질까?
7. Motivation
• 뉴럴넷 동작이 워낙 복잡하기 때문에, 단순 시각화로는 한계가 있습니다
• “왜 이런 동작을 할까”를 알고 싶다면, 그 동작만 관찰하는 것보다
다른 동작을 시켰을 때 무슨 일이 일어나는지 보는 게 쉽습니다
• 이 발표에서는 뉴럴넷을 실시간으로 인터랙티브하게 조작하는 분석법을 소개합니다
• “Interactive Visualization and Manipulation of Attention-based NMT”,
NMT Workshop 2017 & EMNLP 2017 System Demo Track
Interaction 기반 분석 방법의 필요성
8. 순서
1. NMT 아키텍처 구조
• Encoder-Decoder, Attention Layer
2. NMT 이해를 위한 시각화 방법
• 뉴럴넷 중간 값들을 어떻게 이해할 수 있을까?
3. 조작을 통한 NMT 동작 이해하기
• 단순 시각화보다 강력하고 편리한 방법론 소개
10. Encoder-Decoder Architecture
• 입력 문장을 #%^deep@$!해서 출력 문장을 생성
• Encoder: 입력 문장의 각 단어들을 vector로 “encode”하는 네트워크
• Decoder: encoder 결과물을 “decode”하여 문장을 만드는 네트워크
Encoder
I don’t know .
벡터 벡터 벡터 벡터
Decoder
<GO> 겠어요 .모르
겠어요 .모르 <END>
11. Encoder
• 입력 문장을 단어 단위로 끊어서, 각 단어를 벡터에 인코딩하는 네트워크
• 일반적으로 Embedding layer + RNN을 사용
• 구체적인 구조는 다루지 않습니다
• 각 단어마다 벡터를 하나씩 만들고
그 단어에 관련된 정보를 저장합니다
Encoder
I know .
벡터 벡터 벡터 벡터
don’t
12. Decoder
• Encoder 결과물을 디코딩하여, 문장을 생성하는 네트워크
• 단어를 하나씩 생성하고, <END>가 나오면 생성 종료
• 보통 이렇게 설명하지만, 실제로는 더 복잡합니다
Decoder
<GO> 겠어요 .모르
겠어요 .모르 <END>
Encoder
벡터 벡터 벡터 벡터
I know .don’t
13. Decoder: 문장 생성
• NMT는 문장을 한 개 만들지 않고, 수많은 문장을 동시에 만듭니다
• 문장의 각 단어에 확률이 부여되고, 문장 전체 확률이 높을수록
좋은 번역문이 됩니다
P(몰라)=0.5 P(모르)=0.4
Decoder
<GO>
…
P(요)=0.3 P(.)=0.4
Decoder
… P(겠네요)=0.2 P(겠어요)=0.7
Decoder
…
P(.)=0.9
Decoder
…
…
… …
14. Decoder: 문장 생성
• 문장이 굉장히 많기 때문에, 실제로는 휴리스틱 트리 서치(beam search)를 사용하여
생성 후보를 제한합니다
15. Decoder
Decoder: Attention
• Decoder가 단어를 만들 때, 우선
원문의 단어와 생성할 단어 간의 연관성을 계산합니다
• 가령 “몰라”라는 단어를 만들 때에는
“I”보다는 “don’t”와 “know”가 중요
• 연관성 값을 attention weight이라고 부릅니다
• 계산된 값을 참조하여 다음 단어를 생성합니다
요약 벡터
P(몰라)=0.5
Encoder
I don’t know .
0.05 0.30 0.55 0.10
18. Decoder: Attention
• Attention weight를 시각화해보면
• 영어-프랑스어 번역 예시
• 가로축: 입력 문장, 세로축: 출력 문장
• “économique”를 생성해야 할 때
원문 영어의 “Economic”을 참조
• 생성하려는 단어에 대응하는 부분에
높은 weight를 주는 패턴이 관측
Image source: https://arxiv.org/pdf/1409.0473.pdf
20. Questions
• Encoder는 어떤 벡터들을 만들까? 해석할 방법이 있을까?
• Decoder는 어떤 문장들을 만들까? 문장들은 얼마나 다양할까?
• 영어-한국어 attention은 어째서 영어-프랑스어보다 복잡할까?
• 이러한 질문들에 답하기 위해서는, NMT 동작을 분석할 방법이 필요합니다
• 특히, 눈으로 이해할 수 있는 시각화 기반 분석이 유용합니다
22. t-SNE로 벡터 시각화하기
• Encoder가 생성한 벡터들을 이해할 방법은?
• 어떤 벡터들이 비슷한 의미를 가지는지 볼 수 있을까?
• 벡터가 비슷한 의미를 담는다 ≈ 벡터 값이 비슷하다 ≈ 벡터 간 거리가 가깝다
• t-SNE: 고차원 공간의 거리 정보를 저차원 공간에 복원하는 알고리즘
• 고차원에서 가까운 점들을 2차원에서도 가깝게 보여줍니다
• NMT가 생성한 벡터들을 t-SNE로 계산해보자!
25. t-SNE로 벡터 시각화하기
• 곳곳에 해석 가능한 클러스터 발견
• 같은 단어들이 묶이거나, 조동사들이 묶이거나
• 하지만 이게 클러스터인지 아닌지 이해할 수 없는 것도 잔뜩
• t-SNE에서 클러스터를 관찰하려면 많은 문장이 필요합니다
• 하지만, 문장이 많으면 클러스터도 많아 해석이 힘들어집니다
• 문장 하나에만 집중해서 분석할 방법이 있을까?
26. 단어 확률 시각화하기
• 이번엔 문장 하나에만 집중하고,
• Decoder가 단어 생성 시 어떤 확률 분포를 만드는지 관찰합니다
• LSTMVis (Strobelt et al. 2016) 시각화 기법을 일부 차용
• 벡터의 각 요소가 시간이 지날수록
어떻게 변하는지 시각화하는 기법
27. 입력: “As a bass player, he is known for
his highly distinctive tone and phrasing.”
timestep
생성확률
각 단어마다 확률의 변화를 그래프로 그리고,
특정 단어 그래프에 마우스를 대면 굵게 강조
28. 단어 확률 시각화하기
• 비슷한 단어들이 비슷한 확률을 받는 현상이 보입니다
• “독특한”과 “뛰어난”, “~로서”와 “~로”
• 하지만 종종 해석하기 어려운 행동도 관찰
• “베이스”(bass)와 “그”(he)는 전혀 다른 단어인데
동시에 높은 확률을 받은 이유는?
• Attention 및 다른 문장 분석을 함께 수행해야 해석 가능
• 앞서와 반대로, 문장 하나로는 분석이 제한적이고
다른 문장을 함께 봐야 할 필요가 생깁니다
29. Interaction 기반 분석의 필요성
• 너무 많은 정보를 한번에 펼쳐 놓으면 아무것도 이해할 수 없습니다
• 눈으로 이해할 수 있을 만큼의 정보에만 집중할 필요성
• 한편 한 눈에 이해할 수 있는 정보는 굉장히 작은 정보입니다
• 여러 시각에서의 정보들을 조합할 필요성
• 따라서, 다양한 시각화 방법을 인터랙티브하게 조합하는 도구가 필요합니다
31. Interactive Beam Search
입력: “As a bass player, he is known for his highly distinctive tone and phrasing.”
• 문장 후보들을 tree로 표시
• 문장 생성 확률을 edge 두께로 표시
• 직접 문장 후보 생성 가능
32. Interactive Beam Search
입력: “As a bass player, he is known for his highly distinctive tone and phrasing.”
• 문장 후보들을 tree로 표시
• 문장 생성 확률을 edge 두께로 표시
• 직접 문장 후보 생성 가능
33. Interactive Beam Search
입력: “As a bass player, he is known for his highly distinctive tone and phrasing.”
• 문장 후보들을 tree로 표시
• 문장 생성 확률을 edge 두께로 표시
• 직접 문장 후보 생성 가능
34. Interactive Beam Search
입력: “As a bass player, he is known for his highly distinctive tone and phrasing.”
• 문장 후보들을 tree로 표시
• 문장 생성 확률을 edge 두께로 표시
• 직접 문장 후보 생성 가능
35. Interactive Beam Search
입력: “As a bass player, he is known for his highly distinctive tone and phrasing.”
• 문장 후보들을 tree로 표시
• 문장 생성 확률을 edge 두께로 표시
• 직접 문장 후보 생성 가능
36. • Attention 시각화는 평소에는 숨기고,
• Node를 클릭하면 그 node의 attention을 시각화
• Attention과 단어 생성을 연계하여 분석 가능
• “bass”와 “he”에 높은 attention이 주어졌으므로
“베이스”와 “그”가 생성
Beam Search + Attention 관찰
37. • 그렇다면 attention weight를 수정하면
어떤 결과가 발생할까?
• 가령 “he”의 attention을 0.073에서 0으로 바꾸면
생성 후보에서 “그”가 어떤 영향을 받을까?
Beam Search + Attention 관찰
44. ”distinctive” 정보를 삭제하면 “음색”보다 “어조”를 선호합니다
NMT가 “distinctive”에 attention을 둔 이유는
거기에 음악 맥락이 들어있어 “음색”이라고 정확히 번역할 수 있기 때문
“distinctive tone” -> “독특한 음색”의 “음색” 부분을 생성하는 단계
45. Interactive Attention Manipulation
• 처음 시도했던 시각화 방법들은 수동적이었습니다
• Attention weight를 관찰하거나, t-SNE 결과를 관찰하거나
• 쉬운 패턴들만 이해할 수 있었고 세부적인 동작을 이해하는 건 무리
• 뉴럴넷 중간 값을 능동적으로 조작하면 빠른 이해가 가능합니다
• ”왜 이런 동작을 할까?”가 궁금하면 다른 동작을 시켜보면 됩니다
46. Automatic Attention Manipulation
• Attention weight를 조작하면 단어 생성 확률을
마음대로 조정할 수 있는데,
• 그렇다면 반대로 “베이스”의 확률을 높이도록
weight를 자동조작해보면 어떨까?
• Gradient ascent로 weight를 최적화하도록 구현
?
47. 입력: ”As a bass player, he is known for …”
출력: ”베이스 연주자로서 그는 …” 혹은
“그는 베이스 연주자로서 …”
48. 입력: ”As a bass player, he is known for …”
출력: ”베이스 연주자로서 그는 …” 혹은
“그는 베이스 연주자로서 …”
“베이스” 확률을 높이도록 attention 최적화
“bass” weight가 높아지고,
“he” weight가 낮아지면서
후보에서 “그”가 사라지는 효과
49. 입력: ”As a bass player, he is known for …”
출력: ”베이스 연주자로서 그는 …” 혹은
“그는 베이스 연주자로서 …”
이번엔 “그” 확률을 높이도록 attention 최적화
아까와 반대로 “he” weight가 높아지고
“bass” weight가 낮아지는 결과
50. 입력: ”As a bass player, he is known for …”
출력: ”베이스 연주자로서 그는 …” 혹은
“그는 베이스 연주자로서 …”
“저음” 확률을 높이도록 attention을 최적화하면
“bass”와 함께 “tone”의 weight가 증가
“저음”이라는 단어를 만들려면
“bass tone”이라는 두 정보를 조합해야 하기 때문
52. Automatic Attention Manipulation
• NMT는 여러 문장을 동시에 생성하기 때문에,
영어-한국어처럼 번역 후보가 다양한 경우
attention을 해석하기 어렵습니다
• 번역 문장을 하나 고른 다음,
그 문장을 위한 새로운 attention을 만들면
더 나은 해석이 가능해집니다
53. 구현 사항
• NMT 서버: TensorFlow/Theano + Flask
• 수동 expand 가능한 beam search 구현
• attention weight를 사용자가 바꿀 수 있게
NMT 아키텍처 수정
• 프론트엔드: JavaScript, d3.js
• NMT 서버와 JSON 통신
55. 결론
• NMT 내부의 거대한 계산 과정을 이해하기 위해,
• 눈으로 쉽게 이해할 수 있는 시각화 방법들을
• 손으로 쉽게 조작할 수 있도록 조합하여
• 인터랙티브하게 실시간으로 조작하는 분석 기법을 소개했습니다
• 내 뉴럴넷 모델에는 어떻게 응용할 수 있을까?
• 어떤 레이어를 뜯어보면 좋을까?
• 눈으로 이해 가능하고 손으로 조작 가능한 입출력 범위를 찾는 것이 핵심
• d3.js를 이용하면 빠르게 시각화/인터랙션 툴을 만들 수 있어요
더 자세한 내용은
“Interactive Visualization and Manipulation of Attention-based NMT”,
EMNLP 2017 System Demo Track