-인텐트와 엔티티는 연관성이 없는 서로 다른 개념
:인텐트는 사용자의 "의도"를 파악하는 지표료, 같은 의도를 나타내는 여러개의 문장을 하나의 인텐트에 저장함으로써 어떤 유저로부터 어떤 반응이 나오면 인텐트에 저장된 문장들과 일치하는지를 파악하여 인식한다.
:엔티티는 비슷한 단어들의 집합
:사용자가 어떤 인풋을 나타낼시 왓슨은 인텐트를 통해 인식하거나, 엔티티를 통해 인식하거나, 둘 다를 통해 인식한다.
-dialog의 기능
1.If bot Recogizes : 가장 기본적인 기능으로, #인텐트, @엔티티, $변수 의 값이 들어갈 수 있고, 이에 간단에 함수들이 합쳐진 논리도 들어올 수 있다.
2.slot : 내부에 found, unfound의 기능이 있다.
3.multi response : 조건에 따라 다른 response를 주고 싶을때 사용한다.
4.setup context : $변수에 값을 줄 수 있다.
5.and finally : dialog이후에 어떤 행동을 할지 정해주는 기능으로, wait for user input/ skip user input / jump to other dialog 의 기능이 있다.
-dialog에서 response는 하지 않고 변수 설정만 하고 싶을 시에는 if bot Recognizes 를 true로 설정 후 .and finally를 jump to other dialog 하면 된다.
-dialog내에 들어가는 각 #인텐트, @엔티티 는 내가 지정해 놓은 인텐트와 엔티티가 저장되는 것이 아니고, 유저로부터 받은 일회적인 input 만들어온다.
-dialog내에서 사용할 수 있는 함수들을 다음 사이트에서 참고하라.
-try it을 시행하면 우상단에 manage context가 있는데 각페이즈별로 내가 설정한 $변수 들에 어떤 값들이 들어오는지 볼 수 있다.
-【기본이해】
왓슨은 유저인풋에 대응하여 엔티티와 인텐트를 매칭하는 작업을 함. 스스로 스마트하게 매칭하는 작업이 AI의 내부 논리가 하는 일이며, 서비스에 대해 비싼 가격을 요구하는 이유이기도 함
예를 들어
@food:ham,hamburger,cheese,sushi,bulgogi,coffee
@drink:coffee,coke,sprite,wine
#hungry:I want to eat hamburger
의 인덴트와 엔티티가 존재할 때
유저 인풋이 【cheese】이면, @food가 매칭되므로
・ @food에 cheese라는 값을 담고
・ entities객체에 매칭된 @food:cheese의 정보를 담음
[{"entity":"food","location":[x,x],"value":"cheese","confidence":1,"expected":true}]
유저 인풋이 【hamburger】이면, @food와 #hungry가 매칭되므로
・ @food에 cheese라는 값을 담고
・ entities객체에 매칭된 @food:cheese의 정보를 담음
[{"entity":"food","location":[x,x],"value":"cheese","confidence":1,"expected":true}]
・ #hungry:I want to eat hamburger라는 값을 담고
・ intent객체에 매칭된 #hungry:I want to eat hamburger의 정보를 담음
[{"intent":"hungry","confidence":0.8247748613357544}]
유저 인풋이 【coffee】이면, @food,@drink가 매칭되므로
・ @food에 coffee라는 값을 담고, @drink에 coffee라는 값을 담음
・ entities객체에 매칭된 @food:coffee, @drink:coffee의 정보를 담음
[{"entity":"food","location":[x,x],"value":"coffee","confidence":1,"expected":true},{"entity":"drink","location":[x,x],"value":"coffee","confidence":1,"expected":true}]
유저 인풋이 【sushi,bulgogi】이면, @food,@food(@food가 두번 매칭됨)가 매칭되므로
・ @food에 sushi라는 값을 담고, @food에 bulgogi라는 값을 담음
・ entities객체에 매칭된 @food:sushi, @food:bulgogi의 정보를 담음
[{"entity":"food","location":[x,x],"value":"sushi","confidence":1,"expected":true},{"entity":"food","location":[x,x],"value":"bulgogi","confidence":1,"expected":true}]
【entities에 접근하는 방법】
・<? entities ?> <- 왓슨이 유저인풋에 대응하여 매칭시킨 엔티티들을 배열로 담음
[{"entity":"シネマズギフトカード関連","location":[0,6],"value":"ギフトカード","confidence":1,"expected":true},{"entity":"テスト","location":[0,6],"value":"ギフトカード","confidence":1,"expected":true}]
・<? entities['テスト'] ?>하면, 일치된 entities중에서 엔티티명이 テスト인 것만 필터링됨(intent는 이런식의 문법 사용 안됨.)
예를 들어 <? entities ?> 인식된 모든 엔티티의 결과가
[{"entity":"シネマズギフトカード関連","location":[0,6],"value":"ギフトカード","confidence":1,"expected":true},{"entity":"テスト","location":[0,6],"value":"ギフトカード","confidence":1,"expected":true}]
일때,
<? entities['テスト'] ?> 하면,
[{"entity":"テスト","location":[0,6],"value":"ギフトカード","confidence":1,"expected":true}]이 검색돼
하나만 일치시에 객체인것처럼 보이지만 배열로 리턴됨에 주의
【intent에 접근하는 방법】
・<? intent ?> <- 왓슨이 유저인풋에 대응하여 매칭시킨 인텐츠들중 confidence(일치도)가 높은 상위 10개를 내림차순 배열로 리턴됨
[{"intent":"シネマズギフトカード販売","confidence":0.5247748613357544},{"intent":"シネマズギフトカード残高確認","confidence":0.35115565061569215},{"intent":"シネマズギフトカード利用方","confidence":0.32244925498962407},{"intent":"シネマズギフトカード有効期限","confidence":0.3199282050132752},{"intent":"挨拶","confidence":0.2722834348678589},{"intent":"TCXとは","confidence":0.2501681208610535},{"intent":"IMAXとは","confidence":0.24999908208847046},{"intent":"劇場オープン時間","confidence":0.2475628912448883},{"intent":"プレミアボックスとは","confidence":0.24686517417430878},{"intent":"スクリーン12と13の場所","confidence":0.2400550663471222}]
・객체내부값에는 json에 접근하는 방법과 동일하게 접근하면됨.
<? intent[0]['intent'] ?> => "シネマズギフトカード販売"
<? intent[1]['confidence'] ?> => 0.35115565061569215
【@entities와 #intent에 관해】
*watson doc에 의하면 intent의 생략표시구문은 존재하지 않는다.
@entities는 순수하게 값만 들어가는 배열이므로, @entities.confidence라던지, @entities.location같은 문법을 사용할 수없다.
사용할 수 있는 것은 배열에 관한 함수들 뿐 @entities.size() @entities[0] 등
#intent는 boolean이다.
-개행은 \n로 하고, 프론트에 따라 다른데 프론트가 웹이면 </br>로 줘야함
-digression:여러 조건트리에서 일치하는게 없으면 루트로 보냄(지금까진 true로 처리했던것)
go away
come into
return
제약: 루트 노드로밖에 이동읆 못함
차일드 노드로 true를 설정하면 digression 사용 불가
-폴더 나누기 기능
노드와 다른점은 폴더의 경우 레스폰스가 없음
폴더의 if bot recongnize기능 0
레스폰스 x
디그리션을 다이알로그 하나하나 설정하지 않고
폴더 에서 디그리션 설정하면 그 아래 것들도 외괄 설정이 가능
ui로써 보기가 좀 좋아지고, digression 관리가 쉬우저ㅣ는 정도일가
-도중에 그만두는 기능
일단 return을 오프로(그만뒀는데 다시 돌아오면 안되니까)
-루트 마지막에 공통 노드를
리셋토, 안내종료 같은 최후의 노드를 넣어두고 return은 off 로함
'C Lang > New IT Program Diary' 카테고리의 다른 글
Watson Knowledge StudioのTutorialをやってみた(딕셔너리베이스 pre-annotation, human annotator를 위한 annotation task작성, annotator간 합의도출, 기계학습annotator작성) (0) | 2018.07.31 |
---|---|
Watson Knowledge StudioのTutorialをやってみた(annotation, type system, entity type, relation type, 도큐먼트 추가, 도큐먼트작성, 딕셔너리추가) (0) | 2018.07.31 |
dialogflow program diary (0) | 2018.07.10 |
uipath program diary (0) | 2018.05.10 |
AA프로그램일기 (0) | 2018.01.16 |