Production Intent Recognition System for Enterprise Chatbots

feedyou · Tech · 2023 · source Agentic: no · promotional bias: low · source-backed · extracted with prompt 0.5.6 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: Enterprise chatbot intent recognition

FeedYou and Prometeus AI needed production chatbot platforms that could route short, noisy user utterances through intent models and dialog flows while supporting rapid bot-specific iteration and modular conversation design.

Constraints:

Architecture

FeedYou uses lightweight NLP.js intent classifiers per chatbot, with normalization/tokenization/stemming, confidence scoring, named entity extraction, and real-time validation during bot design. Similar intents are consolidated and disambiguated with entities and clarifying questions. Prometeus Flowstorm adds hierarchical sub-dialogs with local/global/out-of-domain intent recognition and GPT-2 generation for out-of-domain handling, evolving from Alexa Prize lessons about modular dialog management.

Diagram confidence: reconstructed (reconstructed from prose).

flowchart LR
  feedbot-designer["Feedbot Designer"] --> nlp-js-trainer["NLP.js trainer"]
  feedbot-designer["Feedbot Designer"] --> dialog-tree-runtime["Dialog tree runtime"]
  nlp-js-trainer["NLP.js trainer"] --> validation-system["Validation system"]
  validation-system["Validation system"] --> chatbot-designer["Chatbot designer"]
  chatbot-designer["Chatbot designer"] --> feedbot-designer["Feedbot Designer"]
  dialog-tree-runtime["Dialog tree runtime"] --> intent-classifier["Intent classifier"]
  dialog-tree-runtime["Dialog tree runtime"] --> entity-recognizer["Entity recognizer"]
  intent-classifier["Intent classifier"] --> entity-recognizer["Entity recognizer"]
  entity-recognizer["Entity recognizer"] --> clarification-flow["Clarification flow"]
  clarification-flow["Clarification flow"] --> dialog-tree-runtime["Dialog tree runtime"]
  flowstorm-sub-dialog-manager["Flowstorm sub-dialog manager"] --> gpt-2-out-of-domain-handler["GPT-2 out-of-domain handler"]
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
Feedbot Designer Visual drag-and-drop chatbot authoring and deployment interface. NLP.js trainer, Dialog tree runtime
NLP.js trainer Trains per-chatbot lightweight intent models quickly from small datasets. Feedbot Designer, Validation system
Validation system Tests examples against intended intents and warns about overlapping confidence scores. NLP.js trainer, Chatbot designer
Chatbot designer Human builder who refines intents, examples, entities, and flows. Validation system, Feedbot Designer
Dialog tree runtime Production runtime for predefined tree-structured chatbot routes. Feedbot Designer, Intent classifier, Entity recognizer
Intent classifier Classifies normalized user utterances and returns intent confidence scores. Dialog tree runtime, Entity recognizer
Entity recognizer Extracts action/entity details for consolidated intents and disambiguation. Intent classifier, Clarification flow
Clarification flow Asks follow-up questions when entities are missing or intent is ambiguous. Entity recognizer, Dialog tree runtime
Flowstorm sub-dialog manager Hierarchical dialog architecture with local/global/out-of-domain intent recognition. GPT-2 out-of-domain handler
GPT-2 out-of-domain handler Generative response layer for out-of-domain or social-chat inputs. Flowstorm sub-dialog manager

Data flow

A chatbot designer defines intents/examples in Feedbot Designer. When edited, the platform trains an NLP.js model in seconds, tests training examples, warns about overlapping intents, and deploys the bot to web/Facebook channels. At runtime, short user input is normalized, tokenized, classified, and entity-tagged. If intent/entity confidence is sufficient, the dialog tree routes to a branch; otherwise the bot asks clarification or falls back. Flowstorm similarly routes through local, global, and out-of-domain intent layers inside reusable sub-dialogs.

3 supporting quotes
“FeedYou develops a visual chatbot designer tool called Feedbot Designer that allows users to build chatbots through drag-and-drop interfaces and deploy them to channels like Facebook Messenger and web chat.”summary, stated
“The NLP.js pipeline involves normalization (removing accents and punctuation), tokenization (splitting by spaces), optional stop word removal”summary, stated
“Every time a user modifies the NLP model, the system: • Trains the model (approximately 3 seconds)”summary, stated

Why this architecture

FeedYou chose lightweight per-bot classifiers because production inputs were short, datasets were small, training needed to be fast, and the platform was JavaScript-native. Named-entity disambiguation and validation reduce false positives, while Flowstorm’s hierarchy keeps larger conversational systems modular and manageable.

3 supporting quotes
“User inputs are typically too short (1-2 words) for FastText to derive meaningful context”summary, stated
“Training data is extremely limited—typically 10-20 intents with a maximum of 20 examples each”summary, stated
“NLP.js is optimized for exactly this scenario of small datasets and short inputs”summary, stated

Models used: NLP.js neural classifier · FastText (evaluated) · GPT-2 generative models

