←

Datasets: collect, clean, normalise, train

Two datasets built from nothing: a Lebanese Sign Language dataset recorded across Lebanon for OmniSign, and a training corpus distilled from real WhatsApp conversations for the Hader offline model.

Most of AI is the data nobody wants to clean.

Two datasets built from nothing: a Lebanese Sign Language dataset recorded across Lebanon for OmniSign, and a training corpus distilled from real WhatsApp conversations for the Hader offline model.

Data collection · Cleaning · Normalisation · Training

  • 50,000Signs collected for OmniSign
  • 80,000+Samples after augmentation
  • 1,160Conversations exported for Hader
  • 863 / 169Train and held-out eval

From the first recording to the model

On OmniSign I worked on data collection with the team and integrated the trained model into the mobile app. On Hader I took the platform's own conversation trail and turned it into a clean, private, honest training set.

  • Collection campaigns with Aaramoun Orphanage, Sin El Fil Church and SignWithNaila
  • Landmarks per frame with MediaPipe Holistic, stored per signer and sign
  • The trained sign model wired into the OmniSign mobile app
  • PII scrubbing, de-duplication and format normalisation for the Hader corpus
  • Train and eval splits checked for contamination

The pipeline

The same five stages on both projects, with very different raw material.

  1. 1Collect
  2. 2Scrub and de-duplicate
  3. 3Normalise to one shape
  4. 4Split train and eval
  5. 5Train
  6. 6Grade against a baseline
  7. 7Use it

What it does

  1. 01

    Collected in the field

    OmniSign signs were recorded in campaigns across Lebanon, because no Lebanese Sign Language dataset existed.

  2. 02

    Landmarks, not pixels

    Each sign is stored as hand and pose landmarks with joint angles, per signer and per sign, through a collection GUI.

  3. 03

    Cleaned and augmented

    50,000 collected signs became more than 80,000 samples covering the Arabic alphabet and around 30 daily expressions.

  4. 04

    Private by construction

    The Hader corpus scrubs names, phones, emails and locations with consistent placeholders, so grounding survives and nothing personal does. The raw export was shredded.

  5. 05

    Normalised to one shape

    Half the conversations repeated the incoming message in history, an old platform convention. Normalising every example cut duplication from 50.4% to 5.1%.

  6. 06

    Honest splits

    A time split still leaked FAQ-shaped questions into eval, five of 174. Fixed to zero, and the platform's own failure messages were removed as training targets.

How it was built

  1. OmniSign collection

    A PyQt5 and MediaPipe Holistic GUI records landmark features per signer and sign. A TinyTCN classifier with two Conv1d layers and adaptive pooling is trained with 5-fold stratified cross-validation.

  2. Hader export

    Each provenance row is one example: the system prompt snapshot, the history and the customer message, with the bot's real reply as the target and the source model as a tag.

  3. Quality filter

    94 hallucinated replies, 27 duplicates and 2 platform fallbacks dropped before training.

  4. Grading the graders

    The reference replies were scored against the gates themselves. They scored 90.8% on a 95% gate, so the gates were fixed rather than loosened, and every scorecard now prints the reference score beside each gate.

Stack

Sign data
Python, PyQt5, MediaPipe Holistic, PyTorch, TFLite.
Corpus
Python scripts over Postgres, PII scrubber, 46-assertion test suite.
Formats
JSON landmarks per sign; JSONL chat examples.