| name | chinese-asr-transcript-polishing |
| description | Take a noisy Chinese ASR/speech-to-text transcript (Whisper or similar), systematically proofread and correct all transcription errors, restructure into a flowing publication-ready article, and export as a polished Chinese PDF with critical analysis and fact-checking sections. Use when a user provides or generates a Chinese speech transcript and asks for a polished, corrected article PDF — especially for long-form lectures, keynote speeches, interviews, or academic talks where accuracy of proper nouns, historical facts, and technical terms is critical. |
Chinese ASR Transcript → Polished Article PDF
Bridge the gap between raw Chinese ASR output (Whisper, faster-whisper, etc.) and a publication-ready article PDF. ASR systems are excellent at general speech but systematically fail on proper nouns, historical dates, domain-specific terms, and English loanwords. This workflow catches those errors.
When to use
- User provides a long speech transcript (Chinese or English) and asks for a polished, corrected article PDF
- User asks to "correct typos and errors in the transcript" and "output a polished speech article"
- User shares a YouTube video URL and asks for a polished Chinese article with critical analysis and fact-checking
- User asks for a PDF that faithfully preserves the original speech while fixing transcription mistakes
- The transcript contains proper nouns (names of people, places, organizations), historical references (dates, events), or domain-specific terminology (economic terms, financial concepts, academic jargon) that ASR handles poorly
Do NOT use when
- The transcript comes from a professionally produced source (subtitles, published text, official transcript) — minimal errors
- The user only wants a summary or analysis of the speech, not the full article — use consulting-pdf-from-youtube instead
- The user specifically wants the raw transcript preserved without corrections
- The user wants bilingual subtitles (EN+ZH) embedded into a video — use video-transcription-subtitle-workflows instead
- The user wants a literal verbatim transcript without restructuring into article format
Workflow
Step 0: Prerequisites
You need the chinese-pdf-report skill loaded for the PDF export step. This skill covers the proofreading and article writing; chinese-pdf-report covers the rendering.
Step 0a: GPU detection — Whisper model selection constraint
On this machine, Whisper runs CPU-only (no GPU/CUDA). This has two consequences:
- Model size matters critically. Tiny (~75MB) completes in seconds to minutes. Small (~1.5GB) regularly times out at the default 120s terminal timeout.
- FP16 warning is expected and ignorable — Whisper prints
UserWarning: FP16 is not supported on CPU; using FP32 instead. This is normal for CPU inference.
Rule: Always use --model tiny by default. Only use --model small if the user explicitly asks for higher accuracy and you have time to wait. Never use --model medium or --model large on this machine.
If the timeout fires: Kill the hanging process with process(action="kill"), switch to --model tiny, and retry. The tiny model produces ~the same output quality for Chinese speech on this machine — the difference is in the number of homophone errors that will need manual correction in Step 2.
Long-form audio (15+ minutes): Use whisper /path/audio.wav --model tiny --language zh --output_dir /tmp --output_format txt directly with a generous timeout (300-600s). The tiny model processes ~25 min of audio in about 1-2 min on CPU.
Step 0a.5: When YouTube has NO auto-captions — Whisper fallback workflow
This scenario is especially common for:
- YouTube Shorts (rarely have auto-captions)
- Chinese-language videos from smaller channels
- Livestream archives
- Videos with disabled captions
Trigger: When yt-dlp --write-auto-subs --sub-langs zh,en returns "There are no subtitles for the requested languages".
Fallback workflow:
mkdir -p ~/.Hermes/workspace/output/video_downloads/<topic_name>
yt-dlp --cookies-from-browser chrome -S 'res:1080' --merge-output-format mp4 -o '<path>/%(id)s.%(ext)s' 'URL'
ffmpeg -y -i <video.mp4> -vn -ar 16000 -ac 1 <audio.wav>
whisper <audio.wav> --model tiny --language zh --output_dir /tmp --output_format txt
Important distinction: Whisper output for Chinese direct transcription vs. YouTube auto-captions for English:
- Whisper output = full text but noisy (lots of homophones, garbled names). Every error category in Step 2 applies at higher frequency. Requires more manual proofreading.
- YouTube auto-captions (English VTT) = accurate text but fragmented (30% filler, overlapping cues). Requires VTT dedup + translation, but fewer name errors.
Video info for directory naming: Before creating the download folder, check the video title and channel with:
yt-dlp --cookies-from-browser chrome --print '%(title)s\\n%(channel)s\\n%(duration_string)s' 'URL'
Name the download directory after the content topic.
Step 0c: Duration-based strategy — short-form vs. long-form
Video duration determines the restructuring approach:
Short-form (< 3 min, including YouTube Shorts):
- Minimal restructuring — the entire video is one core message
- No need for chapter/section breakdown
- Structure: single narrative flow, a few quote blocks, insights section
- The challenge is accuracy, not structure — Whisper errors are more visible in short content
- Adding a transcription error correction appendix (before/after table) adds value
Long-form (> 15 min, lectures, interviews, podcasts):
- Full restructuring into sections/chapters
- Each topic transition in the speech becomes a section heading
- Dialogue format for conversations, thematic sections for monologues
- The challenge is organization, not accuracy — the long-form has more redundancy to survive errors
Step 0d: Source type identification — beyond Chinese ASR vs. English VTT
New scenarios discovered in real usage:
Scenario C: Chinese audio + bilingual sub availability
Some Chinese-language podcasts have both zh-CN auto-captions (YouTube ASR) and English auto-translate captions. The Chinese VTT may be short/truncated while the English has more content. Strategy:
- Download BOTH zh-CN and en VTT files
- Extract the zh-CN first for the original Chinese text (more accurate for names/places)
- Use the English VTT to fill gaps where Chinese VTT is sparse
- Cross-reference: Chinese text for proper nouns, English for completeness
- This happened with 不明白播客 EP-209 (Xu Chenggang): zh-CN had 16K chars vs English 52K chars
Scenario D: Heavy dialect (北方方言 / 东北话)
Whisper performs significantly worse on Chinese regional dialects, especially:
- 东北话 (Northeastern dialect, 二人转 style) — homophone rate doubles
- 四川话 (Sichuan dialect)
- Any dialect with non-standard pronunciation
Signs of dialect-induced errors:
- Words that are clearly phonetic approximations but not real words
- Multiple consecutive characters that don't form any known phrase
- The same spoken word transcribed differently at different timestamps
Strategy for dialect videos:
- After Whisper output, do a full pass looking for "impossible" character sequences
- Read each garbled segment aloud (mentally) in the approximate dialect — does it sound right?
- Use context (topic, typical phrasing of the speaker) to infer the correct words
- Expect 2-3× more manual corrections than standard Mandarin ASR
- The 花哥 "开皮爱国赛道" video (25 min, 东北二人转 style) needed corrections on nearly every sentence
Scenario E: Political/sensitive content
Some videos contain politically charged content. This requires additional care:
- Include an explicit content notice at the top of the PDF (e.g. "本文仅为内容实录与文本分析,不代表整理者立场")
- Frame the critical analysis section around media analysis and rhetorical strategy, NOT political endorsement
- Focus insights on the structural/linguistic aspects of the content, not the political views
- Fact-check claims as you would any other content — don't adjust standards based on sensitivity
Step 0b: Source identification — Chinese ASR vs. English YouTube VTT
Before reading, identify the source format — the cleanup strategy differs fundamentally:
Scenario A: Chinese ASR transcript (Whisper, native Chinese speech)
- Errors are homophone substitutions, garbled proper nouns, wrong dates
- Fix strategy: read for semantic errors, check proper nouns against known references
- Proceed to Step 1 directly
Scenario B: English YouTube auto-captions (VTT format)
- The VTT format has CHARACTERISTIC redundancy issues that must be cleaned first
- Each timed cue appears multiple times (incremental build: short → medium → full), creating 3x–4x duplication
- Overlapping cues where the end of one cue and start of another share text
- The raw file may be 12,000+ lines for a 64-minute video, yielding ~3,000+ cues
- Fix strategy: write a Python script to:
- Extract unique text per timestamp (take the longest version per cue)
- Walk sequentially and deduplicate (if text A is a prefix of text B, replace A with B)
- Check for suffix-prefix overlap between consecutive cues and merge
- Group resulting clean segments into paragraphs (~5-8 segments per paragraph, at sentence boundaries)
- After VTT cleanup, the transcript may still have 90+ usable paragraphs
- Once cleaned, you need to translate/transform the English content into natural Chinese
After VTT cleanup (Scenario B), proceed with the same steps below — the error categories shift from "ASR homophones" to "translation naturalness" and "cultural adaptation."
Step 1: Read and scan the full transcript
Read the entire transcript before making any changes. Note the following characteristics:
- Speaker identity — who is speaking? This determines the domain of proper nouns
- Topic area — finance, history, technology, medicine? This determines technical term expectations
- Speech length — a 500-line transcript vs. a 4000-line transcript requires different levels of restructuring
- Timestamp format — note if timestamps are present, as they'll need to be stripped
- Dialogue vs. monologue — is this a conversation (two+ speakers, Q&A format) or a single speaker lecturing?
- Language mixing — does the speaker code-switch between Chinese and English? ASR often garbles English terms
Step 2: Systematic error scan — check these categories
Category A: Proper nouns (most critical)
ASR systematically garbles people's names, place names, organizational names. Examples from real usage:
| ASR Output | Correct |
|---|
| 张县中 | 张献忠 |
| 比阿迪 | 比亚迪 |
| 台积链 | 台积电 |
| 孟格尔 / Monger | 芒格 (Charlie Munger) |
| 密尼索达 / Mini Solar | 明尼苏达 (Minnesota) |
| 李鲁 | 李录 |
| 维尼斯 | 威尼斯 (Venice) |
| 纳泊伦 | 拿破仑 (Napoleon) |
| 恶物战场 | 乌克兰战场 (Ukraine) |
Check method: Read through the transcript looking for:
- Names that don't sound familiar or sound slightly off
- Place names that don't match known geography
- Terms that appear multiple times in slightly different forms (ASR is inconsistent)
- Any term that, when read aloud, sounds close to a known proper noun
Category B: Historical dates and numbers
ASR frequently misrecognizes numbers and years.
| ASR Output | Correct |
|---|
| 11188年 | 1688年 |
| 几百年的联系 | 几百年的历史 |
| 22例 | 22年 |
Check method:
- Read all numeric references against known history
- Common confusions: year digits transposed (1688 → 11188), missing century markers, decimal points misplaced
- Economic statistics should be verified against common knowledge
Category C: Technical and domain-specific terms
ASR often substitutes a more common homophone for a domain-specific term.
| ASR Output | Correct |
|---|
| 累尽 / 不浪识 / 福利增长 | 复利增长 (compounding growth) |
| 安全编辑 | 安全边际 (margin of safety) |
| 供给策 / 需求策 | 供给侧 / 需求侧 |
| 知情合一 | 知行合一 |
| 托虚相实 | 脱虚向实 |
| 文质capital | 风险资本 (venture capital) |
| 三倍批 / 两倍批 | 三倍PB / 两倍PB (price-to-book ratio) |
Check method:
- Identify the domain (finance, tech, history, medicine)
- List the 5-10 most likely domain-specific terms for that domain
- Search the transcript for those terms — if they appear wrong, fix them
- For English-Chinese mixed terms («文质capital»): the Chinese part is often the garbled part
Category D: Homophone substitutions
Generic Chinese ASR errors where a similar-sounding word is substituted.
| ASR Output | Correct |
|---|
| 制泄 | 致谢 |
| 人海利商 | 人类历史上 |
| 玉金香泡沫 | 郁金香泡沫 |
| 苦惊中外 | 古今中外 |
Check method:
- Look for phrases that don't make sense in context
- Read them aloud — do they sound like a common phrase?
- Check for 成语 (chengyu) that are almost right but have one wrong character
Category E: English borrowings and loanwords
ASR often garbles English terms used in Chinese speech. Examples:
| ASR Output | Correct |
|---|
| Fashion Guide | Fishing Guide |
| Rising tile lift all boat | Rising tide lifts all boats |
| Murder of Equals | Merger of Equals |
| Raw and Twonies | Roaring Twenties |
| William the Irish | William of Orange |
Check method:
- Look for English words or phrases in the transcript
- Read in context — does the English phrase make sense?
- Consider the speaker's accent — a non-native English accent will cause specific ASR garbles
- Verify English phrase against context and known concepts
Step 3: Structural restructuring
Raw ASR transcripts have these characteristics that need fixing:
- Removed timestamps — strip
[HH:MM:SS.sss] markers
- Remove speech disfluencies — false starts, repeated filler words, microphone checks, audience interactions that don't add content
- Merge fragmented sentences — ASR splits long sentences at arbitrary audio boundaries
- Paragraph organization — group related ideas into paragraphs
- Section headings — identify natural topic transitions in the speech and create section headers
- Quote formatting — use blockquotes for key statements the speaker emphasizes
- Fill in implicit references — "these problems" → what problems? Provide context where the speaker's gesture or slide reference is lost in text
Dialogue format (for interviews/conversations):
- When the source is a conversation (two+ speakers), preserve the dialogue structure — it's essential to the content
- Mark speakers clearly with labels (e.g.
**Speaker A:** or role-based labels like **Host:**, **Guest:**)
- Group short back-and-forth exchanges into logical blocks rather than splitting every line
- When one speaker tells a personal story, keep it as a continuous narrative block, not interrupted by the other speaker's interjections
- The host/guest dynamic is part of the content — preserve moments where one speaker's question shapes the direction
Structural pattern for a monologue speech article:
# Title (Speaker Name: Speech Topic)
## — Subtitle (Event context, date)
## Opening remarks / context-setting
## Section 1: [Topic One]
### Sub-section
### Sub-section
## Section 2: [Topic Two]
...
Structural pattern for a dialogue/interview article:\n\n# Title (Topic between Speaker A & Speaker B)\n## — Podcast/Event name, episode number\n\n## Section 1: [Opening — context, trigger]\n**Host:** ... \n**Guest:** ...\n\n## Section 2: [First key topic]\n...\n
Structural pattern for a narrative/storytelling article:
When the content is a personal narrative ("我今天讲一个经历"), the structure follows the story's chronology, not thematic topics. Common for livestream stories, vlogs, and 讲述类 content:
- The core narrative IS the structure — don't force thematic categories
- Break at natural story beats: setup → encounter → discovery → emotion → reflection
- Keep the storyteller's voice and pacing — don't over-edit for conciseness
- Use quote blocks for key emotional moments or the storyteller's direct reflections
- The insights section becomes: why this story resonates, what it reveals, how it's told
- Example: 户晨风 "南京街头随机一千元" (15 min narrative) — structured as: 缘起 → 相遇 → 聊天 → 超市 → 梦想 → 镜头后
# Title (Speaker Name: Speech Topic)
## — Subtitle (Event context, date)
## Opening remarks / context-setting
## Section 1: [Topic One]
### Sub-section
### Sub-section
## Section 2: [Topic Two]
...
## Q&A section (if applicable)
## Closing
Step 4: Add critical analysis and fact-checking (deliverable requirement)
The user specifically asked for "批判性思考" and "针对相关事实/观点进行验证" (verify relevant facts/claims). This must be included as a separate section in the final PDF.
Fact-checking section structure:
## Fact-Check Appendix
For each key factual claim:
- **Claim** (summarized from speech)
- **Verification** (what did you check, what source/authority did you use)
- **Verdict**: ✅ Confirmed / ⚠️ Partially accurate / ❌ Refuted
Types of claims to verify:
- Historical facts — dates, events, causal claims about history
- Statistical claims — numbers, percentages, economic data
- Attributions — "X said Y" — did X actually say Y?
- Causal claims — "A caused B" — is there evidence for this?
- Comparative claims — "X is bigger than Y" — is this accurate?
Critical analysis section:
## Independent Insights
1. **What the speaker does well** — frameworks, arguments that hold up
2. **What's oversimplified** — where the narrative glosses over complexity
3. **What's missing** — important counterarguments or omitted context
4. **Who benefits from this framing** — whose perspective is centered?
5. **Tension points** — where internal logic conflicts
Step 5: PDF export
Delegate to chinese-pdf-report for the final PDF generation. Specifically:
- Write the corrected article as structured Markdown
- Convert Markdown to a self-contained HTML file with inline CSS
- Use the validated CSS spec from
chinese-pdf-report (font stack: PingFang SC → Hiragino Sans GB, color palette, grid layout for fact-check cards)
- Export via Chrome headless with the
--no-pdf-header-footer flag and clean-ASCII temp-path workaround
- Run QA checklist:
Real-world error catalog
Chinese ASR transcript errors
The following errors were observed in a real 3757-line Chinese speech transcript (Li Lu lecture on value investing, ~2 hours):
| Error Type | Count | Example | Fix |
|---|
| Person names garbled | 12+ | 孟格尔→芒格, 比阿迪→比亚迪, 李鲁→李录 | Cross-reference with known persons |
| Place names garbled | 6+ | 密尼索达→明尼苏达, 维尼斯→威尼斯 | Known geography check |
| Historical dates wrong | 3+ | 11188年→1688年 | Known history check |
| Technical terms garbled | 15+ | 累尽→复利, 安全编辑→安全边际 | Domain knowledge check |
| English loanwords garbled | 8+ | Fashion Guide→Fishing Guide, Murder of Equals→Merger of Equals | Context + English knowledge check |
| Homophone substitutions | 10+ | 制泄→致谢, 苦惊中外→古今中外 | Read aloud test |
Chinese dialect (东北话) — extreme case
Observed in 花哥 "开皮爱国赛道背后丑态" (25 min, 东北二人转 style, Whisper tiny):
| Error Type | Example | Fix Strategy |
|---|
| Function words garbled | 啥的 → 傻的, 俩 → 了, 咋 → 怎么 | Read in dialect context; the ASR conflates similar-sounding particles |
| Negation confusion | 不 → 没, 别 → 不要 | Negation particles are especially fragile in non-standard Mandarin |
| Prosody-based errors | Rising intonation transcribed as questions that weren't questions | Check against the speaker's known rhetorical patterns |
| Name errors doubled | 沙格 (someone called "Sage") + 司马南 (Sima Nan) both garbled | Cross-reference with internet search |
The fix rate for dialect content is ~2-3× higher than standard Mandarin ASR. Budget accordingly.
Bilingual source transcript (Chinese audio + English subs)
Observed in 不明白播客 EP-209 with Xu Chenggang (62 min):
The YouTube page had both zh-CN auto-captions (Chinese ASR) and en auto-captions (translated). The Chinese VTT was significantly shorter (16K chars vs 52K for English). Strategy used:
- Downloaded both zh-CN and en VTT files
- The zh-CN captured original speaker phrasing but was fragmented/abbreviated
- The en VTT was more complete (had all the speaker's words) but was machine-translated
- Worked from the English VTT as primary source for completeness
- Cross-referenced with zh-CN for original Chinese phrasing of key terms
- Result: a polished English article that preserved the speaker's meaning and the Chinese flavor of the original dialogue
A separate class of errors observed when processing an English YouTube interview (Jordan Peterson on The Diary Of A CEO, 64 min, 3,170 raw VTT cues → 92 paragraphs):
| Issue Type | Detail | Fix |
|---|
| VTT redundancy | YouTube captions emit each cue 3-4× (incremental build), causing 3,170 raw cues for 64 min | Write Python dedup script: longest text per cue → sequential merge → suffix-prefix overlap resolution |
| Naturalness in translation | Direct translation of English idioms ("happy is elevator music", "tectonic") sounds flat in Chinese | Adapt to Chinese register — use natural analogies, not literal translations |
| Cultural references | "Hank Williams", "Cochrane review", "YouGov/IPSOS" — mean nothing to Chinese readers | Keep name but add brief context: "美国50年代的蓝调歌手" |
| Political sensitivity | Vaccine mandates, mask efficacy, "totalitarian" reactions — these are flagged topics in Chinese internet | Present as the speaker's viewpoint with explicit fact-check cards, not as established fact |
| Fact-check source availability | Peterson cites "50% of Democrats believe 50% COVID hospitalization" — US-specific polling | Note that follow-up queries on Chinese equivalents would need separate research |
Output standard
Deliver:
- A readable Chinese PDF with no garbling, no blank pages, no path leaks
- Source Markdown of the polished article (for reference/revision)
- Filename format:
Speaker_Topic_Article_YYYYMMDD.pdf (Chinese characters preferred for user-facing files)
- Fact-checking table and critical insights as a distinct section