Privacy and preparation
How to measure language share of a dataset: an English-share worksheet
By SourceX Editorial · Updated
Short answer
To measure the language share of a dataset, define the offered scope, choose a unit (records, characters, tokens or audio minutes), set a written rule for mixed-language records, then run a pinned language identification model over a random, stratified sample and have a person review uncertain cases. Report the share with its interval, unit, rule and status: unknown, estimate, measured or verified. Unknown is never zero.
Key takeaways
- A language share means nothing without its scope, unit and counting rule; the same records can honestly yield 75% or 86% English.
- Count in the unit the data will be used in, usually characters or tokens for text and minutes for audio, and report records alongside.
- Language identification tools are weakest on short messages, so set a minimum length and review uncertain segments by hand.
- About 385 randomly sampled records give a worst-case 95% interval of plus or minus 5 points; stratify by system, channel and year.
- Label every figure as unknown, estimate, measured or verified, keep the interval, and re-measure when the offered scope changes.
What does the language share of a dataset actually measure?#
The language share of a dataset is the fraction of a stated unit, such as records, tokens or audio minutes, that is in a given language under a stated counting rule, measured over a defined scope. Change any of those three and the number changes, sometimes by many percentage points, so a share quoted without them is not a measurement anyone can check.
Scope comes first. Write down which systems, which date range and which filters define the offer: for example, Zendesk tickets from the North America brand, 2021 to 2025, closed status, excluding internal notes. A company-wide language mix is a different number from the share in the records you would actually offer, and only the second one matters to a buyer.
Language share is also not the same as the language your team works in. An English-speaking support team can still hold Spanish customer messages, Portuguese attachments and auto-translated replies, and the records carry whatever language the customer wrote in. Measure the records, not the org chart.
This page is about producing a defensible number as the data holder. If you are on the receiving side and need to check a supplier's language labels, see the guide to language identification QA for multilingual datasets linked below.
Which unit should you count: records, tokens, characters or audio minutes?#
Count in the unit the buyer will use the data in: tokens or characters for text training, audio duration for speech, and records only when each record is the unit of use, such as one ticket as one example. Report at least two units when they differ, because a record count can hide a large volume of non-English text inside a few long records.
Tokens depend on the tokenizer, so name it. OpenAI's tiktoken documentation notes that a token corresponds to about 4 bytes of text on average in practice, and that ratio shifts with language and script, which is why a token share computed with one tokenizer will not match another. Characters are more neutral across tokenizers; count user-perceived characters rather than bytes when scripts differ.
| Unit | What it counts | Good for | Blind spot |
|---|---|---|---|
| Records | Tickets, emails, calls or documents, each counted once | Datasets used one record per example; quick first pass | A few long non-English threads can carry much of the text |
| Messages or turns | Each comment, chat turn or email in a thread | Conversation data where turns are the training unit | Short turns such as thanks or ok are hard to label |
| Characters (user-perceived) | User-perceived characters after cleaning | Text volume across scripts without a tokenizer choice | Ignores how a specific model tokenizes the text |
| Tokens | Tokens under a named tokenizer and version | Training budgets and pricing discussions in tokens | Not comparable across tokenizers or languages |
| Words | Whitespace or rule-based word counts | Rough sizing in languages that separate words with spaces | Undefined for scripts written without spaces |
| Audio duration | Minutes of speech by detected spoken language | Call recordings and voice data | Silence, hold music and crosstalk inflate totals unless removed |
| File bytes | Storage size of exports | Storage planning only | Attachments, markup and encoding dominate; not a language measure |
- 01Your work records
- 02Personal details removed
- 03You approve the release
- 04Licensed to AI developers
How should mixed-language records be counted?#
Pick one counting rule for mixed-language records before you measure, write it down, and apply it to every record. The most transparent option is to split each record into segments, count each segment in its own language, and report mixed records as a separate bucket so a reader can see how much depends on the rule.
Mixed records are normal in operational data. A support ticket may hold a Spanish customer message and an English agent reply; an email thread may quote a Portuguese message below an English answer; a CRM note may switch languages mid-sentence. Strip what is not authored content before counting: signatures, legal footers, templated macros, system notifications and quoted reply history, otherwise a repeated English footer inflates the English share.
Some content has no language at all, such as order numbers, URLs, stack traces or attachment-only records. Keep it out of the language numerator and report it separately. Use separate buckets for no linguistic content and for undetermined language, so your report is easier to audit.
| Counting rule | How a mixed record is counted | When it fits | Watch out for |
|---|---|---|---|
| Segment split | Each message, turn or sentence counted in its own language | Training on turns or sentences; most transparent | Needs segmentation; very short segments are unreliable |
| Strict record | English only if all linguistic content is English | Buyers who need fully English examples | Lowest English share; one quoted line flips a record |
| Majority record | English if more than half its characters or tokens are English | Record-level use where minor quotes are tolerable | State the threshold and unit used for the majority |
| Any-English record | English if any part is English | Rarely appropriate | Inflates the share; avoid as a headline figure |
| Separate bucket | Mixed records reported apart from English and non-English | Any report, alongside one of the rules above | Readers may ignore the bucket unless it is shown next to the headline |
Which language identification tools work, and how often are they wrong?#
Use an established language identification (LID) model, pin its version, set a confidence threshold, and check its output on a human-reviewed sample because short and noisy text is where these tools fail most. The tool gives you a fast first pass; the human-reviewed sample is what makes the number defensible.
Short text is the main weakness. The Lingua project's own German report shows 74.2% accuracy on single words averaging 9 characters, 93.9% on word pairs and 99.7% on sentences averaging 111 characters. GlotLID's maintainers advise against using their model on very short sentences and note that the right confidence threshold differs by language. Operational data is full of short fragments, so set a minimum length below which a segment goes to the undetermined bucket.
Errors also run in a direction that matters for an English share. GlotLID's documentation says its false positive rate for high-resource languages is much higher than for low-resource ones, which means text in other languages can be mislabeled as a high-resource language such as English. Verify any model's labels on a human-reviewed sample before relying on them.
| Tool | Coverage and labels | What its documentation says | Use it for |
|---|---|---|---|
| fastText lid.176 | 176 languages, ISO language codes | Expects UTF-8 input; lid.176.bin is 126MB, lid.176.ftz is 917kB | Fast first pass on large text exports |
| NLLB lid218e (fastText) | ISO 639-3 plus script codes, such as eng_Latn | Released with the NLLB project; 1.2GB model file | Separating scripts and related languages |
| GlotLID | More than 2,000 labels | Avoid very short sentences; per-language confidence thresholds differ | Datasets with less common languages |
| CLD3 | BCP-47-style codes, some split by script | Neural network over character n-grams | Second opinion to flag disagreements |
| Lingua | Configurable language set | Uses n-grams of 1 to 5 plus rules; mixed-language detection is experimental | Short messages and in-record language spans |
| Whisper | Spoken language identification | detect_language works on a 30-second window; transcribe slides a 30-second window | Call recordings, measured per window, not per file |
How big a sample do you need to estimate the English share?#
For a record-level share, a simple random sample of about 385 records gives a 95% confidence interval of roughly plus or minus 5 percentage points in the worst case, and about 1,068 records gives roughly plus or minus 3 points. Those figures come from the standard normal-approximation interval for a proportion with the share assumed to be 50%, the most conservative guess.
The interval is the sample proportion plus or minus a critical z-value (1.96 at 95%) times the square root of p(1 minus p) over N. It is an approximation that works when N is large enough. Assuming p equals 0.5 gives the largest required sample, so it is the safe planning choice when you have no prior estimate. For small samples, or shares near 0% or 100%, use exact binomial limits instead.
Three practical adjustments matter more than the formula. Stratify the sample by source system, channel, region or year, because language mix often differs sharply between them, and weight results back to the population. If the unit is tokens or characters, sample records but compute the share as English characters over all characters in the sample, and estimate its uncertainty by resampling records, since a few long records can dominate. And record the random seed and sampling frame so someone else can draw the same sample.
- Plus or minus 5 points at 95% confidence: about 385 records, worst case.
- Plus or minus 3 points at 95% confidence: about 1,068 records, worst case.
- Plus or minus 2 points at 95% confidence: about 2,401 records, worst case.
- Each stratum you want to report on its own needs its own adequate sample.
Worked example: the English share of a support-ticket export#
Illustrative example, invented to show the method; it does not describe a real company or dataset. A software company plans to offer 180,000 closed Zendesk tickets from 2021 to 2025. It strips signatures, macros and quoted history, draws a random sample of 400 tickets stratified by channel, runs two LID models at the comment level, and has a reviewer check every ticket where the models disagree or confidence is low.
In the sample, 300 tickets are entirely English, 40 are entirely Spanish, 44 mix a Spanish customer message with English agent replies, and 16 contain no linguistic content. Of the 44 mixed tickets, 20 are majority English by characters. Across the 384 tickets with language content, 612,000 of 760,000 characters are English.
The same sample therefore supports four different headlines: 75% English under the strict record rule (300 of 400), 80% under the majority rule (320 of 400), 86% under the any-English rule (344 of 400), and about 81% by characters. Excluding the 16 no-language tickets from the denominator moves each record figure up again. With 400 records, the strict-rule estimate carries a 95% interval of roughly plus or minus 4 points.
The honest report states the scope, unit, rule, method and interval for at least two of these, shows the mixed and no-language buckets, and labels the result a measured estimate. Picking the 86% figure without its rule would overstate what a buyer receives.
| Counting rule | Unit | English share | Basis |
|---|---|---|---|
| Strict record | Records | 75% | 300 of 400 sampled tickets |
| Majority record | Records | 80% | 320 of 400 sampled tickets |
| Any-English record | Records | 86% | 344 of 400 sampled tickets |
| Segment split | Characters | About 81% | 612,000 of 760,000 characters in tickets with language content |
| Reported separately | Records | 4% no linguistic content | 16 of 400 sampled tickets |
How should you report an estimate versus a verified figure?#
Label every language-share figure with its status: unknown, supplier estimate, measured estimate or verified. Unknown is not zero, an estimate is not a verified number, and a band such as most or nearly all is not a percentage. Keep the interval with the point estimate and do not round up to a convenient figure.
Metadata alone is not a measurement. The Hugging Face dataset card format, for example, lists a dataset's languages as ISO codes in its metadata, which says which languages appear but not how much of each. Add an explicit share statement with unit, rule, method and date. If a form asks for a range, choose the range that contains your whole interval, or say that the interval straddles two ranges.
Re-measure when the scope changes. Removing a brand, adding a year or applying de-identification can shift the language mix, and the figure that matters is the one for the records actually delivered.
| Status | What it means | Evidence behind it | How to word it |
|---|---|---|---|
| Unknown | Not yet measured | None | English share: unknown, not yet measured |
| Supplier estimate | Informed judgment without a sample | Knowledge of customers, channels and markets | Estimated at about X%, not measured |
| Measured estimate | Sample measured with a stated tool, rule and unit | Sample frame, seed, LID version, review log | X% (95% interval Y to Z) by unit, rule, date |
| Verified | Measurement checked on the offered records by a second party | Independent re-run or review of the same scope | Verified X% by unit and rule on the offered scope, date |
| Re-verified at delivery | Checked again on the final delivered files | Measurement on the delivery itself | Delivered files: X% by unit and rule |
Language-share measurement worksheet#
Fill in one worksheet per offered scope and keep it with your data profile. Every row should be answerable by someone who was not in the room when the measurement was made.
| Field | What to record | Example (illustrative) | Why it matters |
|---|---|---|---|
| Scope | Systems, date range, filters, exclusions | Zendesk, NA brand, 2021-2025, closed, no internal notes | The share applies only to this scope |
| Unit | Records, characters, tokens or audio minutes | Characters and records | Different units give different shares |
| Counting rule | How mixed records are counted | Segment split; strict record also reported | The rule can move the figure by many points |
| Non-language content | How content with no linguistic content or undetermined language is handled | Excluded from numerator, reported separately | Prevents IDs and URLs from distorting the share |
| Cleaning | What was stripped before counting | Signatures, macros, quoted history, system notes | Repeated boilerplate inflates one language |
| Method | LID tool and version, threshold, minimum length | Two models, version pinned, low-confidence to review | Makes the run reproducible |
| Sample design | Frame, size, strata, random seed | 400 tickets stratified by channel, seed recorded | Sets the uncertainty and lets others redraw it |
| Human review | Who reviewed what share of the sample | All disagreements and low-confidence tickets | Catches short-text and similar-language errors |
| Result | Point estimate and 95% interval per unit | 75% records strict (71% to 79%) | A number without an interval overstates precision |
| Status and date | Unknown, estimate, measured or verified, with date | Measured estimate, 2026-10-13 | Readers know how much to rely on it |
How this applies when licensing data through SourceX#
A measured language share belongs in the description of your data, next to volume, date range and record types, so the first conversation is about the right records. SourceX works with U.S., Canadian and EU companies that had 50 or more full-time employees at their peak, and the first step is a short company assessment that needs no data uploads.
AI developers who request data through SourceX state the language they need alongside scope, volume, format, timing and licensing needs, so state your language share in terms a request can be matched against. Before anything is shared, the company sees and approves exactly what would be released, once per deal; a language figure measured on that exact scope is the one worth stating.
Do not translate non-English records to raise the share. Translated text is a different kind of data from natively written text, and it changes what a buyer would be licensing; if only an English subset is offered, define that subset and measure it on its own.
SourceX can consider companies in the UK, Australia, New Zealand, India, Singapore, South Africa, Latin America, the UAE and Saudi Arabia when the data they offer is at least 90% English, confirmed on the actual dataset; every dataset still goes through rights, privacy, quality and buyer-fit review.
Frequently asked questions
Is language share the same as the percentage of records in English?
Not necessarily. A record share counts each ticket or email once, so a few long non-English threads can hold much more text than their record count suggests. Report the share in the unit the data will be used in, such as characters or tokens, and add the record share for context.
How accurate is automatic language detection on short messages?
Much less accurate than on full sentences. The Lingua project's German report shows 74.2% accuracy on single words versus 99.7% on sentences averaging 111 characters, and GlotLID's maintainers advise against using it on very short sentences. Route short fragments to an undetermined bucket and review them, rather than letting the model guess.
What should I write if I have not measured the language share yet?
Write unknown, not zero and not a guess presented as a measurement. If you have a reasonable judgment, label it a supplier estimate and say what it rests on. Replace it with a measured estimate, including unit, rule, method and interval, before any offer depends on it.
Does translating non-English records into English raise the English share?
It changes the data rather than measuring it. Translated text is a different kind of data from natively written English, so describe it separately. If only part of your data is English, define and measure that subset instead.
How big a sample do I need to measure the English share?
For a record-level share, about 385 randomly sampled records give a worst-case 95% interval of roughly plus or minus 5 percentage points, and about 1,068 records give plus or minus 3. Stratify by system, channel and year, and size each stratum you plan to report on its own.
Do I need to send data to anyone to measure it?
No. The measurement runs on your own systems with open tools, and only the resulting figures and method need to be described. SourceX's first step is a short company assessment that requires no data uploads.
Sources
- fastText's lid.176 models recognize 176 languages, expect UTF-8 input, and ship as a 126MB .bin and a 917kB .ftz; the NLLB lid218e model uses ISO 639-3 plus script codes and is 1.2GB. Source
- GlotLID supports more than 2,000 labels, is trained mainly on longer sentences and should not be used on very short ones, needs language-specific confidence thresholds, and has a much higher false positive rate for high-resource languages than for low-resource ones. Source
- Lingua uses n-grams of sizes 1 to 5 plus a rule-based engine; its German report shows 74.2% accuracy on single words (average 9 characters), 93.9% on word pairs and 99.7% on sentences (average 111 characters); mixed-language detection is experimental. Source
- CLD3 is a neural network language identification model over character n-grams that outputs BCP-47-style codes, some differentiated by script. Source
- Whisper performs spoken language identification; detect_language is shown on audio padded or trimmed to 30 seconds, and transcribe processes audio with a sliding 30-second window. Source
- tiktoken's documentation states that, on average in practice, each BPE token corresponds to about 4 bytes of text. Source
- Hugging Face dataset card metadata lists a dataset's languages as ISO 639-1 codes, alongside license and size. Source
Related resources
See if your company qualifies
A short company assessment. No data uploads are needed.