Blog › NLP and Tone Detection

Tone Detection in B2B Customer Communication

Felix Brandt · · 7 min read
Email text analysis showing linguistic markers and tone classification signals
Back to Blog

If you have read much about sentiment analysis applied to customer data, most of it is about consumer contexts: product reviews, social media comments, customer service chats. The models trained on that data are genuinely good at the task they were trained for. The problem is that B2B email and support communication operates in a register that those models were not built for, and applying them directly to your enterprise customer communication produces results that are unreliable in exactly the situations that matter most.

This piece is about how tone detection actually works in a B2B context, where it differs from what standard sentiment tooling provides, and what the implications are for using communication data as a customer health signal.

Why B2B tone is not the same as B2C sentiment

The training data for most public sentiment models is drawn from product reviews, social media posts, and consumer support transcripts. These texts have a specific linguistic profile: they are relatively short, they express sentiment directly, they use colloquial language, and they appear in contexts where the writer expects to be read by the general public or by a company's customer service team with some speed.

B2B email and support communication is different in almost every dimension. It is written by professionals who are trained to communicate formally, who have organizational incentives not to express extreme sentiment in written form, and who are often writing with multiple stakeholders in mind. A director of operations escalating a data issue is not going to write the way a consumer leaving an Amazon review writes. The frustration is the same. The linguistic expression of it is categorically different.

The result is that standard sentiment models tend to mis-score B2B escalations. A politely worded escalation, something like "I want to make sure this issue has the appropriate visibility before our board presentation next week," often scores neutral or even slightly positive on a standard sentiment classifier because the phrasing is professional, the individual words carry no negative loading, and the sentence structure is declarative rather than emotional. A human reader with professional context understands immediately that this is a serious escalation. The model reads it as information transfer.

The features that actually carry signal in B2B communication

Useful tone detection in a B2B context requires paying attention to different features than standard sentiment analysis uses. A few that matter.

First, formality shift relative to baseline. One of the most reliable tone signals in B2B communication is not the absolute level of formality but the change relative to how the same person normally writes. A champion who typically writes with casual warmth and some informality is signaling something real when they shift to purely formal professional language. The shift itself is the signal, not the absolute register. This is not something a static sentiment score captures, because the static score has no memory of how this person wrote six months ago.

Second, hedging and conditional language. The language of professional frustration often involves increased use of hedges and conditionals: "I would hope," "it seems like," "we were under the impression," "I wanted to confirm whether." These phrases signal uncertainty and disappointment without explicitly naming either. A model focused on explicit polarity words like "terrible" or "great" misses this register entirely. Tracking the density and type of hedging language in support tickets and email threads is more sensitive to B2B frustration than polarity scoring.

Third, reference to alternatives and vendor language. When a customer who has never mentioned alternatives starts referencing "what other tools do" or "how vendors typically handle," the referential shift is significant. It indicates the customer is now actively benchmarking rather than operating within the product as given. This is not a tone feature in the traditional sense, but it is a semantic register shift that carries strong predictive information in renewal risk analysis.

Fourth, temporal framing. B2B communication that is oriented toward closing a relationship often shifts its temporal frame. Questions that used to ask about the future ("how do we plan to use X in Q2") become questions about the present ("how do our current settings work") or about history ("what has happened with our support volume over the last year"). The migration from future-oriented to present- and past-oriented language tracks with a customer who is preparing to make a decision rather than continuing to invest.

The sequence classification problem

A point that is often underappreciated in discussions of sentiment analysis applied to CS data: the relevant analysis unit is often not the individual message but the sequence of messages over time. A single email that reads neutrally carries much less information than five emails over six weeks that show a consistent directional drift in formality, hedging density, and temporal framing.

This is a sequence classification problem, and it is technically more demanding than single-document sentiment scoring. It requires maintaining state across a communication thread, which means you need to associate individual messages with their thread context and their account timeline, not just score each message independently. Standard sentiment APIs that take a string and return a score are not the right tool for this.

The approach we are working with at Sturdy involves treating an account's communication record over a rolling time window as the unit of analysis. Individual messages are vectorized for features like the ones described above, and the resulting feature trajectories are what get classified rather than the individual documents. This lets the model detect drift and escalation arcs rather than just point-in-time sentiment.

Where standard tooling falls short: a technical note

A few specific failure modes worth naming explicitly for people who have tried plugging off-the-shelf sentiment APIs into their CS data pipeline.

Fine-tuning on consumer review data creates systematic biases for B2B use: positive language density tends to be higher in professional communication because writers are trained to frame issues constructively, which means polarity-based models systematically over-estimate positivity in B2B corpora. Models that were not exposed to professional email register during training have no learned representation for the difference between neutral professional information transfer and politely phrased frustration.

Token sequence length is also a practical issue. Many transformer-based sentiment models have 512-token context limits, which is fine for a product review but too short for a detailed support ticket or a multi-paragraph email escalation. The most information-dense part of a B2B escalation is often toward the end of the message after the writer has laid out context. Truncated inputs lose that information.

Entity and topic disambiguation matters more in B2B than in B2C. A message that says "this issue with the import function is blocking our go-live" scores very differently if the model understands that "import function" is a specific product feature and "go-live" is a high-stakes customer milestone versus treating both as opaque tokens. Domain adaptation, using communication corpora from the specific product context, significantly improves model performance on these entity-dense texts.

What this means for teams building on top of communication data

The practical takeaway is not that sentiment analysis does not work on B2B communication, but that the version of it that works for B2B requires more than plugging a standard model into your email or ticket data. The features that carry signal in professional communication are different from the features that carry signal in consumer reviews. The analysis unit is a thread or a time window, not an individual message. And the most informative signal is usually relative change from baseline, not absolute score.

Building this properly requires attention to how messages are segmented, associated with accounts, and linked to their thread context. It requires working with a corpus of actual customer communication to calibrate what normal looks like for your specific customer population, and then building detection logic around departures from that normal. It is not a weekend project, which is part of why we have spent significant time on it at Sturdy.

We want to be clear about where the current state of the art lands: tone detection in B2B communication is genuinely useful and meaningfully predictive when done correctly. It is not a magic churn predictor. It is one signal among several that, in combination with support topic migration and escalation patterns, gives CS teams substantially more lead time on renewal risk than product usage data alone. The signal is in the text. The question is whether your stack is reading it.

More from the team