티스토리 뷰

라사 논문 저장용

Abstract

대화형 소프트웨어를 구축하기 위한 오픈 소스 Python 라이브러리인 Rasa NLU와 Rasa Core라는 툴 한 쌍을 소개한다. 그들의 목적은 비전문 소프트웨어 개발자들이 머신러닝 기반의 대화 관리와 언어 이해에 접근할 수 있도록 하는 것이다. 설계 철학의 관점에서, 우리는 사용 편의성과 최소(또는 아니오)의 초기 훈련 데이터로부터의 부트스트래핑을 목표로 한다. 두 패키지는 광범위하게 문서화되어 있으며 종합적인 테스트 제품군과 함께 배송된다. 이 코드는 https://github.com/RasaHQ/에서 이용할 수 있다.

 

1 Introduction

우리가 자동화를 일상생활에 통합할 수 있는 좀 더 자연스러운 방법을 모색함에 따라 대화 시스템은 인간의 컴퓨터 상호작용의 기초로 널리 보급되고 있다. 대화형 AI의 잘 알려진 예로는 애플의 시리, 아마존의 알렉사, 마이크로소프트의 코타나 등이 있지만, 챗봇 개발자들에게 개방되는 페이스북 메신저와 같은 플랫폼으로 대화 시스템이 널리 보급되고 있다. 대화 시스템의 일반적인 업무로는 회의 일정 수립, 항공편 예약 및 고객 지원 업무가 있다.
현대의 오픈 소스 라이브러리는 높은 수준의 전문성을 가지고 있으며, 이는 기계 학습 알고리즘의 구현에까지 확대된다. 널리 사용되는 프로젝트를 유지하는 데 많은 양의 비연구 작업이 관여하고 있으며, 연구 그룹에 의해 생산된 코드는 종종 기대에 미치지 못한다. Rasa NLU와 Core는 연구와 응용 사이의 격차를 좁히는 것을 목표로 하고 있으며, 최근의 기계 학습의 진보를 대화형 AI 시스템을 구현하고자 하는 비전문가들에게 가져왔다.
우리는 Rasa NLU와 Core를 대화 시스템 구축에 사용하기 쉬운 도구로 소개한다. 지금까지는 비전문가를 대상으로 한 널리 사용되는 통계 대화 시스템이 없었기 때문이다. 라사는 이미 전세계 수천 명의 개발자들에 의해 사용되고 있다. 다른 많은 대화 시스템과 마찬가지로 우리의 도구는 자연어 이해(Rasa NLU)와 대화 관리(Rasa Core)로 나뉜다. 섹션 3은 코드 아키텍처를 설명하고, 4에서는 개발자 경험을 개략적으로 설명하고, 5에서는 예시 애플리케이션을 시연한다.

 

2 Related Work

