구글의 텍스트 의미분석 오픈소스 - SLING
구글 블로그로부터 구글의 SLING 출시소식을 번역합니다. (아직 공식 번역문서는 없는듯 하여 스터디겸 진행하였고, 일부 의역과 내용생략이 있습니다.)
이전 자연어처리는 PoS Tagging, Dependency Parsing, Semantic representation 등을 파이프라인으로 구성해서 진행했으나
이 경우 분석을 모듈화할 수 있는 장점은 있는 반면, 선행 단계에서 오류 발생시 이후 단계로 이 오류가 전파되어 영향을 받는 문제가 있었다.
SLING에서 실험하고 있는 자연어 파싱은 입력 텍스트로부터 의미를 바로 추출하여 Semantic Frame Graph로 나타낸다. 출력된 프레임 그래프는 중간단계없이 사용자의 관심을 바로 어노테이션하여 연산량을 줄인다. SLING은 이를 위해 프레임 그래프의 연산을 증분으로 수정하는 특별한 RNN 모델을 사용한다. 프레임그래프는 여러 의미를 추출하도록 유연하게 되어있다. SLING의 파서는 Dependency Parsing과 같은 중간단계 어노테이션 없이 입력단어를 직접 이용하여 학습되었다.
SLING은 다음을 통해 추론시간을 줄였다.
- 확장성있는 프레임스토어를 만들었음
- RNN을 실행용으로 효율화된 코드를 만들 수 있는 JIT 신경망 컴파일러
데스크탑 CPU환경에서 초당 2500개 이상의 토큰을 파싱할 수 있다.
기술리포트 링크 : https://arxiv.org/pdf/1710.07032.pdf
Frame Semantic Parsing
Frame Semantic은 문장 등 텍스트의 의미를 표현한다. 하나의 공식적인 진술은 Frame이라고 불리며 지식 또는 의미의 단위가 되고 다른 프레임 또는 개념과 상호작용하게 된다.
SLING은 이런 프레임을 슬롯의 리스트로 구성한다. 각 슬롯은 이름(역할)과 값을 가진다. 값은 명시적 기록값(literal)일 수도 있고 다른 프레임에 대한 링크일 수도 있다. 다음 사례를 통해 살펴보자.
“Many people now claim to have predicted Black Monday.”
아래 그림은 SLING이 엔티티(entities - 사람, 장소, 이벤트 등)와 측정(measurements - 날짜, 거리 등)과 다른 의미(concept - 동사)를 인식하는 방법과 그들을 적절한 의미적 역할로 위치시키는 작업을 보여준다. 가장 큰 주도권을 가지는 술어단어로써 predict는 PREDICT-01이라는 프레임으로 기술된다. 또한 이 프레임은 누가 predict 했는지(ARG0 slot - people을 위한 PEOPLE 프레임)와 무엇이 predict 되었는지(ARG1 solog - Back Monday를 지시하는 Event 프레임)에 대한 슬롯을 가진다. 프레임 의미파싱(Frame semantic parsing)이란 이런 슬롯들로 프레임들을 연결한 방향성을 가지는 그래프를 만드는 작업을 말한다.
위는 매우 간단한 사례이지만, 프레임 그래프는 다양한 복잡한 의미 어노테이션 작업도 모델링할 수 있다. 초보자에게 프레임, 예를 들어 지식DB처럼, 언어 의미의 내적/외적 정보를 통합하는 편리한 방법을 제공한다. 그리고 이것은 참조(reference), 은유(metaphor), 환유(metonymy), 관점(perspective) 등 복잡한 언어이해 문제를 기술하기 위해 사용될 수 있다. 이런 작업을 위한 프레임 그래프는 프레임타입의 인벤토리, 역할, 연결된 제약사항들만 조금씩 상이할 것이다.
SLING
SLING은 관심대상이 되는 시맨틱 프레임을 최적화하도록 RNN(Recurrent Neural Network)을 트레이닝시킨다. 학습된 은닉층의 내부 네트워크는 파이프라인 시스템 방식에서의 수작업의 조합과 중간결과물을 대체한다. 내부적으로 SLING은 encoder-decoder architecture를 사용한다. 개별 입력단어는 인코드를 통해 단어자체, 접두어, 구두점 등 단순한 어휘적 자질(lexical features)를 이용하여 벡터로 변환되고, decoder는 이전 실행된 recurrent 자질의 히스토리와 함께 이 값을 활용하여 변환연산을 실행하고 프레임그래프를 업데이트하여 최종적으로 입력 문장에 대한 프레임 시맨틱을 얻게 된다. SLING은 모델 트레이닝을 위해 TensorFlow와 DRAGNN을 사용한다.
아래의 애니메이션은 어떻게 프레임과 역할이 점진적으로 프레임그래프를 구성하는지 보여준다. 앞선 예제에서와 같이 SLING은 동사(VERB)와 ARG1을 이용하는 이벤트프레임을 연결한다. EVOKE 변이는 텍스트내의 토큰들을 이용하여 프레임을 생성(evoke)한다. 유사하게 CONNECT 변이는 특정 역할을 수행하는 두 개의 프레임을 연결(link)한다. 입력이 모두 처리되고 마지막 변이가 실해되면 프레임그래프는 완료되어 사용자에게 의미해석을 할 수 있도록 제공된다.
이 변이 시스템의 중요 특징중 하나는 가장 최근에 생성(evoke)되거나 수정된 프레임을 나타내는 고정크기의 버퍼(fixed-size attention buffer)의 존재이다. 이 버퍼는 위 그림에서는 오렌지색 박스로 표현되었다. 새로운 프레임이 입력될 때 더이상 사용되지 않는 버퍼는 비워진다. 이 방식은 놀랍게도 프레임을 연결할 때 매우 효율적이다.
Next Steps
이 실험은 지식 추출, 복합 참조 해석, 대화이해 등 시맨틱 파싱의 시작점이다. Github에 릴리즈된 SLING은 이미 학습된 pre-trained 모델과 함께 예제, 제공되는 데이터 또는 사용자의 데이터를 이용하여 트레이닝을 시킬수 있는 레시피 등이 포함되어 있다.
Acknowledgements
연구는 Michael, Ringgard, Rahul Gupta, and Fernando Pereira 에 의해 수행되었다. 텐서플로우와 DRAGNN 팀에게 감사한다.