Teaching an LLM a little Jiu Jitsu A practitioner built a domain-expert Brazilian Jiu Jitsu coaching assistant on a 7-billion-parameter open-weights model, drawing on roughly 30,000 instructional video segments, 14,000 competition match clips and 79 written technical guides. The seven-step pipeline cleans phonetic transcription errors and prepends contextual retrieval headers before embedding, builds an explicit knowledge graph of canonical tags and cross-school synonyms, audits video keyframes with CLIP plus a vision-language model, and fine-tunes an ONNX bge-reranker-base cross-encoder on timestamped links mined from existing documents. Training runs 2.5x decision-weighted QLoRA SFT followed by zero-extra-VRAM PEFT DPO on a single GPU, gated by an automated linter that rejects datasets above a 0.35% 7-gram threshold, with deployment on volume-backed vLLM serverless. Earlier this year, my colleagues https://siliconangle.com/2026/03/05/specialized-telecom-ai-reshapes-network-operations-mwc26/ at Relational AI https://www.relational.ai/ helped AT&T https://www.linkedin.com/posts/farbodtavakkoli earlier-this-year-we-trained-and-open-sourced-share-7513354677996965889-jUke/ build LLM models focused on Telecom called Otel https://arxiv.org/html/2610.07766v1 and push it to the top of the leaderboard https://huggingface.co/spaces/GSMA/open-telco-leaderboard . I wish I could tell you all about it, but I wasn’t on the team. No worries though, you can read all about on the links above. Instead I’m going to tell you about training an LLM focused on Brazilian Jiu Jitsu. The idea is to ask it all kinds of dumb beginner questions and have it provides great answers. All without getting frustrated or telling you to focus on the fundamentals before trying flying armbars. Now, I wish I could just sign up Claude to our local school, fast forward 10 years and be done, but LLMs can’t learn that way. Large Language Models need Language, they need Text. Luckily there are thousands of “Instructionals” video classes teaching a topic or technique of usually high quality and thousands of YouTube videos of varying degrees of quality we can use as our starting point. While kid classes pay the bills for local schools, it turns out middle aged men are the target audience of the instructional market. I had already purchased over 50 instructionals on BJJ Fanatics https://bjjfanatics.com/ , but that wasn’t nearly enough, I had to use the Jozef Chen method https://www.youtube.com/shorts/KDgwxidXdRw and got a lot more. I also got some competition match clips that were narrated from youtube and downloaded them using yt-dlp https://github.com/yt-dlp/yt-dlp . Everyone is short on attention these days, so this is the AI:DR version for you to replicate this for your own video or document library: 1. Clean phonetic transcription errors and prepend Contextual Retrieval headers Context: Author — Source | Category | Tags before embedding. 2. Build an explicit Knowledge Graph mapping canonical tags, cross-school synonyms, parent-child tag hierarchy, and mutual-exclusivity rules. 3. Audit video keyframes with CLIP + a Vision-Language Model so silent physical demonstrations become searchable Visual Demonstration chunks. 4. Mine timestamped links from your existing docs to fine-tune an ONNX Cross-Encoder Re-Ranker bge-reranker-base with 5-way listwise loss. 5. Synthesize a 3-Track SFT dataset 6-excerpt RAFT with distractors + diagnostic Go/No-Go gates + Knowledge Graph lineage/rules and gate it with an automated <0.35% 7-gram linter . 6. Run 2.5x Decision-Weighted QLoRA SFT followed by Zero-Extra-VRAM PEFT DPO with model.disable adapter : + 0.15 NLL anchor on a single GPU. 7. Verify against a rubric-scored domain benchmark and deploy on volume-backed vLLM serverless . A Recipe for Building a Domain-Expert AI Coach Suppose you have a massive library of specialized domain knowledge—in our case, about 30,000 instructional video segments , 14,000 competition match clips , and 79 written technical guides on Brazilian Jiu-Jitsu. Your domain might be surgical procedures, aviation maintenance, industrial robotics, or tax law, but the problem is the same. When a user asks a question, you want an AI assistant that: 1. Speaks the real language of the domain knowing when five different terms from different schools mean the exact same thing . 2. Retrieves the exact moments that matter across both spoken explanations and silent visual demonstrations. 3. Writes a clear, multi-paragraph answer with inline 1 – 6 citations that jump the video player to the exact timestamp, while ignoring near-miss search results. 4. Runs fast and cheap on a 7-billion-parameter open-weights model without frontier API bills. If you just wire up basic vector search to an off-the-shelf 7B model, you will get vague fortune-cookie advice, hallucinated rules, and backwards physical mechanics like telling a student to spin the wrong way out of a heel hook . We are going to walk through the complete, step-by-step recipe we used to build and taking our domain benchmark BJJ-Bench-250 to 5.00 / 5.0 on Kinematic Precision with a 0.0% distractor citation rate . Let’s jump in. The Ingredients Architecture Overview Before we start cooking, here is what goes into the system: You only need a single GPU an NVIDIA L40S, A40, or A100 on RunPod for ~30 minutes to train both the cross-encoder re-ranker and the 7B language model. Step 1: Clean the “Slightly Wrong” Data and Add Contextual Headers Real-world transcripts are messy. Instructors are out of breath on a mat, using domain loanwords from Japanese and Portuguese. Speech-to-text models like Whisper hear “kimura” as "camera" , “De La Riva” as "dealer river" , “Danaher” as "donna hair" , “ashi garami” as "oshi garami" , and “inside sankaku” as "inside sinkhole" . 1a. Repair Phonetic Mishearings First Don’t waste model capacity teaching an LLM to guess phonetic typos if you can fix them deterministically at ingest time. Build a domain replacement dictionary and run it over your raw transcripts before you embed or train on them: js const PHONETIC REPAIRS = /\bcamera\b/gi, 'kimura' , /\bdealer river\b/gi, 'de la riva' , /\bdonna ?:her|hair \b/gi, 'Danaher' , /\boshi garami\b/gi, 'ashi garami' , /\binside sinkhole\b/gi, 'inside sankaku' , /\bhonor roll\b/gi, 'honey hole' , /\bMarcelo team\b/gi, 'marcelotine' , /\b ?:uma|homo plata\b/gi, 'omoplata' , ; 1b. Prepend Contextual Retrieval Headers Before Embedding A 60-second video transcript window is full of pronouns: “When he pushes here, I move my foot there and lock this up.” By itself, that chunk has no idea what position it is in. Before computing dense embeddings BAAI/bge-small-en-v1.5 or full-text search vectors, prepend a structured Contextual Retrieval Header to every chunk: BJJ Context: Gordon Ryan — Systematically Attacking The Guard NOGI | Chapter: Half Butterfly Sweeps | Tags: half-butterfly, butterfly-hook, half-guard