라사는 많은 원천으로부터 영감을 얻는다.
Rasa의 API는 Scikit-learn [8](엄격한 상속에 대한 일관된 API에 집중)과 Keras [4](다른 백엔드 구현을 가진 일관된 APIs)의 아이디어를 사용하며, 실제로 이 두 라이브러리는 모두 Rasa 애플리케이션의 (선택적) 구성요소들이다.
텍스트 분류는 fastText 접근법에 근거하여 느슨하게 분류된다[5]. 문자는 각 구성 토큰에 대해 단어 벡터를 풀링하여 나타낸다. GloVe[9]와 같은 사전 훈련된 단어 내장재를 사용하여, 훈련된 의도 분류자는 각 의도에 대한 몇 가지 예제로 훈련했을 때 표현 변동에 현저하게 강하다. Braun 등[3]은 Rasa NLU의 성능이 다양한 폐쇄 소스 솔루션과 비교되는 것을 보여준다. 사용자 정의 실체는 조건부 무작위 필드를 사용하여 인식한다[6].
라사 코어의 대화관리 접근방식은 [13]과 가장 비슷하지만, 최근의 많은 연구 시스템과는 다른 방향을 취한다. 자연어 이해, 상태 추적, 대화 관리, 대응 생성 등이 모두 대화록에서 공동으로 학습되는 [12]나 [2]와 같이 현재 엔드투엔드 학습에 대한 지원은 없다. 라사의 언어 이해와 대화 관리는 완전히 분리되어 있다. 이를 통해 라사 NLU와 코어는 서로 독립적으로 사용할 수 있으며, 훈련된 대화 모델을 여러 언어에서 재사용할 수 있다. 언어 생성을 위해, 우리는 개발자들이 각 응답에 대해 여러 개의 템플릿을 작성하여 다양한 반응을 생성하도록 권장한다. 이것은 (예를 들어) 신경 네트워크를 사용하여 [11]과 같이 문법적으로 일관되고 의미적으로 정확한 반응을 생성하는 것보다 현재 더 쉽고 신뢰할 수 있다.
또한 Rasa Core는 음성 전사와 NLU의 불확실성을 설명하지 않는데, 이는 일반적으로 부분적으로 관측 가능한 POMDP(Parkov Decision Processes)에서 달성되는 것과 같다[15]. 강화 학습(현재 알파)을 통한 교육에 대한 지원이 있지만, 신규 사용자를 위해 이를 강조하지는 않는다. 포상 기능과 모의 사용자를 구현하거나, 즉시 인간을 루프에 배치하기보다는 개발자가 대화 정책을 대화식으로 훈련하도록 권장한다(섹션 4.2 참조). Williams의 최근 연구는 유사한 기계 교수 접근법[14]을 따르고 있는데, 그 작업에서 대화 정책은 사용자 발언의 표면적 형태에 직접 노출되는 반면, Rasa Core에서는 대화 정책이 인정된 의도와 실체만 받는다는 점이 다르다.

 

2.1 관련 소프트웨어 라이브러리

도입부에서 언급했듯이, 지난 수십 년 동안의 통계 대화체계에 대한 고품질 연구의 큰 틀은 널리 사용되는 소프트웨어 라이브러리로 번역되지 않았다. 이러한 목적을 위한 주목할 만한 기여는 최근 발표된 대화 연구용 툴킷인 PyDial [10]이다. PyDial과 비교하여, Rasa Core는 그 분야의 연구원들보다 비전문 소프트웨어 개발자들의 요구를 강조한다. 오픈 툴킷으로는 OpenDial [7] 및 RavenClaw[1]가 있다.
널리 사용되고 있는 범용 자연어 처리(NLP) 도서관이 다수 있으며, 여기에 모두 언급할 필요는 없다. 또한 대화 연구 커뮤니티에서 이해되는 용어인 짧은 사용자 메시지를 의도 및 실체를 구성하는 대화 행위로 변환하는 것과 같은 자연 언어 이해(NLU)를 위한 온라인 서비스도 많이 있다. 온라인 서비스처럼, Rasa NLU는 신규 사용자로부터 구현 세부사항을 숨기지만, 약간 더 경험이 많은 사용자가 자신의 NLU 시스템을 완전히 사용자 지정할 수 있다는 이점을 가지고 있다. 언어 이해는 공통 API를 구현하는 많은 요소들에 의해 수행되며, 따라서 특정 프로젝트의 요구에 맞게 쉽게 구성할 수 있다.

 

3 코드에 대한 설명

라사의 건축은 설계에 의해 모듈화되어 있다. 이것은 다른 시스템과의 손쉬운 통합을 가능하게 한다. 예를 들어, Rasa Core는 Rasa NLU 이외의 NLU 서비스와 연계하여 대화관리자로 사용할 수 있다. 코드는 Python에서 구현되지만, 두 서비스 모두 HTTP API를 노출시켜 다른 프로그래밍 언어를 사용하는 프로젝트에서 쉽게 사용할 수 있다.

 

3.1 Structure

