Skip to main content

thai backchannel classifier - detect backchannels vs real responses in thai asr output

Project description

thai backchannel classifier

detects thai backchannel responses (fillers like ครับ, ค่ะ, อืม) vs real user input for voice ai systems.

why

thai voice bots using asr → llm → tts pipelines need to distinguish between backchannels (acknowledgment sounds that should be ignored) and real responses that need processing. simple exact matching fails on asr variants and misses edge cases.

approach

gradient boosting classifier with 23 handcrafted thai-specific features:

feature importance
remaining_ratio 0.9098
has_request 0.0406
has_negation 0.0274
particle_ratio 0.0108

key idea: strip known backchannel components from the text, measure what's left (remaining_ratio). if nothing remains, it's a backchannel.

features

  • remaining_ratio: strips known backchannel components, measures residual text
  • polite particle detection (ครับ/ค่ะ/จ้ะ variants)
  • backchannel sound patterns (อืม/อ๋อ/เออ with tone variants)
  • question/negation/request/continuation markers
  • handles asr misspellings (ค่า→ค่ะ, คับ→ครับ, อื้ม→อืม)

results

cross-validation

  • 99.49% f1 (5-fold cv, gradient boosting)
  • logistic regression baseline: 98.97% f1

full training set

               precision    recall  f1-score   support
real_response       1.00      1.00      1.00        96
  backchannel       1.00      1.00      1.00       194
     accuracy                           1.00       290

test suite: 94/94 (100%)

the test suite (tests/test_classifier.py) covers:

backchannels (49 cases):

  • basic polite particles: ครับ, ค่ะ, คับ, คะ, จ้ะ, จ้า
  • dai + particle: ได้ครับ, ได้ค่ะ, ได้จ้ะ
  • filler sounds: อืม, อือ, อื้อ, เออ, เอ่อ, อ่า
  • oh: อ๋อ, อ๋อครับ, อ๋อค่ะ
  • agreement: ใช่, จริง, ถูก, แน่นอน
  • ok variants: โอเคครับ, โอเคค่ะ
  • question-like: เหรอ, หรอ, งั้นเหรอ
  • compound: ครับ ฮัลโหล, อ่ะ ใช่ๆๆ, อ่าฮะ ครับ
  • asr tone variants: อื้ม, อ๊าา, อ้า, อึม

real responses (45 cases):

  • greetings: สวัสดีครับ, ขอบคุณครับ
  • negations: ไม่ครับ, ไม่ใช่ค่ะ, ยังครับ
  • questions: ราคาเท่าไหร่ครับ, ทำไมครับ, กี่โมงครับ
  • requests: ผมต้องการจองตั๋วครับ, ช่วยเช็คให้หน่อยได้ไหมครับ
  • tricky edge cases (backchannel + continuation):
    • "ใช่ แต่ว่า" → real (has continuation marker)
    • "ครับ แล้วก็" → real
    • "ได้ครับ แต่ขอเปลี่ยนวัน" → real
    • "อ๋อ แล้วเรื่องที่สอง" → real
    • "อืม แต่ว่าผมไม่แน่ใจ" → real
  • short real: ไม่, ยัง, เอา, ได้เลย

usage

from detect import is_backchannel

is_bc, confidence = is_backchannel("ครับ")        # (True, 1.0)
is_bc, confidence = is_backchannel("ไม่ครับ")     # (False, 0.0)
is_bc, confidence = is_backchannel("ใช่ แต่ว่า")  # (False, 0.0)

cli:

python detect.py ครับ
# 'ครับ' -> BACKCHANNEL (confidence: 1.0000)

testing

python -m pytest tests/ -v

or without pytest:

python tests/test_classifier.py

files

  • train.py - training script with all data + features
  • detect.py - inference module (import or cli)
  • backchannel_model.pkl - trained model (~50kb)
  • tests/test_classifier.py - comprehensive test suite (94 cases)

requirements

  • python 3.8+
  • scikit-learn
  • numpy

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

thai_backchannel-0.2.0.tar.gz (58.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

thai_backchannel-0.2.0-py3-none-any.whl (30.1 kB view details)

Uploaded Python 3

File details

Details for the file thai_backchannel-0.2.0.tar.gz.

File metadata

  • Download URL: thai_backchannel-0.2.0.tar.gz
  • Upload date:
  • Size: 58.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for thai_backchannel-0.2.0.tar.gz
Algorithm Hash digest
SHA256 23a76a3ddd3c84e483173b310a365c105a9b86704f0908eb899cd13915f80290
MD5 5249e358650d3b12f9ba7c652787a7c4
BLAKE2b-256 6720ed2ffec78b761b7c3dc4858eac32be48a8616d5c866df25f23145c4c7fc9

See more details on using hashes here.

File details

Details for the file thai_backchannel-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for thai_backchannel-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6765ce8b20829005048c35ea61777614776c40bc70658e9a2397187a7711973b
MD5 59e8060fc72b3b4ab582ab531282284a
BLAKE2b-256 abfe460563229f861306424589e5b95524f99136788891c14d54a5b1f8f32e28

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page