2016-04-08 2 views
1

Ich habe Probleme mit dem Ansatz, den ich anwenden sollte, um eine FAQ mit dem Bot Framework zu implementieren. Ich überlegte, LUIS zu verwenden, stellte jedoch fest, dass ich für jede Frage eine Absicht erstellen musste. Da es eine große Anzahl von diesen gibt (sagen wir 100), habe ich mich gefragt, ob es einen besseren Ansatz gibt?Wie implementiere ich FAQ zu Bot Framework?

Antwort

1

Ich glaube nicht, dass Sie eine Absicht für jede Frage erstellen müssen, dass Informationsdesign nicht akzeptabel ist. Was Sie tun müssen, ist, die Arten von Fragen zu klassifizieren, die Sie haben, und diese Klassifikationen sollten Ihre Intents sein.

Wir machen fast dasselbe, also habe ich in meinem Fall einen Intent namens "Definition" für Fragen erstellt, der normalerweise mit "What is .." beginnt. Ich versuche dann, LUIS mit allen möglichen Fragen zu trainieren, die nach Definition fragen.

Da Sie an einer FAQ arbeiten, handelt es sich um eine endliche Menge von Informationen. Sie können grundsätzlich alle FAQs verwenden und sie als Äußerungen einreichen und sie in ihren richtigen Absichten klassifizieren.

+0

Ja, das sollte die Anzahl der Absichten drastisch reduzieren, danke. –

+1

Ich werde einfach auf Römer antworten antworten, da er grundsätzlich richtig ist. Erstellen Sie einfach eine einzelne Absicht wie "FAQ" und trainieren Sie dann eine LUIS-Entität, um die Benutzerfrage zu extrahieren. Verwenden Sie von dort aus Suchtechniken, um die relevanteste Definition zu finden. Wenn Sie eine Menge FAQs haben, können Sie eine Suchmaschine wie Lucene verwenden, um nach der Antwort zu suchen. –

2

Wenn Sie nur FAQs zurückgeben, ist es nicht klar, dass Sie LUIS überhaupt brauchen. Verwenden Sie einfach Suchtechniken. Sie können eine Suchmaschine wie Lucene oder eine einfachere Sache verwenden, wenn Sie nur ein paar hundert FAQs haben, um Ihren eigenen Ranker zu schreiben, der Antworten basierend auf der Anzahl der Wörter aus der Benutzerabfrage, die dem Dokument entsprechen, auswählt.

Ein ziemlich einfacher Rankingalgorithmus wäre, die Benutzeräußerung in Token aufzuteilen und dann für jedes Dokument nach jedem Token innerhalb des Dokuments zu suchen. Ihr Ergebnis wird generiert, indem die Anzahl der Tokens gezählt wird, die innerhalb des Dokuments übereinstimmen, und ein Coverage-Ergebnis berechnet wird. Abdeckung ist im Grunde, wie viel Prozent der Begriffe in der Benutzerabfrage dem Dokument entsprechen.

Es gibt ein paar Möglichkeiten, wie Sie die Abdeckung berechnen können, aber hier ist ein ziemlich einfacher Ansatz. Addiere alle Längen der übereinstimmenden Token und dividiere diese durch die Gesamtlänge des gesuchten Dokuments/Felds. Also sagen wir, wir haben die Abfrage "Zeige mir Hunde aus Asien" und wir haben ein Dokument mit dem Titel "Asian Dogs". Wir hätten 2 Tokens in der Benutzeräußerung, die übereinstimmen, "Hunde" und "Asien". Sie haben eine Gesamtlänge von 8 und der Titel hat eine Länge von 10. So (8/10) würde eine Coverage-Punktzahl von 0,8 für das Titelfeld ergeben.

Sie könnten die gleiche grundlegende Technik bei der Suche über das Dokument verwenden, aber Sie möchten die Anzahl der Übereinstimmungen eines Begriffs berücksichtigen. Im Grunde wollen wir ein Dokument, das 5 Vorkommen von "Hund" und 10 Vorkommen von "Asien" hat, um ein Dokument mit nur 1 Vorkommen von jedem zu sortieren.

Es gibt viele andere Dinge, die Sie zu Ihrem Ranking-Algorithmus hinzufügen können wie stemming & TF-IDF-Unterstützung, aber an diesem Punkt sollten Sie nur eine Suchmaschine verwenden.