대화 상태는 Tracker 객체에 저장된다. 대화 세션당 추적기 개체가 하나 있으며, 이 개체가 시스템에 있는 유일한 상태 구성 요소 입니다. 추적자는 슬롯을 저장하고, 그 상태로 이어져 대화 중에 발생한 두 가지 이벤트의 로그도 저장한다. 대화의 상태는 모든 사건을 재생함으로써 재구성될 수 있다.
사용자 메시지가 수신되면 Rasa는 그림 1에 설명된 대로 일련의 단계를 수행한다. 1단계는 Rasa NLU에 의해 수행되며, 이후의 모든 단계는 Rasa Core에 의해 처리된다.
그림 1: 1. 메시지를 수신하여 인터프리터(예: Rasa NLU)에 전달하여 의도, 실체 및 기타 구조화된 정보를 추출한다. 2. 추적기는 대화 상태를 유지한다. 그것은 새로운 메시지를 받았다는 통지를 받는다. 3. 그 정책은 추적기의 현재 상태를 수신한다. 4. 그 정책은 다음에 취할 조치를 선택한다. 5. 선택한 동작은 Tracker 6에 의해 기록된다. 작업이 실행된다(사용자에게 메시지 보내기 포함). 7. 예측 동작이 '듣지' 않는 경우 3단계로 돌아가십시오.

 

3.2 조치

우리는 대화 관리의 문제를 분류 문제로 삼고 있다. 각 반복에서, Rasa Core는 사전 정의된 목록에서 취할 조치를 예측한다. 동작은 간단한 발음이 될 수 있다. 즉, 사용자에게 메시지를 보내는 것이거나, 실행하기 위한 임의의 함수가 될 수 있다. 조치가 실행되면 추적자 인스턴스를 통과하므로, 대화 내역에 걸쳐 수집된 모든 관련 정보( 슬롯, 이전 발언 및 이전 조치의 결과)를 사용할 수 있다.
조치는 Tracker를 직접 변형시킬 수 없지만, 실행될 경우 이벤트 목록을 반환할 수 있다. Tracker는 상태를 업데이트하기 위해 이러한 이벤트를 소비한다. SlotSet, AllSlotsReset, Restarted 등과 같은 다양한 이벤트 유형이 있다. 전체 목록은 https: //core.rasa.ai.의 설명서에 있다.

 

3.3 자연어 이해

Rasa NLU는 자연어 이해 모듈이다. 그것은 많은 자연 언어 처리와 일관된 API로 기계 학습 라이브러리를 결합한 느슨하게 결합된 모듈로 구성되어 있다. 우리는 사용자 정의와 사용 편의성 사이의 균형을 목표로 한다. 이를 위해 대부분의 사용 사례에서 잘 작동하는 합리적인 기본값을 가진 미리 정의된 파이프라인이 있다. 예를 들어 권장 파이프라인 spacy_sklearn은 다음과 같은 구성 요소로 텍스트를 처리한다. 첫째, 이 텍스트는 토큰화되며, spaCy NLP 라이브러리를 사용하여 음성(POS)의 일부에 주석을 달 수 있다. 그런 다음, spaCy 위업자는 각 토큰에 대한 GloVe 벡터를 찾아 전체 문장의 표현을 만들기 위해 이 벡터를 풀링한다. 그런 다음, scikit-learn 분류자는 기본적으로 5배 교차 검증으로 훈련된 돌연변이 지원 벡터 분류기를 데이터 세트에 대한 추정자를 훈련시킨다. 그런 다음 ner_crf 구성요소는 토큰과 POS 태그를 기본 특징으로 사용하여 훈련 데이터에 있는 실체를 인식하도록 조건부 무작위 필드를 훈련한다. 이러한 각 구성요소는 동일한 API를 구현하기 때문에 GloVe 벡터를 사용자 지정 도메인별 단어 내장용으로 바꾸거나 다른 기계 학습 라이브러리를 사용하여 분류자를 교육하는 것이 쉽다. 어휘가 부족한 단어를 다루기 위한 추가 요소들과 더 고급 사용자들을 위한 3가지 맞춤화 옵션이 있다. 이 모든 내용은 https://nlu.rasa.ai.의 설명서에 자세히 설명되어 있다.

 

3.4 정책

