# How to choose a Thai speech to text engine

Seven properties to test on your own Thai audio before an accuracy figure enters the conversation, from word spans to what a failure costs.

Published 2026-09-10. Paxa Labs.

Most speech-to-text comparisons open with an accuracy figure and close there. For Thai that is a weak place to start. The figure depends on a tokenizer the language does not supply, and the properties that decide whether a transcript is usable are mostly about something else. An engine can hear a Thai sentence correctly and still hand back something no product can build on.

This post is a test plan. Record thirty minutes of the audio you actually have, run it through each candidate, and check seven things. Every one of them can be answered from a single response. No engine is named here, ours included, and no figure is quoted.

## 1. Word spans on whole words

Ask for word timestamps and look at what came back. Some engines time Thai one character at a time, because the writing system offers no other boundary. Character spans are technically timestamps and practically unusable: a subtitle cue cut on them breaks mid-word, a read-along player highlights a consonant, and a search result opens on a fragment.

the same phrase, timed two ways (illustrative seconds):

```
ประชุมวันพฤหัส

per word         ประชุม  0.42-0.86    วัน  0.86-1.02
                 พฤหัส   1.02-1.48

per character    ป 0.42-0.47   ร 0.47-0.51   ะ 0.51-0.55
                 ช 0.55-0.61   ุ 0.61-0.64   ม 0.64-0.86
```

The engine that returns the first shape has segmented the sentence. The engine that returns the second has passed the problem to you. Solving it afterwards means running a segmenter over the transcript and mapping its output back onto character times.

## 2. A stated number convention

A speaker says a figure aloud. A transcript can write it the way it was said or the way a document prints it, and the two are different strings. A search index wants one, a subtitle file wants the other, and a claims system wants digits it can parse. Check whether the engine offers the choice, or whether it picks for you and leaves the conversion as your problem.

Test it with a recording that carries a price, a date, a phone number, and a percentage in the same minute. That is one ordinary Thai sentence in a call centre, and it exercises every rule at once.

## 3. Thai that turns English

Thai speakers name products, technical terms, and brands in English mid-sentence without pausing. Send a recording that does this and read the line back. Three failures are worth looking for. The English word can arrive transliterated into Thai script, the Thai around it can be dropped, and the word spans can lose their seconds across the switch.

## 4. Speaker turns, if you need them

Two people on a call, or four in a meeting. Check that the turns are numbered consistently, that a speaker who returns after a gap keeps their number, and what happens to the word spans when both speakers and timestamps are on. Check the length ceiling too. Marking who spoke when reads a recording whole, and that work usually carries a shorter limit than plain transcription.

## 5. Your own names

Every product has words no general model has heard: part numbers, place names, a brand spelled a particular way. Check whether the engine takes a term list, how many terms it takes, and whether the spelling holds across separate requests. A list of 50 terms covers most working vocabularies. A list that silently truncates covers none of them predictably.

## 6. The ceilings, before you build

Length per request, bytes per file, and the containers accepted. These decide the shape of your pipeline more than accuracy does. An engine that takes an hour in one call and one that takes ten minutes are two different integrations, and finding that out after the code is written is expensive.

Check also whether the format is read from the bytes or declared by you. Declared formats mean every upload path in your product has to sniff and label the file correctly before it can send it.

## 7. What a failure costs

Send a corrupt file, a silent file, and a file past the length ceiling. A refusal before any charge is the behaviour you want, with a code that says which of the three happened. Then check what a failure after the charge does. An engine that bills for a request it could not complete turns every bad upload in your product into a small loss.

## Then measure accuracy

With the seven answered, score the candidates that are left. Do it over characters, on your own references, with the normalization rules written down. The accuracy post covers how, and the short version is that a figure nobody can reproduce is not a figure.

## Where we stand

Paxa STT Lite answers the seven this way. Word spans cover whole Thai words. A spoken or a written convention comes on request. Thai and English share one line. Speaker turns are available on shorter recordings, and a term list is accepted. Recordings run to 60 minutes with the container read from the bytes, and a request that fails is not charged. No accuracy figure is published until the method is published beside it.

## Next steps

- Read the [speech-to-text guide](https://paxalabs.com/docs/speech-to-text) for the request fields the seven checks above use.
- Read [why word error rate misleads on Thai transcripts](https://paxalabs.com/guides/measuring-thai-transcription-accuracy) before scoring anything.
- Read [what ASR means for Thai](https://paxalabs.com/asr) for the properties of the language behind these checks.
- Open the [transcribe tool](https://paxalabs.com/app/transcribe) and run your own thirty minutes.
