-인텐트와 엔티티는 연관성이 없는 서로 다른 개념

:인텐트는 사용자의 "의도"를 파악하는 지표료, 같은 의도를 나타내는 여러개의 문장을 하나의 인텐트에 저장함으로써 어떤 유저로부터 어떤 반응이 나오면 인텐트에 저장된 문장들과 일치하는지를 파악하여 인식한다.

:엔티티는 비슷한 단어들의 집합

:사용자가 어떤 인풋을 나타낼시 왓슨은 인텐트를 통해 인식하거나, 엔티티를 통해 인식하거나, 둘 다를 통해 인식한다.


-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내에서 사용할 수 있는 함수들을 다음 사이트에서 참고하라.

(https://console.bluemix.net/docs/services/conversation/dialog-methods.html#expression-language-methods)


-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 로함





+ Recent posts