IBM Watson 리서치 자료 === - 작성일: 2021년 6월 22일(화) - 작성자: joonoh.oh@kt.com ## 목차 [TOC] ## Watson은 무엇인가? - Watson은 IBM의 AI 브랜드 네이밍 (KT의 Genie와 같은 것) - 보이스봇 관련해서 Watson에서 사용하는 솔루션은 다음과 같다. - Watson Text to Speech : TTS 솔류션 - Watson Assistant : 챗봇 솔루션 - Watson Discovery : FAQ 답변 검색 or 인터넷에서 답변 검색 등을 위해 사용 - Watson Speech to Text : STT 솔루션 ## Watson으로 보이스봇을 만드려면 어떻게 해야하는가? - Watson에서 보이스봇을 만들려면 Watson STT, TTS 솔루션에 챗봇 솔루션인 Watson Assistant에서 대화를 구성하여 보이스봇 만든다. ![](https://i.imgur.com/dm0XPJo.png) *<center>watson으로 보이스봇을 만들때의 구성도</center>* - Watson Assitant에는 3가지 요금 plan이 있는데, 무료버전인 "Lite" plan으로는 TTS, STT, phone 채널 자동 연동 설정 기능인 phone integration 기능을 사용할 수 없다. 그렇기 때문에 Lite plan 이용자는 Watson SST, Watson TTS, Watson Assitant를 각기 생성한 후, 자신이 만든 서버에서 각 엔진을 호출해야한다. ![](https://i.imgur.com/E7ff38G.jpg) *<center>phone integration 예시</center>* - 보통 AI담당에서 "Watson"이라고 부루는 것은 dialog를 관장하는 **Watson Assistant** ### IBM의 챗봇 솔류션 - Watson Assistant 소개 - Watson Assistant = "문장 형태의 사용자 질의를 이해하고, 사전에 준비된 대화흐름에 따라 답변을 제공하는 자연어 기반 대화 서비스" - IBM에서 2016년 출시 - 한국어를 포함해 다양한 언어 지원 ### Watson Assistant 구조 - Watson Assistant의 제일 상위 개념은 Assistant다. Assistant는 대화를 진행하는 봇이다. - 그리고 해당 봇 안에 여러가지 skill을 저작하고, assistant에 한 가지 skill을 assign 한다. - skill은 봇의 지식으로 보면 된다. - skill은 3가지 종류가 있는데, Dialog Skill, Search Skill 그리고 신규 출시된 Actions skill이다. - Dialog Skill : 시나리오를 저작하여 답변 제공 skill - Search Skill : 의도를 파악하지 못한 경우 검색을 통한 답변 제공 skill - Actions Skill : Dialog Skill 보다 쉽게 시나리오 저작하여 답변 제공 skill - Watson Assistant는 다음과 같은 구성요소를 가진다. ![](https://i.imgur.com/8FOW6Mh.png) *<center>Watson Assistant 구성요소</center>* - Intent : 사용자 발화 의도를 파악하는 기능 - 딥러닝 기반 classificaton 사용 - 사용자는 의도 명과 예시 문장을 작성해야한다. - Intent 명은 영어로 작성하는 것이 좋다. (context에 Intent 명이 그대로 세팅되는데, 한글이면 에러 발생하기 때문에 일일이 수작업으로 수정해줘야함) - Intent 학습 문장 권장 개수: 한 의도 당 최소 5문장, 보통 20문장 정도 입력 권장 - SK C&C 구축 경험 상 Watson을 이용 시, 한 의도 당 30~40 문장 정도를 입력했을 때 성능이 좋았다고 한다. - CSV를 통한 Intent 업로드, 다운로드 할 수 있다. - 작성을 하면 얼마지나지 않아, 자동으로 바로 학습이 진행된다. (따로 학습, 배포 process가 없음) ![](https://i.imgur.com/aJiptXw.png) *<center>Watson Assistant 의도 학습/추론 과정</center>* - Entity : 사용자 발화에 특정한 정보를 파악하는 기능 - 고객 발화에서 파악해야할 특정 정보를 catch - synonym과 pattern 기반의 rule을 통해 Entity 추출 - 추출하고자 하는 Enity는 사용자가 등록해야한다. - 사용자는 Enitity name, Value name, Synonym/Pattern을 등록해야함. (자세한 건 아래 "실습"에서 확인) - 사전에 정의된 5개의 System Entity가 있다. - System Entity는 On, Off 설정을 통해 사용여부를 결정할 수 있다. (default는 Off로 되어 있어, System Entity를 사용하고 싶으면 On으로 변경해야한다.) - CSV를 통한 Entity 업로드, 다운로드 할 수 있다. - 작성을 하면 얼마지나지 않아, 바로 학습 진행 (따로 학습, 배포 process가 없음) ![](https://i.imgur.com/yPe2Byr.png) *<center>Watson Assistant 개체 학습/추론 과정</center>* - Context : 앞서 말했던 발화 내용을 기억하는 기능 - 만약 고객이 "오늘 서울 날씨는 어떄?" 라고 질문, 봇이 답변을 했다고 가정한다. 고객이 이어서 "그럼 온도는?"이라고 질문하면, context에 location = "서울"이라고 저장이 되어 있기 때문에, 봇은 서울 온도를 답변해준다. - Dialog : 대화흐름을 정의하는 기능 - 대화 시나리오를 기반으로 Dialog 저작 - GUI 환경에서 대화흐름 저작 가능 - Dialog는 Node로 구성되어 있다. - Watson Assistant의 Dialog 저작은 top-down 형식의 UI를 가지고 있는데, 이는 조건 매칭 우선 순위가 상위에 위치한 Node는 하위 Node 보다 높다는 것을 의미한다. - 기본적으로 Dialog를 처음 저작하면 기본적으로 "Welcome", "Anything Else" 노드가 생성된다. - Welcome : 처음 봇에 진입했을 때 인사말 제공 노드 - Anything Else : 매칭되는 의도가 없을 때 fall-back 처리 노드 - Welcome과 Anything Else 노드 이름을 변경해도 되지만, Watso에서 제공하는 통계를 사용하기 위해 가급적이면 이름을 변경하지않는 것이 좋다. - Node는 정의된 Condition(AND/OR 조건)에 따라 trigger될지를 결정한다. - Condition은 Intent, Entity, Context를 활용하여 정의한다. - 노드 trigger는 Intent를 통하는 것을 권장한다. Entity나 Context로 노드 trigger를 한다면, rule base를 이용하는 것이기 때문에 노동집약적으로 Node를 trigger 할 수 밖에 없다. - Node의 아웃풋은 Text만 가능한 것은 아니고 옵션, 이미지 등 "Enrich Interaction"으로 사용자에게 답변을 제공할 수 있다. ![](https://i.imgur.com/yU0ywOn.png =250x300) *Node 응답 유형* - 해당 노드의 답변은 사용자 정의 json으로 나가게끔 설정할 수도 있다. ![](https://i.imgur.com/JWRPwE0.png) *<center>json 응답 작성 예시</center>* - 마지막으로 Node는 사용자의 입력을 기다릴지, 사용자의 답변을 기다리지 않고 다음 노드로 진행할지, 다른 노드로 jump해서 대화를 이어나갈지 설정한다. ![](https://i.imgur.com/M9or7qu.png) *<center>Watson Assistant 대화 시나리오 흐름</center>* - Dialog 저작 중, 실시간으로 시뮬레이터를 이용하여 테스트 할 수 있다. - 봇 답변을 클릭 시 어떤 노드에서 생성한 답변인지 볼 수 있다. - 파악된 Intent, Entity, Context 정보도 같이 보여준다. ![](https://i.imgur.com/gPZL8g2.png) - Node 복사 가능 - 버전 관리 지원 (무료버전은 지원하지 않음) ![](https://i.imgur.com/Sxjs3ip.png) *<center>버전 관리 예시</center>* - Search Skill을 추가하면 Anything Else 노드에서 답변을 검색으로 제공할 수 있게 해준다. ![](https://i.imgur.com/5lNCn0L.png) *<center>search skill 답변 예시</center>* - Workspace : Intent, Entity, Context, Dialog를 묶어 대화 서비스를 구현하는 환경 - Tool : Intent, Entity 등족 및 학습, Dialog 저작 등 서비스 구현을 위한 tool - Log : 대화 이력 및 통계 기반 로그 제공 - SDK : 다양한 언어의 개발자 도구 제공 ![](https://i.imgur.com/enylwlA.png) *<center>Watson Assistant 질문 인식 및 답변 예시</center>* - Use Case - Case 1: NLU 및 답변 생성까지 Watson Assitant에서 진행 - Case 2: Watson Assistant에서 분석한 Intent, Entity, Context 정보를 가지고, 온프레미스 서버에서 답변을 생성 - MWW가 하는 방식이 case 2 방식일 거라 추측 ![](https://i.imgur.com/t64LfH0.png) ### Node 유형 - 대화 Node - 조건에따라 대화를 진행할 Node가 선택된다. - Assistant responds에 답변을 작성한다. ![](https://i.imgur.com/TiOIyWa.png) - Webhook Node - Webhook은 외부 api를 연동하여 답변을 제공하는 노드다. 하지만 api 연동에 제약사항이 많다. ![](https://i.imgur.com/Rryy6k2.png) *<center>Webhook 제약사항</center>* - Slot Node - Slot Node = "Dialog의 특정 Node에서 지정한 다수의 정보를 반복을 통해 모두 확보하는 기능" - Slot Node를 사용하려면, Node를 클릭한 후 Customize를 선택하면 Slots "On"으로 수정하면 된다. - prompt for everything : 파악해야하는 정보를 한 번에 하나만 추출할지, 여러개의 정보를 한 번에 추출할지 설정 - slot filiing 시도 횟수를 ui에서 조작할 수는 없다. context와 node trigger condition을 이용하여 직접 구현해야한다. ![](https://i.imgur.com/iXDHkwt.png) *<center>멀티 slot 추출 설정</center>* - Node의 Digression 설정 - Digression = "Multi-turn 혹은 Slot을 통해 진행중인 대화흐름 이외의 답변을 제공하는 기능" - 대화흐름에 정의하지 않은 답변을 제공하기 어려워, digression을 이용하여 자연스럽게 다른 Node를 통해 대화를 진행하고, 원래 Node로 돌아올 수 있게 했다. - 다른 노드로 이동할 수 있게 설정 or 다른 노드가 해당 노드로 접근할 수 있게 설정할 수 있다. ![](https://i.imgur.com/cbGY6C8.png) *<center>digression 설정 예시</center>* - Node에서 SpEL 표현식으로 파라미터 접근 - Watson은 노드안에서 SpEL 표현식을 제공하고, 표현식을 이용하여 user input, context 등의 value에 접근한다. - 표현식 작성에는 "<?" "?>" 태그를 이용한다. ![](https://i.imgur.com/uLQEP3i.png) *<center>SpEL 표현식 상용 예시</center>* ## SOE 관점에서 Watson Assistant - Watson Assistant는 SOE로 사용할 수 없다. Watson Assistant는 대화를 위한 엔진이고, custom API, DB연동은 사용자의 온프레미스에서 수행하게 설계된 시스템이다. ![](https://i.imgur.com/q5Jj1Fy.png) *<center>SOE 구조 및 필요한 이유</center>* - Watson Assistant의 Context Managing 및 시스템 연동 방식 - Context Managing - Watson Dialog 저작 시 Node에 조건을 달아 해당 조건을 만족하는 대화 진행 - 트리구조를 이용하여 진행할 대화를 탐색, 매칭되는 조건이 없거나 더이상 진행할 노드가 없는 경우, 루트 노드부터 조건 검색 - 노드 간 정보 교환은 context 및 글로벌 변수를 통해 파라미터 형태로 교환 ![](https://i.imgur.com/yObV0zg.png =600x400) - 시스템 연동 - Twillo, Facebook Messenger, Slack 등과 같은 채널 연동 제공 - TTS, STT는 Plus plan부터는 자동 연동 제공 - Webhook이용하여 외부 서버, API를 이용하여 답변 생성 지원 - 단점 - Watson Assistant에서 연동을 지원하지 않는 채널은 ui랄 통해 연동 설정 할 수 없다. - NLU, TTS, STT는 Watson이 제공하는 솔루션이 아니면 이용할 수 없다. - Webhook 기능에서 지원하는 url은 1개로 정해져 있어, 온프레미스 연동을 위한 orchestration engine은 Watson Assistant와 별개 외부에 존재해야할 수 있다. ## 요금 정책 - 요금 Plan은 "Lite", "Plus", "Enterprise"로 구분 - 비용 - Lite: 무료 - Plus: 한달 $140 / 30일 무료 trail 제공 - Enterprise: 비용 비공개 (영업팀 contact 필요) - 요금 Plan 별 상세 기능 비교 - Plus 부터 Search Skill, Phone 채널, 의도 추천, 의도 conflict highlight 제공 ![](https://i.imgur.com/GFweHk3.png) ![](https://i.imgur.com/NV9i85f.png) ## Watson Assistant 실습 - Watson Assistant에서 보험금 수령 계좌 변경 시나리오 제작 1. Watson Assistant 가입 - https://us-south.assistant.watson.cloud.ibm.com/ 2. 보험금 수령 계좌 변경 Intent 정의 3. 전화번호 Entity를 Pattern 형식으로 등록 - 사용할 pattern: \d{2,3}\d{2,4}\d{4} 4. 계좌번호 Enitity를 Pattern 형식으로 등록 - 사용할 pattern: [0-9]{3,6}[0-9]{2,6}[0-9] 5. 보험금 수령 계좌 변경 slot node 생성 - condition : 보험금 수령 계좌 Intent일 때 - 채워야할 slot: 전화번호, 계좌번호 6. slot이 채워졌으면, 보험금 수령 계좌 변경 완료 멘트 전달 ## What's new? - Actions Skill: 2021년 6월 17일 최종 beta에서 정식 release 됨. (아래 한글 문서는 아직 beta라 표시되어 있음) - 위에서 Dialog를 저작하는 것은 Dialog Skill이고, 기존 Dialog Skill 보다 시나리오 저작 효율성을 증대시킨 버전이 Actions Skill ![](https://i.imgur.com/a7UaFZk.png) *<center>actions skill 설명</center>* ![](https://i.imgur.com/vOacfi4.png) *<center>actions skill 화면</center>* ## 참고자료 - Watson Assistant 공식 도큐먼트 : https://cloud.ibm.com/docs/assistant - Watson Assistant와 Voice Gateway 연동 SOE : https://sugerent.tistory.com/660 - Watson Voice Gateway : https://www.ibm.com/docs/en/voice-gateway?topic=gateway-about-voice - Watson Text to Speech : https://www.ibm.com/kr-ko/cloud/watson-text-to-speech - Watson Speech to Text : https://www.ibm.com/kr-ko/cloud/watson-speech-to-text - Watson Assistant Phone Integration: https://cloud.ibm.com/docs/assistant?topic=assistant-deploy-phone - SK C&C Watson Assistant 소개자료: https://www.youtube.com/watch?v=gryeg9hf5x0 - 신한생명 상품 공시실 : http://www.shinhanlife.co.kr/bigLife.do