Skip to content

04 Dimensions

How enrichment works

What AI data enrichment is, how a prompt turns raw text into labeled columns, and why it works better than keywords or trained models.

Optional. You don't need this to get started. Back to the quickstart

Conversations, reviews and open-ended survey answers are full of information, but it is locked in text. Enrichment reads that text with a large language model and writes what it finds as labels. Each label is a new column, and each column is a Dimension.

enrichment · one record
Raw text

I asked for a person three times before it let me through. It kept sending me the same help article, which doesn't cover my situation. Twenty minutes to change one address.

Bot conversation · handed off · resolution joined
Dimensions written to the record
  • Human-Escalation Attempt3 attempts
  • Bot Containmentfailed
  • AI Failure Modeloop · repeated answer
  • Self-Service Attemptarticle not relevant
  • Effort Levelhigh · 20 minutes
  • Automation Opportunityaddress change

Each colour links a phrase in the raw text to the Dimensions extracted from it. Hover either side.

The output looks like text coding, text mining or AI classification. These docs call the process enrichment.

The messages between a customer and a bot or agent are unstructured data: there are no columns to count or filter on. Enrichment adds them.

Here is a dataset with two columns, a session id and the conversation text:

Session IDConversation text
112203User: Love your new product
Bot: Amazing, thank you!
231107User: Track order
Bot: Happy to help with that.

The text holds more information than the two columns show. Enrichment finds it and adds it as new columns.

Each conversation is read by a language model that has been given a specific task: a prompt. The model applies labels by following the prompt’s instructions, and the labels are added to your data as new columns.

  • Task: sentiment analysis
  • Prompt: “Identify the sentiment of this conversation.”
  • Dimension: sentiment, one of positive, negative, neutral
Session IDConversation textSentiment
112203User: Love your new product
Bot: Amazing, thank you!
positive
231107User: Track order
Bot: Happy to help with that.
positive

The model can run several tasks on the same conversation, and a task doesn’t need a fixed list. It can write a label from what the conversation says:

  • Task: reason analysis
  • Prompt: “Detail the reason the customer engaged with support.”
  • Dimension: contact_reason, written from the conversation
Session IDConversation textSentimentContact reason
112203User: Love your new product
Bot: Amazing, thank you!
positivenew product feedback
231107User: Track order
Bot: Happy to help with that.
positiveorder tracking inquiry

Unlike sentiment, the reason labels aren’t chosen from a list. These are dynamic labels. Once you see them, you can ask the agent to group them into themes.

Both kinds of task, fixed and dynamic, standard and custom, can run together on the same data. This is easier to set up and change than a trained machine learning model.

Every source is brought into one format before it is enriched. Text from any source is organized as messages grouped into sessions, and the full text of a session is its transcript. See Sessions and conversations.

The same format holds many kinds of text:

KindMessages are
ConversationsIncoming and outgoing messages
SurveysQuestions and answers
Online interactionsPosts and replies, reviews and comments
News contentArticles and comments
DocumentsLong-form content

Enrichment reads each conversation in full, both sides, and fills in every Dimension of the prompt for that conversation. It reads the text only: columns such as rating, region or plan are already structured, and you join them in afterwards. Business data files aren’t enriched at all.

Putting different sources into one format is what lets you apply one prompt to your chat, email, call, review and survey sources, and compare the results. You choose the sources a prompt is applied to when you save or backfill it.

A short piece of text can hold a lot of information, even when we don’t see it at first. Which parts matter depends on who is reading: your company, and your role in it. Disagreement about what a piece of text “means” isn’t a problem to solve. It shows how much is in the text.

Three examples, each read by two teams:

“This phone takes the best videos I’ve ever seen, seriously, they look professional! I did more than 3 hours of shooting yesterday and my external batteries kept me going strong.”

  • Marketing: the camera stands out for photo enthusiasts and should lead the campaigns.
  • Product: battery life could be improved to keep up with demanding features like HD video.

