루스 앱을 프로그램에서 사용하는 방법

개시하다


저번 LUIS를 사용하여 자연 언어 처리를 시도했습니다.
근데 그러면 의미가 없잖아.
따라서 이번에는 제작된 LUIS 앱을 프로그램에서 사용할 예정이다.

BotFramework 편


LUIS Application은 Microsoft의 BotFramework에서 쉽게 사용할 수 있습니다.

LUIS를 사용하여 Bot 생성


참조Bot Framework와 잡담 API를 이용한 채팅 Bot, 템플릿을 사용하여 NuGet 패키지가 복원될 때까지 BotApplication 프로젝트를 생성합니다.
RootDialog.cs
    [Serializable]
    public class RootDialog : LuisDialog<object>
    {
       
    }
RootDialog.IDialog에서 LuisiDialog로 cs의 기본 클래스를 변경합니다.
기본 클래스를 변경하는 단계에서는 템플릿에서 만든 StartAsync 메서드와 Message ReceivedAsync 메서드가 사용되지 않으므로 삭제됩니다.
RootDialog.cs
    [LuisModel("{Application ID}", "{Programmatic Key}")]
    [Serializable]
    public class RootDialog : LuisDialog<object>
    {
    }
RootDailog반으로 추가된 AttributeLuisModel.
Attribute 매개변수 정보

LUIS Apply의 SETTING 메뉴의 Application ID

User settings 내 Programatic Key
설정
RootDialog.cs
        [LuisIntent("")]
        [LuisIntent("None")]
        public async Task None(IDialogContext context, LuisResult result)
        {
            await context.PostAsync($"インテント引っかからず");
            context.Done<object>(null);
        }

        [LuisIntent("ScheduleSearch")]
        public async Task ScheduleSearch(IDialogContext context, LuisResult result)
        {
            await context.PostAsync($"インテントScheduleSearchに引っかかる");
            await context.PostAsync($"スコアは{result.Intents[0].Score}です。");

            foreach (var entity in result.Entities)
            {
                await context.PostAsync($"エンティティ{entity.Type}");
                await context.PostAsync($"値は{entity.Entity}です。");
            }

            context.Done<object>(null);
        }
반에서 논 방법과 스chedule Search 방법을 추가합니다.
각 방법의 AttributeLuisIntent 설정으로 LUIS App의 Intent 이름을 매개 변수로 설정합니다.LuisIntent Attribute 설정을 통해 LUIS App은 Bot에 입력한 글을 판단하고 판단한 Intent를 Attirbute로 설정하는 방법을 처리한다.

이것은 디버깅을 수행한 후 BotFramework Emulator에서 수행한 결과입니다.
'야마다 선생의 예정은'이라는 문구를 입력한 뒤 Schedule Search in 텐트로 판단했고, 봇 측 텐트와 실체 반환 처리가 진행 중이다.
"안녕하세요"라는 말을 입력한 뒤 논인 텐트로 판단했고, 봇 측은 텐트에 걸리지 않은 상태로 되돌아가는 처리를 했다.
이처럼 봇프레임워크와 협업하면 루스 앱을 사용한 것처럼 느껴지지 않게 프로그램을 제작할 수 있다.

REST API 편


LUIS App은 다양한 플랫폼에서 사용할 수 있는 REST API 포트도 갖추고 있다.
URL
https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/{ApplicationID}
그렇습니다.
※ 구역이 westus일 때.공짜 계좌라면 이거일 거예요.
매개 변수
매개 변수

시험을 준비하다
subscription-key
{Programmatic Key}
verbose
true
가짜면 어떻게 되는지 아직 모르겠는데..
timezoneOffset
540
시간대 시차 설정
q
LUIS App이 판단한 글
구문을 생성합니다.
호응하다
{
  "query": "山田さんの予定は",
  "topScoringIntent": {
    "intent": "ScheduleSearch",
    "score": 0.973934
  },
  "intents": [
    {
      "intent": "ScheduleSearch",
      "score": 0.973934
    },
    {
      "intent": "None",
      "score": 0.153738111
    }
  ],
  "entities": [
    {
      "entity": "山田",
      "type": "LastName",
      "startIndex": 0,
      "endIndex": 1,
      "score": 0.8487269
    }
  ]
}
실행하면 JSON이 응답으로 돌아갑니다.

REST API를 사용하여 강조 보트에 자연 언어 처리 포함


튀어나온 Bot을 만들어 보도록 하겠습니다.
이름에서 G Suite 조직 내 사용자 예약 가져오기
구문을 사용합니다.
말은 그렇지만 한글 출력봇의 명령/bot コマンド パラメータ 구성은 바꿀 수 없기 때문에 LUIS App이 입력한 문자열을 처리한 후 그 내용에 따라 명령을 생성한다.
handlers.py
    @asyncio.coroutine
    def handle_command(self, event):

        

        # ensure bot alias is always a list
        if not isinstance(self.bot_command, list):
            self.bot_command = [self.bot_command]

        # ↓ 追加処理 始まり
        # 自然言語処理で予定問い合わせか判断
        response = requests.get(
        'https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/{ApplicationID}',
        params={'subscription-key': '{Programmatic Key}',
                'verbose': 'true',
                'timezoneOffset': '540',
                'q': event.text})
        luisJson = response.json()

        if luisJson['topScoringIntent']['intent'] == 'ScheduleSearch':
            createCommand = '/bot calendar '

        lastName = ''
        firstName = ''
        for entity in luisJson['entities']:
            if entity['type'] == 'LastName':
                lastName = entity['entity']

        if len(lastName) > 0:
            createCommand = createCommand + lastName
        else:
            createCommand = ''

        if len(createCommand) > 0:
            event.text = createCommand
        # ↑ 追加処理 終わり

추가 처리는handlers입니다.py의handlecommand 방법.
handle_command 메서드에서 입력한 문자열이 Bot에서 분리된 명령과 일치하는지 여부를 판단합니다.
따라서 판단에 앞서 LUIS App이 입력한 문자열을 판단하도록 하고'문의 예정'의 상하문이면 생성/bot Calendar 名字의 명령을 입력한 문자열로 대체한다.

실제로 실행된 후, "질문 계획"과 "질문 계획"상하문에 있는 글을 입력했을 때의 결과는 같다.

좋은 웹페이지 즐겨찾기