# 1-4. Training

## 자동판매기 캡슐의 트레이닝를 해보자!

자동판매기 캡슐은 사용자가 ‘차가운 커피 뽑아줘’라고 말을 하였을 때, 음료에 대한 정보를 보여주는 캡슐입니다. 트레이닝을 통하여 사용자가 자동판매기 캡슐에 접근하고 사용할 수 있도록 해봅시다.

트레이닝은 **캡슐이 잘 동작할 수 있도록 사용자가 할 수 있는 말들을 훈련**시키는 것 입니다. **사용자들이 캡슐의 서비스에 기대할 만한 발화의 패턴을 훈련**시키는 것이 중요합니다.

<div align="left"><img src="https://273918599-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lrq1jp4p9KfAreFLMyA%2F-LsZZG5sSMVw28u9TVKZ%2F-LsZZPxEz40LiEYIAIDc%2F14.PNG?alt=media&#x26;token=804a747e-60cf-4a53-a9a3-117fa8859872" alt=""></div>

먼저, **Bixby Studio 왼쪽의 네비게이션바**를 보면 위의 이미지와 같은 화면을 보실 수 있습니다.

resources 폴더 하위에 ko-KR 폴더가 위치해 있습니다. ko-KR안에 있는 training이라는 파일을 보실 수 있습니다. 이 파일에서 트레이닝을 진행하게 됩니다.