정책의 작업은 추적자 객체에 따라 실행할 다음 작업을 선택하는 것이다. 정책은 추적자가 주어진 현재 대화 상태를 벡터적으로 나타내는 묘기와 함께 인스턴스화된다.
표준 위업자는 다음을 설명하는 특징을 설명한다.
• 마지막 조치는 무엇이었는지
• 가장 최근의 사용자 메시지의 의도 및 실체
• 현재 정의된 슬롯
슬롯의 위업은 다를 수 있다. 가장 간단한 경우 슬롯은 채워졌는지 여부를 나타내는 단일 바이너리 벡터 요소로 표현된다. 범주형 변수인 슬롯은 1-of-k 바이너리 벡터로 인코딩되며, 연속 값을 취하는 슬롯은 자신의 위업화에 영향을 미치는 임계값을 지정하거나 단순히 플로트로 위저에 전달될 수 있다.
위업에 포함할 이전 주들의 수를 지정하는 하이퍼 파라미터 max_history가 있다. 기본적으로 상태들은 2차원 배열을 형성하기 위해 쌓여있으며, 이 배열을 반복적인 신경망이나 유사한 시퀀스 모델에 의해 처리할 수 있다. 실제로 우리는 대부분의 문제에서 3과 6 사이의 max_history 값이 잘 작동한다는 것을 발견한다.

 

4 사용법

4.1 교육 데이터 형식

Rasa NLU와 Core는 모두 사람이 판독할 수 있는 교육 데이터 형식으로 작업한다. Rasa NLU는 억양과 실체에 주석을 단 발언 목록을 요구한다. 이것들은 json 구조 또는 마크다운 형식으로 지정될 수 있다. 마크다운 구문은 특히 작고 읽기 쉬우며 GitHub와 같은 많은 텍스트 편집자와 웹 응용 프로그램에 의해 렌더링될 수 있다.

http://alborz-geramifard.com/workshops/nips17-Conversational-AI/Papers/17nipsw-cai-rasa.pdf

 

5 시연

Rasa Core의 사용을 입증하기 위해, 우리는 BAbl 대화 데이터 세트를 사용한다[2]. 이것은 시스템이 레스토랑을 검색하도록 요청하고 성공적인 검색을 수행하기 전에 몇 개의 슬롯을 채워야 하는 간단한 슬롯 채우기 연습이다. 시스템은 사용자에게 슬롯에 대한 선호도를 요청할 수 있다. 이용 가능한 슬롯은 위치, 인원수, 요리, 가격대가 있다.
이것은 문제의 본질적인 비선형성 때문에 흥미로운 데이터 집합이다. 동일한 정보를 얻을 수 있는 여러 가지 방법이 있기 때문에 모든 경우에 한 가지 '정확한' 조치가 없다. 그러므로 정확성과 정밀성은 대화 정책을 평가하는데 가장 적절한 척도가 아니다. 대신에 우리는 어떤 정보가 이미 이용 가능한가에 따라 시스템이 어떻게 조치를 선택하는지를 고려한다. 비어 있는 슬롯을 채우려고 시도해야 한다.
그림 3에서 우리는 Rasa Core가 이미 알고 있는 슬롯을 고려할 때 각 작용에 적용되는 확률을 볼 수 있다. 우리는 코어가 훈련 자료에서 그러하듯이, 요리에 대해 묻고, 그 다음에 위치를 묻고, 그 다음에 인원수를 묻는 대략적인 패턴을 따른다는 것을 안다. 그러나 0이 아닌 확률을 각 슬롯에 귀속시킴으로써 채워지지 않은 다른 슬롯에 대해서도 물어볼 수 있음을 인식한다. 채워진 슬롯('그리드'의 낮은 대각선')은 소멸할 정도로 작은 확률로 주어진다. 이것은 라사 코어가 비선형 대화를 배우기 위해 상황적 단서를 어떻게 사용할 수 있는지를 보여준다.

 

 

 

'beginner > TextMining' 카테고리의 다른 글

텍스트 분석의 접근 방법  (0) 2019.06.03
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함