“The ticket I transferred to my husband didn’t work and we had to ask venue staff to fix it. They were so helpful and knowledgeable!!”

  • Digital team: the ticket transfer flow has a problem to raise with the ticketing provider.
  • Support team: venue staff are well trained on fixing the problems guests have with the app.

“I really love the new chicken tenders at Brand A, much better than Brand B (sorry!). I’ll def be going back for more.”

  • Brand A: customers like the new menu item.
  • Brand B: a competitor’s launch is a threat.

Each of those readings is a different Dimension of the same text.

One conversation is easy for a person to understand. Thousands are not. As volume grows, it becomes hard to see consistent patterns, and impossible to count why customers get in touch, how they feel and how their issues end.

Boolean keyword searches and trained machine learning models fall short on both speed and accuracy. They take a lot of effort to set up, and they rely on brittle rules.

Keywords can’t tell meanings apart. A search for “cook” returns all of these:

  • a job title: seeking line cook
  • a verb: love to cook
  • a noun used as an adjective: cook station
  • a product: cook knife
  • slang: let him cook
  • an exclusion: culinary professionals only, no amateur cooks

Language models represent words by their relationships to other words in context (word embeddings), so they can tell these apart.

Enrichment uses a language model to read each conversation the way a person would, then labels it. Each prompt extracts one aspect of the text, and each label becomes a column. Extracting several dimensions of meaning from the same text is a flexible way to analyze it, because you choose the questions.

DimensionTaskExample promptOutputUse
Brand sentimentThe emotional tone toward a brand“What is the customer’s sentiment about [brand]?”positive, negative, neutralTrends in how people feel
SatisfactionPredict a satisfaction rating“Estimate the customer’s satisfaction with their experience.”A whole-number scale such as 1 to 5 or 1 to 10, or satisfied, dissatisfied, neitherA consistent satisfaction measure without surveys. See Predicted scores.
Dynamic labelsWhy customers contacted support“What is the reason the customer engaged with support?”Written from the text: order tracking inquiry, bonus code confusion, crypto withdrawal delayThemes found from the content, with no list set in advance
CategorizationThe matching category“What was the topic of this interaction?”Chosen from a list: billing_and_payment, technical_issue, product_inquiryCounting topics against a known list
OutcomesHow the conversation ended“What was the outcome of this interaction?”complete, escalated, abandonedSupport effectiveness and resolution patterns

Enrichment follows the same method as human data coding. Researchers apply sentiment and topic codes by hand, using a detailed coding guide. A language model applies the same kind of guide, your prompt, to every conversation. The labels are applied the same way every time, with no variation between coders, and the turnaround is much faster.

Traditional systems can only apply options decided in advance. Enrichment can also write new labels from what appears in the text, such as “bonus code confusion” or “crypto withdrawal delay”, instead of forcing every conversation into a fixed category. That is how you find issues and trends nobody defined.

Traditional approachesEnrichment
Keyword searches miss contextReads context and meaning
Trained models are hard to changeYou change the prompt
Manual coding doesn’t scaleRuns on every conversation
Fixed categories limit discoveryDynamic labels surface new themes

Labeling is a recognition task: the model picks out what is already in the text and writes a short label. That carries much less risk of the model making things up than open-ended writing does, because it relies on the model’s pattern recognition and reasoning with very little generated output. Language models also handle what keywords can’t: the flow of a conversation, implied meaning and sentiment, industry terms, and the customer’s intent and emotion.

Low risk isn’t no risk. Labels are only as good as the prompt, so:

  • Pair every judgement with a verbatim Dimension that copies the customer’s words, so any label can be checked.
  • Test the prompt on a varied sample before running it on everything. See Test before you run.
  • Read some results after every run, not just the counts.
  • Text holds a lot of meaning, from different points of view.
  • Enrichment extracts that meaning as labeled Dimensions, one column per question.
  • Dynamic labels surface patterns you didn’t define.
  • Clear prompts, tested on your own data, keep the labels consistent at scale.