레플리
글 수 282


K-001.png

 

 

 

Memory Networks(MemNN)는 페이스북에서 발표한 딥러닝 모델로 추론을 통해 질의응답을 할 수 있습니다. 예를 들어, 다음과 같이 문장들과 질문을 함께 입력으로 넣으면 대답을 출력합니다.

 

< Sentences >
Joe went to the kitchen. 
Joe travelled to the office. 
Fred went to the kitchen.
Joe left the milk. 
Joe went to the bathroom.

 

< Question >
Where is the milk now? A: office

 

이런 문제를 해결하기 위해서 RNN과 같은 방법으로 구현할 수도 있습니다. Sentences와 Question 전체를 임베딩하고 한번에 입력하면 정답 단어를 출력합니다. 하지만 문장이 길 경우에는 문장사이의 관계를 학습하기 어렵다는 한계가 있습니다. 그래서 MemNN에서는 별도의 외부 메모리를 사용하여 문장 정보를 저장합니다.

 

 

 

위와 같은 질문에 대해 추론을 하기 위해서 먼저 첫 번째로 연관있는 문장 'Joe left the milk'을 찾아야 합니다. 이를 위해서 스코어 함수라는 것을 사용합니다. 모든 입력 Sentences에 대해서 질문과 연관이 있는 정도를 계산하고 가장 점수가 높은 문장을 선택합니다.

 

O1(x, m) = argmax(s(x, mi))

 

s는 스코어 함수, x는 입력 Question, m은 가장 점수가 높은 문장, mi는 모든 Sentences 반복을 의미합니다. 그 다음으로 연관된 문장 'Joe travelled to the office'를 같은 방법으로 찾습니다.

 

 

 

O2(x, m) = argmax(s([x, m1], mi))

 

스코어 함수에 x와 함께 바로 전에 찾은 연관 문장인 m1도 같이 사용하여 두 번째 연관 문장 m2를 찾습니다.

 

 

 

r = argmax(s([x, m1, m2], w))

 

그리고 마지막으로 별도의 스코어 함수를 사용하여 가장 점수가 높은 정답 단어 r을 선택합니다. w는 모든 단어 집합을 의미합니다.

 

 

 

결국 메모리란 것은 스코어 함수 s의 파라미터를 학습하는 것을 말합니다. 문제는 특정 메모리 문장 m이 입력 x에 가장 높은 점수를 주도록 스코어 함수를 만드는 방법입니다. 이를 위해서 데이터셋에 supporting facts를 직접 넣어주어야 합니다.

 

< 학습 데이터 >
1 Joe went to the kitchen. 
2 Joe travelled to the office. 
3 Fred went to the kitchen.
4 Joe left the milk. 
5 Joe went to the bathroom.
6 Where is the milk now? office 4 2

 

위의 데이터에서 'office'뒤에 있는 숫자가 질문과 연관 있는 문장을 가리킵니다. 그런데 실제로 수집하는 데이터에서는 이런 supporting facts를 사람이 일일이 넣어주는게 불가능합니다. 그래서 페이스북이 End-to-End Memory Networks(MemN2N)를 새롭게 발표하였습니다.

 

 

 

첨부한 사진에서 보는 것처럼 Sentences와 Question이 들어오면 우선 Sentences에 해당하는 메모리만 뽑아 Embedding A를 생성합니다. 그리고 소프트맥스를 통해 입력과 가장 연관이 높은 메모리 문장들이 어떤 건지 확률로 나타내고 다시 이 확률값을 메모리의 Embedding C와 함께 계산합니다. 그리고 마지막으로 입력 Embedding B와 이전 출력 o를 가중치 W로 소프트맥스하여 최종 정답을 선택합니다.

 

MemN2N의 최종 목표는 학습을 통해 Embedding A, B, C와 W를 찾는 것입니다. 여기서 중간의 소프트맥스가 MemNN에서의 스코어 함수처럼 입력과 연관된 메모리 문장이 무엇인지 알려주는 역할을 합니다. 대신 supporting facts처럼 정답 단어외에 부가적인 정보가 필요없기 때문에 End-to-End라고 부릅니다.

 

 

 

< 참고자료 >
https://arxiv.org/pdf/1410.3916.pdf
https://arxiv.org/pdf/1503.08895.pdf
https://www.slideshare.net/carpedm20/ss-63116251
https://jhui.github.io/2017/03/15/Memory-network/

 

List of Articles
제목 글쓴이 날짜sort 조회 수
이성에게 말을 거는 작업멘트를 GPT-3로 생성 file 깊은바다 2021-03-24 587
GPT-3로 NPC와 대화를 할 수 있는 게임 시뮬레이터 깊은바다 2021-02-22 1462
GPT-2를 사용한 텍스트 압축 기법 file 깊은바다 2021-02-19 473
딥러닝 자연어처리 라이브러리 - Pororo file 깊은바다 2021-02-03 1529
스캐터랩의 오픈도메인 챗봇 루다 육아일기 - 모델의 구조 및 동작방식 file 깊은바다 2020-12-30 1191
일상대화 챗봇 레플리카(Replika)의 구현 방식 file 깊은바다 2020-12-22 1505
좋은 응답을 골라내는 모델 만들기 - 핑퐁의 답변매칭 알고리즘 깊은바다 2020-12-10 553
GPT-3를 헬스케어 서비스에 적용했을 때의 문제점들 깊은바다 2020-11-04 707
스캐터랩의 핑퐁팀, 새로운 생성 모델 챗봇 데모 공개 깊은바다 2020-11-02 898
카카오미니의 명령어 분류 방법 깊은바다 2020-10-23 260
딥러닝으로 동네생활 게시글 필터링하기 깊은바다 2020-10-06 398
KoNLPy를 이용하여 Huggingface Transformers 학습하기 깊은바다 2020-09-20 1571
GPT-3 패러다임을 바꿀 미친 성능의 인공지능 등장 및 활용 사례 10가지 깊은바다 2020-09-14 799
GPT3 유료화 가격 공개 file 깊은바다 2020-09-04 1747
GPT-3의 다섯 가지 한계 깊은바다 2020-08-23 1050