![](https://273918599-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lrq1jp4p9KfAreFLMyA%2F-LsVrSj9j7-7Qsiu_M45%2F-LsVt1_tAax_JZUkxo_5%2F8.PNG?alt=media\&token=10ef026c-9a45-425d-b459-ef60effa11b5)

트레이닝 파일을 열어보시면 위와 같은 화면을 보실 수 있습니다. 이제부터 트레이닝 데이터를 하나 추가하면서, 트레이닝 방법과 테스팅에 대하여 설명드리도록 하겠습니다.&#x20;

{% hint style="danger" %}

여기서 예제는 ‘콜라 줘’의 트레이닝 데이터를 추가하였지만, **‘차가운 커피 줘’를 트레이닝에 추가**하여 보세요. 아래의 설명을 따라가시면 충분히 추가하실 수 있습니다. \
\&#xNAN;**\* '차가운' 태깅에는 음료수 상태를 나타내는 concept을 활용하여 봅시다.**
{% endhint %}

### 1. 트레이닝

<div align="left"><img src="https://273918599-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lrq1jp4p9KfAreFLMyA%2F-LsnpwX1YLK4T-CeoEYl%2F-Lsnq5-MGtoGI6i6FiK_%2F3.PNG?alt=media&#x26;token=f68c098c-4171-4c12-aecd-0c06f2be3438" alt=""></div>

트레이닝 파일의 맨위 ‘Adding New Training’ 하단 바에 ‘콜라 줘’를 입력하시고 엔터 혹은 ‘Add’ 버튼을 누르시면 아래와 같은 창을 보실 수 있습니다.

![](https://273918599-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lrq1jp4p9KfAreFLMyA%2F-LsntsULrX-Bsd9P4Rxj%2F-LsntutO1hdd5YWclOR4%2F4.PNG?alt=media\&token=b45bba15-33c9-4727-b43c-1df4698e7fca)

현재 화면에서 여러 가지 요소를 보실 수 있지만, 빨간 박스 부분을 중점적으로 살펴보도록 하겠습니다.

우선 GOAL이라는 부분에 들어갈 내용은 이 **트레이닝 데이터가 실행해야 할 action 또는 사용자에게 보여주어야 하는 결과 concept을 지정**합니다. 여기에서는 자동판매기 캡슐의 action인 **‘OrderDrink’**&#xB97C; 적도록 하겠습니다.

<div align="left"><img src="https://273918599-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lrq1jp4p9KfAreFLMyA%2F-LsntOdvItSsCrObdigJ%2F-LsntSsbiRyfAtv2AkD9%2F9.PNG?alt=media&#x26;token=cbd230ca-9ddd-4410-bb7a-2d4af696a2d5" alt=""></div>

NL 박스에 들어갈 말은 **사용자가 캡슐의 서비스를 사용하기 위하여 할 수 있는 말들을 적는 곳**입니다. 위 이미지를 보시면 '콜라' 부분에 파란색으로 태깅이 된 것을 보실 수 있습니다. 태깅을 하는 법은 해당 단어를 드래그하시면 됩니다. **태깅은 발화로부터 어떤 단어나 어구가 action을 실행할 때 필요한 부분이라는 것 지정**해두는 것입니다. OrderDrink action의 **input** 데이터인 **name**에 **required**를 지정했기 때문에, action을 실행하기 위해서는 "콜라"라는 단어에 DrinkName concept을 태깅해주셔야 합니다.

```
action (OrderDrink) {    
    ...    
    input (name) {      
        type (DrinkName)      
        min (Required) max (One)    
    }    
    ...
```

<div align="left"><img src="https://273918599-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lrq1jp4p9KfAreFLMyA%2F-LsoD2OxJfLN-_HiTwKZ%2F-LsoD4ZAS9xsLcXkRfMs%2F10.PNG?alt=media&#x26;token=60374fe2-3bb7-4af6-956d-bbbf02bb491e" alt=""></div>

하단의 화살표를 클릭하게 되면 그래프가 나오게 됩니다. 이 **그래프는 발화에 대응하는 action이 어떤 input concept을 가지고 실행될지와 어떤 output을 가지는 지에 대한 정보**를 알려줍니다. 정상적으로 그래프가 그려졌다면 save를 누르셔서 데이터를 저장해주시면 됩니다.

{% hint style="warning" %}
화살표를 눌렀을 때 그래프가 그려지지 않는다면, 해당 트레이닝 작성에 문제가 있는 것 입니다.&#x20;
{% endhint %}

### 2. 테스팅

<div align="left"><img src="https://273918599-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lrq1jp4p9KfAreFLMyA%2F-LsnpwX1YLK4T-CeoEYl%2F-Lsnq2RBb8OmsxyOBgZW%2F2.PNG?alt=media&#x26;token=4bb497c7-cb7e-4268-b90f-a12b3110481f" alt=""></div>

트레이닝 파일의 오른쪽 상단에  **‘Compile NL Model’**&#xC744; 누르시면 트레이닝 데이터를 실제로 적용해 보실 수  있습니다. 트레이닝 데이터를 적용하시면 **시뮬레이터에서 실제 사용자가 말하는 것과 같이 테스트**를 해보실 수 있습니다. 화면 상에서 아래 빨간 박스를 누르시면 해당 트레이 데이터를 기반으로 캡슐을 테스트 해보실 수 있습니다.

<div align="left"><img src="https://273918599-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lrq1jp4p9KfAreFLMyA%2F-Lsnqjc1-ZUnMIA_fUxp%2F-Lsnr56ocOImqqsm_SBd%2F7.PNG?alt=media&#x26;token=4000548f-dc3a-4414-9378-2750b53e0886" alt=""></div>

버튼을 누르시면 시뮬레이터 창이 뜨면서 추가했던 트레이닝이 실행된 것을 보실 수 있습니다. 시뮬레이터 창의 왼쪽을 보시면 위의 이미지와 같이 생긴 것을 보실 수 있습니다. 여기서 **compile 부분은 기존 training 창의 ‘Compile NL Model’ 버튼과 동일**한 역할을 합니다. 또한 위쪽에 **디버깅 버튼을 누르시면 디버깅 창**을 불러올 수 있습니다.

<div align="left"><img src="https://273918599-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lrq1jp4p9KfAreFLMyA%2F-LsnpwX1YLK4T-CeoEYl%2F-LsnqFXKRvMqV9pXgOF1%2F6.PNG?alt=media&#x26;token=4347f019-c594-435d-8003-8c7bcb8ed5e0" alt=""></div>

디버깅 창에서는 실행했던 **발화를 바탕으로 action이 어떻게 실행되었는지, 데이터가 어떻게 흘러가는지 등**을 확인하실 수 있습니다. 디버깅 기능을 활용하시면 캡슐 동작에 문제가 발생하였을 경우, 문제점을 찾기가 수월해 집니다. 특히, **Javascript 코드에서 console.log를 통한 로그**도 디버깅 창에서 확인하 수 있습니다.

```
// OrderDrink.js
module.exports.function = function orderDrink (status, name) {  
    const console = require("console");  
    console.log(name);  
    ...
```