Scale

Alternatives considered (roads not taken)

FastText for intent matching

Rejected because: It added little value with one- or two-word inputs and tiny per-bot datasets.

“When they evaluated whether more sophisticated models like Facebook's FastText would improve results, they found no significant benefit for their use case.”summary, stated

Splitting intents across multiple models

Rejected because: It improved some targeted matches but created high-confidence false positives.

“While this did improve match rates for targeted intents, it introduced a worse problem: incorrect matches with high confidence.”summary, stated

Separate intents for forgotten/new password

Rejected because: The model struggled to distinguish close intents; a shared password intent plus entity worked better.

“instead of separate "forgotten password" and "new password" intents that the model struggles to distinguish, they created a single "password" intent”summary, stated

Visual-flow export to code with redeploy cycles

Rejected because: Prometeus found the process slow and versioning-prone when the visual state was separate from code.

“This process was slow and created versioning problems since the visual state was separate from”summary, stated

Patterns

confidence-thresholding (intent routing)

Intent confidence and similar-confidence warnings route ambiguous inputs to clarification/fallback rather than wrong answers.

“Flags warnings when examples don't match their intended intent or when multiple intents have similar confidence scores”summary, stated

structured-output-contract (dialog design)

Dialog trees and entity slots constrain how recognized intents map to branches.

“The dialog flow then handles disambiguation: if the entity is recognized, it routes to the appropriate branch; if not, the bot asks a clarifying question.”summary, stated

eval-driven-development (authoring)

Every model edit triggers training and validation against examples for immediate author feedback.

“This provides immediate feedback to chatbot designers about overlapping intents that need refinement.”summary, stated

fallback-degradation (conversation handling)

The system prefers clarification or “I do not understand” over high-confidence wrong intent matches.

“This taught them that false positives create worse user experiences than acknowledging "I don't understand"—when users receive an incorrect answer, it's more frustrating than being asked to rephrase their question.”summary, stated

prompt-chaining (dialog flow)

Flowstorm uses hierarchical sub-dialogs and multiple intent layers rather than one monolithic conversation model.

“implementing hierarchical sub-dialog structures with multi-level intent recognition (local, global, and out-of-domain)”summary, stated

Tradeoffs

Model sophistication

Chose NLP.js lightweight classifiers over FastText/complex models.

Rationale: Small data, short inputs, JavaScript stack, and fast retraining mattered more than richer embeddings.

“• The entire codebase is JavaScript, avoiding the complexity of multiple languages”summary, stated

Intent design

Chose Consolidated intents plus entities over Many narrowly separated intents.

Rationale: Entities reduce classifier burden and produce more natural clarification flows.

“This approach improved both model accuracy and user experience, as the bot appears to engage in natural conversation rather than failing silently.”summary, stated

Error posture

Chose Fallback/clarification over Risking high-confidence wrong answers.

Rationale: Users prefer being asked to rephrase over receiving an incorrect response.

“This taught them that false positives create worse user experiences than acknowledging "I don't understand"—when users receive an incorrect answer, it's more frustrating than being asked to rephrase their question.”summary, stated

Gotchas (what bit them)

Longer inputs matched worse than short ones.

Root cause: Production users mostly typed short/noisy phrases, and long inputs did not fit the intent-model assumptions.

Resolution: Choose models and validation around real input length distribution.

“shorter inputs are matched successfully more often, while longer inputs (50+ words) see dramatically lower match rates.”summary, stated

High-confidence wrong matches were worse than fallback.

Root cause: Splitting models narrowed vocabulary and inflated confidence for accidental token overlaps.

Resolution: Avoid multi-model splits that create false positives; consolidate intents and clarify.

“a small talk model containing a "marry me" intent with the phrase "meet me at the altar" would incorrectly match when users asked to "schedule a meeting"”summary, stated

Separate similar intents confused the classifier.

Root cause: Short inputs did not reliably distinguish semantic variants such as forgotten vs. new password.

Resolution: Use named entities inside a broader intent and ask clarifying questions when needed.

“They developed validation strategies to detect overlapping intents and leveraged named entity recognition to simplify model complexity.”summary, stated

Evaluation

FeedYou evaluates by retraining in seconds on every edit, testing all training examples, warning on wrong/similar matches, and analyzing production input length/match-rate distributions.

Metrics: 72% no-human-intervention rate · outside-hours usage share · input length distribution · match success rate · training time · overlapping-intent warnings

“• Tests every training example against the model”summary, stated
“Looking at one month of data from a QnA bot with over 4,000 queries, they found that most inputs are very short—typically one or two words.”summary, stated

Outcomes

The case reports 72% automated handling, about half of use outside working hours, 4,000+ monthly QnA queries in one analysis, 25% noise, 3-second Azure training, and four years of Alexa Prize work.

“allowing support staff to focus on more complex problems.”summary, stated
“Together, they provide valuable insights into the operational challenges and solutions for deploying conversational AI systems at scale.”summary, stated