【Dialogflow】 1개의 Intent로 어떤 질문에도 대답할 수 있는 슈퍼 에이전트를 만든 이야기

소개



간단한 질의 응답 시스템을 만들기 위해 Dialogflow를 사용하는 것이 자주 있다고 생각합니다.
통상은 각 질문마다 각 Intent를 정의해 줍니다만, 이번은 그것을 1개의 Intent로 대응해 버리자! (이하 슈퍼 에이전트)
라는 이야기가 됩니다.

일반적인 방법의 단점



질의응답시스템은 방대한 질문수를 다루는 일이 있다.
Q1Intent
Q2Intent
...
QXIntent

슈퍼 에이전트의 장점



질문 수가 많아도 Intent는 늘어나지 않으므로 Entity 관리만 됩니다.
QIntent

구체적인 구현 방법



정책으로서는 대화를 분해하는 것입니다.
예를 들어, "초콜릿은 얼마입니까?""초콜릿은 몇 개입니까?"라는 두 가지 질문이 있다고 가정합니다.
양자 모두 초콜릿을 소재로 취급하고 있습니다만, 전자는 가격을 묻는 질문으로, 후자는 개수를 묻는 질문이므로, 당연히 대답은 바뀝니다. 이것을 통상의 방법으로 Intent 정의하면,
"{sweet}은 얼마입니까?"와 "{sweet}은 몇 개입니까?"슈퍼에이전트에서는 「몇 개 있나요」 「얼마입니까」라고 하는 부분도 Entity 관리해 버리자! 라는 것이 본질입니다. 그래서 다음과 같이 분해해 보겠습니다.
"초콜릿"을 noun Entity
"얼마입니까?""얼마나?"verb Entity
로 명사와 동사로 분해합니다.
그렇게 하면 방금전의 Intent의 학습 프레이즈는 다음과 같이 나타낼 것이라고 생각합니다.
{noun}は{verb}

Intent가 하나가되었습니다. 그리고는 명사만이나 동사만, 명사와 동사가 연결되거나, 반대가 되거나, 명사만이 포함되는 문장, 동사만이 포함되는 문장 패턴을 생각합니다.
결국 다음과 같은 학습 문구가 될 것입니다.
{noun}
{verb}
{noun}{verb}
{noun}は{verb}
{verb}{noun}
{verb}は{noun}
{noun}をしたい ※verbにパターンが存在しない、名詞だけ含まれる文章パターン
ものを{verb} ※nounにパターンが存在しない、動詞だけ含まれる文章パターン

마지막으로 noun과 verb (때로는 ID)로 데이터베이스에서 질문에 대한 대답을 검색하기 만하면됩니다.



요약



분해해 생각하는 것으로, 부드럽게 Intent를 늘리지 않아도 여러가지 케이스에 대응할 수 있습니다.
문장이 길고, 명사나 동사가 복수 포함되는 경우에서도, 덩어리로서 명사나 동사에 전해져 버리면 그렇게 움직였습니다.
나의 경우라면, 이번 슈퍼 에이전트를 만들어 두는 것으로, 요건을 채울 수 있었습니다.

좋은 웹페이지 즐겨찾기