From 457e382b1a04e57910959e6de15090d378c517a8 Mon Sep 17 00:00:00 2001 From: zhifu gao Date: Wed, 9 Sep 2026 20:50:42 +0000 Subject: [PATCH] docs(blog): explain continual fine-tuning acceptance with a synthetic example Signed-off-by: zhifu gao --- .../product-site/content/legacy-manifest.json | 3 + web-pages/product-site/data/blog.json | 13 ++++ .../data/continual-eval-example.json | 46 ++++++++++++ .../sensevoice-finetuning-acceptance.html | 51 ++++++++++++++ .../sensevoice-finetuning-acceptance.html | 51 ++++++++++++++ .../legacy/img/continual-eval-example.png | Bin 0 -> 81623 bytes .../scripts/render_continual_eval_figure.py | 36 ++++++++++ .../tests/browser/blog-editorial.spec.ts | 2 +- .../browser/continual-eval-article.spec.ts | 38 ++++++++++ .../tests/test_continual_eval_article.py | 66 ++++++++++++++++++ 10 files changed, 305 insertions(+), 1 deletion(-) create mode 100644 web-pages/product-site/data/continual-eval-example.json create mode 100644 web-pages/product-site/legacy/blog/sensevoice-finetuning-acceptance.html create mode 100644 web-pages/product-site/legacy/en/blog/sensevoice-finetuning-acceptance.html create mode 100644 web-pages/product-site/legacy/img/continual-eval-example.png create mode 100644 web-pages/product-site/scripts/render_continual_eval_figure.py create mode 100644 web-pages/product-site/tests/browser/continual-eval-article.spec.ts create mode 100644 web-pages/product-site/tests/test_continual_eval_article.py diff --git a/web-pages/product-site/content/legacy-manifest.json b/web-pages/product-site/content/legacy-manifest.json index 1c59b5497..030b3a13f 100644 --- a/web-pages/product-site/content/legacy-manifest.json +++ b/web-pages/product-site/content/legacy-manifest.json @@ -3,6 +3,9 @@ "source": "https://www.funasr.com/ public static corpus", "captured": "2026-07-26", "files": { + "blog/sensevoice-finetuning-acceptance.html": "df48083c643321de767b17f9055bd28e26552974e6fb97c834ba3680b8ff0612", + "en/blog/sensevoice-finetuning-acceptance.html": "a45590971d7b41fb126b59053fa4bf25b7a9882d8d9b4a73c7ed982b2fb01f62", + "img/continual-eval-example.png": "20b7a0de64fdd08ea761d67a7ccd7ce9a421f3669d9a212b176124630cc0f259", "blog/fun-asr-nano-transformers.html": "139401dd9790362bb7c8d935eb1241f51af67ae6135e5c268699f64707941719", "en/blog/fun-asr-nano-transformers.html": "0cb7a1cab4210a29622b17154b3ad59b0f2d6be67829ef12060f5d5780738c8f", "img/fun-asr-nano-native-waveform.png": "930517464ffb47bc7f9051dbdcb5422e1b3daa5c6abaa455a8bf072359ae0f0b", diff --git a/web-pages/product-site/data/blog.json b/web-pages/product-site/data/blog.json index cd29becd0..86d79e3e6 100644 --- a/web-pages/product-site/data/blog.json +++ b/web-pages/product-site/data/blog.json @@ -9,6 +9,19 @@ ], "lead_image": "/img/funclip-v2-1-0-interface.jpg", "articles": [ + { + "slug": "sensevoice-finetuning-acceptance", + "category": "explanations", + "reviewed": true, + "zh": { + "title": "微调后,怎样确认模型真的更好?", + "summary": "从一次持续学习反馈出发,先验证评测尺子,再选择 checkpoint,最后检查真实服务。" + }, + "en": { + "title": "Did fine-tuning actually make your model better?", + "summary": "Validate the ruler, choose a checkpoint under old-domain constraints, then test the real service." + } + }, { "slug": "cantonese-speech-recognition", "category": "applications", diff --git a/web-pages/product-site/data/continual-eval-example.json b/web-pages/product-site/data/continual-eval-example.json new file mode 100644 index 000000000..57c744c3d --- /dev/null +++ b/web-pages/product-site/data/continual-eval-example.json @@ -0,0 +1,46 @@ +{ + "synthetic": true, + "old_domain_limit_pp": 1, + "slices": [ + { + "label": "Mandarin / read", + "old_domain": true, + "reference_characters": 1000, + "baseline_errors": 60, + "a_errors": 50, + "b_errors": 60 + }, + { + "label": "Mandarin / spontaneous", + "old_domain": true, + "reference_characters": 1000, + "baseline_errors": 80, + "a_errors": 80, + "b_errors": 85 + }, + { + "label": "Cantonese / read", + "old_domain": true, + "reference_characters": 1000, + "baseline_errors": 90, + "a_errors": 90, + "b_errors": 95 + }, + { + "label": "Cantonese / spontaneous", + "old_domain": true, + "reference_characters": 1000, + "baseline_errors": 120, + "a_errors": 180, + "b_errors": 125 + }, + { + "label": "New dialect", + "old_domain": false, + "reference_characters": 1000, + "baseline_errors": 600, + "a_errors": 220, + "b_errors": 280 + } + ] +} diff --git a/web-pages/product-site/legacy/blog/sensevoice-finetuning-acceptance.html b/web-pages/product-site/legacy/blog/sensevoice-finetuning-acceptance.html new file mode 100644 index 000000000..acabfafa9 --- /dev/null +++ b/web-pages/product-site/legacy/blog/sensevoice-finetuning-acceptance.html @@ -0,0 +1,51 @@ + + + +微调后,怎样确认模型真的更好? | FunASR + + + + + + + + +
+

微调后,怎样确认模型真的更好?

+

2026-09-10 · 技术解读 · 阅读约 6 分钟

+

你让模型学会了新方言,却发现原来能听懂的普通话变差了。训练曲线在下降,文件名也叫 best,为什么仍不能放心上线?要回答的不是“训得顺不顺”,而是“用同一把可信的尺子,业务有没有变好”。

+

下面用一个合成案例说明:A 的整体 CER 为 12.4%,B 为 12.9%,但 A 在粤语自发口语上退化了 6 个百分点。所有数字都是教学构造,没有运行声学训练,也不是 SenseVoice 的测量结果。

+

最低 loss、最低整体 CER 和可上线是三个不同结论。通过本文的例子不等于真实模型通过验收;旧域退化阈值必须由你的业务提前决定。

+

第一步:先确认尺子,再比较模型

+

一次 SenseVoice 持续微调反馈中,开发者主动撤回了早期的新方言 CER:参考文本和训练标签来自同一套未经独立核验的流程,连“逐字转写还是书面语意译”都没有先确认。这种错误不一定让训练报错,却会让选点依据失效。

+

先抽样回听,并写下标注规范:数字怎么写、语气词留不留、方言词如何记录、是否允许意译。训练与评估要隔离说话人,也要检查参考文本来源。把模型自己的转写再次当参考答案,并不能独立验证它。

+

区分用于调参和选点的验证集,以及最终验收时才使用的独立测试集。修改了参考文本或 CER 归一化规则,就在同一新口径下重测原模型和所有候选;不要把旧基线与新分数直接相减。若总在同一测试集上试配置,它实际上已经参与了选点。

+

第二步:不要让一个总分替你做决定

+

假设业务同时服务普通话、粤语和新方言。下面每一格都恰有 1,000 个参考字符,CER 是替换、删除、插入错误数之和除以参考字符数。这个合成例子把旧域每格的允许退化设为 最多 1 个百分点,只是演示,不是官方推荐阈值。

+ + + + + + +
验证切片原模型AB
普通话 · 朗读6%5%6%
普通话 · 自发口语8%8%8.5%
粤语 · 朗读9%9%9.5%
粤语 · 自发口语12%18%12.5%
新方言60%22%28%
+
合成例子中 A 的粤语自发口语 CER 增加 6 个百分点,B 的旧域最差增加 0.5 个百分点
合成验证数据的旧域变化,不是训练曲线或实测 benchmark。虚线为这个例子自定的 1 个百分点门槛。
+

按总错误数除以总参考字符数计算,原模型、A、B 分别为 19%、12.4%、12.9%。A 的整体和新方言分数都更好,却违反旧域约束;B 只获得进入独立测试与服务验收的资格,不是自动获准上线。真实切片大小不同时,不能直接平均各格百分比;同时报告每格样本量,避免大集合掩盖小语种。

+

也不要混淆单位:CER 从 12% 到 18% 是增加 6 个百分点,相对增加 50%。如果原基线为零,相对退化没有定义。少量样本上的小差异也可能只是波动,需要更多独立说话人和误例回听,不能把小数位当成可靠性的证明。

+

第三步:认清 best,再验证真正的出口

+

FunASR #3677修复了选点指标缺失被当作零的路径,已包含在 1.4.15。维护中的 SenseVoice 微调脚本明确按总验证 loss 排名;acc_rich 不等于 ASR 准确率或 CER。因此 model.pt.best 的“best”只对应所配置的有效指标,不能代替上面的业务约束。

+

更换排名指标要用新输出目录。升级软件不会恢复已删掉的 checkpoint,也不能自动纠正历史虚假零值排名。对仍保留的候选重新评估;平均权重也应作为一个新的候选复测,而不是默认优于参与平均的模型。

+

最后用固定音频穿过模型输出 → 导出或服务端 → 客户端。新增语言 tag 后,模型可能正确输出,下游旧白名单却把结果丢掉。保留各层原始结果,核对 tokenizer、模型映射和解析约定;不要为得到非空文本而关掉所有校验,也不要把词表中已有的 token 当作可随意复用的空闲槽位。

+

留下一份可回滚的验收记录:基线与候选权重散列、数据与标注规范版本、归一化规则、每格结果、固定请求及客户端输出。样本须有合法使用授权。先确认真实链路没有旧域回退和静默空输出,再逐步放量;这不是对灾难性遗忘或 CTC blank 偏置已经解决的承诺。

+

下一步,打开固定版本的SenseVoice 持续微调指南,先写好你的验证切片、独立测试集和接受阈值,再开始下一轮训练。

+
FunASR · 技术解读
+ diff --git a/web-pages/product-site/legacy/en/blog/sensevoice-finetuning-acceptance.html b/web-pages/product-site/legacy/en/blog/sensevoice-finetuning-acceptance.html new file mode 100644 index 000000000..ac306643f --- /dev/null +++ b/web-pages/product-site/legacy/en/blog/sensevoice-finetuning-acceptance.html @@ -0,0 +1,51 @@ + + + +Did fine-tuning actually make your model better? | FunASR + + + + + + + + +
+

Did fine-tuning actually make your model better?

+

2026-09-10 · Technical explanations · 6 min read

+

Your model now recognizes a new dialect, but the Mandarin it used to handle has become worse. The training loss is falling and the checkpoint is called best. Can you ship it? The useful question is whether the application improved under the same trustworthy evaluation rules.

+

This synthetic example makes the trade-off concrete: A has an overall CER of 12.4%, versus B at 12.9%, but A regresses by 6 percentage points on spontaneous Cantonese. Every number is invented for teaching. No acoustic training was run and these are not SenseVoice measurements.

+

Lowest loss, lowest aggregate CER and readiness to ship are different conclusions. Passing this example does not validate a real model. Your application must define acceptable old-domain regression in advance.

+

First, validate the ruler

+

In a SenseVoice continual-learning report, the developer withdrew earlier new-dialect CER results: references and training labels came from the same unverified process. Even whether the labels were verbatim transcripts or written paraphrases had not been checked. This can invalidate checkpoint selection without causing a training error.

+

Listen to a sample and record the labeling policy: number formatting, fillers, dialect words and whether paraphrasing is allowed. Separate speakers between training and evaluation, and independently check the origin of the references. Scoring a model against its own generated transcripts is not independent validation.

+

Distinguish the validation sets used for tuning and checkpoint selection from a separate test set reserved for final acceptance. If references or CER normalization change, re-evaluate the original model and every candidate under that same policy. Do not subtract an old baseline from a newly defined score. Repeatedly choosing configurations on a test set makes it part of selection.

+

Then, stop one aggregate score from making the decision

+

Suppose the application serves Mandarin, Cantonese and a new dialect. Each slice below has exactly 1,000 reference characters. CER counts substitutions, deletions and insertions, divided by reference characters. For this synthetic example only, each old-domain slice may regress by at most 1 percentage point. That limit is not an official recommendation.

+ + + + + + +
Validation sliceOriginalAB
Mandarin · read6%5%6%
Mandarin · spontaneous8%8%8.5%
Cantonese · read9%9%9.5%
Cantonese · spontaneous12%18%12.5%
New dialect60%22%28%
+
Synthetic example: A regresses 6 percentage points on spontaneous Cantonese; B's worst old-domain regression is 0.5 points
Synthetic old-domain validation changes, not training curves or a measured benchmark. The dashed line is this example's chosen 1-point limit.
+

Total errors divided by total reference characters gives 19%, 12.4% and 12.9% for the original, A and B. A wins on both aggregate and new-dialect CER, yet violates the old-domain constraint. B qualifies for independent testing and service acceptance, not automatic deployment. With unequal real slice sizes, do not simply average percentages. Report every slice and its sample size so a large population cannot hide a smaller language.

+

Keep units explicit: moving from 12% CER to 18% adds 6 percentage points, a 50% relative increase. Relative regression is undefined when the baseline is zero. Small differences on small samples may also be noise: use more independent speakers and listen to errors rather than treating decimal places as proof of reliability.

+

Finally, read best literally and test the real output path

+

FunASR #3677 fixed missing selection metrics being treated as zero; the fix is included in 1.4.15. The maintained SenseVoice recipe explicitly ranks by total validation loss. Its acc_rich is not ASR accuracy or CER. The name model.pt.best refers only to the configured, valid metric; it cannot replace application constraints.

+

Use a new output directory when changing the ranking metric. Updating software cannot restore deleted checkpoints or automatically repair historical artificial-zero rankings. Re-evaluate candidates that remain. Averaged weights are another candidate to test, not an assumed improvement over every source checkpoint.

+

Run fixed audio through model output → exported runtime or server → client. After adding a language tag, the model may return valid text while an old downstream allowlist discards it. Preserve intermediate outputs and check the tokenizer, model mapping and parsing contract. Do not disable all validation merely to obtain nonempty text, or assume an existing vocabulary token is an unused slot that can be repurposed freely.

+

Keep a rollback-ready acceptance record: original and candidate weight hashes, data and annotation-policy versions, normalization rules, per-slice results, the fixed request and final client output. Use only appropriately authorized data. Check old-domain retention and silent empty-output failures in the real path before a gradual rollout. None of this claims that catastrophic forgetting or CTC blank bias has been solved.

+

Next, open the version-pinned SenseVoice continual fine-tuning guide. Write down your validation slices, separate test set and acceptance limits before starting the next training run.

+
FunASR · Technical explanations
+ diff --git a/web-pages/product-site/legacy/img/continual-eval-example.png b/web-pages/product-site/legacy/img/continual-eval-example.png new file mode 100644 index 0000000000000000000000000000000000000000..7a76a1350f184f8288a16f4177c241de3a6fae76 GIT binary patch literal 81623 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 { + const errors: string[] = []; + page.on('pageerror', error => errors.push(String(error))); + await page.setViewportSize({ width, height: 1000 }); + await page.goto(`/${prefix}blog/explanations/`); + await page.locator(`a[data-blog-story][href="/${prefix}blog/sensevoice-finetuning-acceptance.html"]`).click(); + const article = page.locator('article'); + await expect(article.locator('h1')).toBeVisible(); + await expect(article.locator('tbody tr')).toHaveCount(5); + const tableFits = await article.locator('table').evaluate((table) => { + const bounds = table.getBoundingClientRect(); + const container = table.parentElement!.getBoundingClientRect(); + return bounds.left >= container.left - 1 && bounds.right <= container.right + 1 + && table.scrollWidth <= table.clientWidth + 1; + }); + expect(tableFits, 'Every comparison column must fit without horizontal scrolling').toBeTruthy(); + await expect(article.locator('[data-editorial="boundary"]')).toBeVisible(); + await page.screenshot({ path: testInfo.outputPath('opening.png') }); + await article.locator('figure').scrollIntoViewIfNeeded(); + const image = await article.locator('figure img').evaluate((img: HTMLImageElement) => ({ + width: img.naturalWidth, loaded: img.complete, + })); + expect(image.loaded).toBeTruthy(); + expect(image.width).toBeGreaterThan(1000); + expect(await page.evaluate(() => document.documentElement.scrollWidth - innerWidth)).toBeLessThanOrEqual(1); + await page.screenshot({ path: testInfo.outputPath('example.png') }); + await expect(article.locator('[data-editorial="next-step"] a')).toHaveAttribute('href', /\/blob\/v1\.4\.15\//); + const peer = prefix ? '' : 'en/'; + await page.locator(`.header-actions a[href="/${peer}blog/sensevoice-finetuning-acceptance.html"]`).click(); + await expect(page).toHaveURL(new RegExp(`/${peer}blog/sensevoice-finetuning-acceptance\\.html$`)); + expect(errors).toEqual([]); + }); + } +} diff --git a/web-pages/product-site/tests/test_continual_eval_article.py b/web-pages/product-site/tests/test_continual_eval_article.py new file mode 100644 index 000000000..bb7e89959 --- /dev/null +++ b/web-pages/product-site/tests/test_continual_eval_article.py @@ -0,0 +1,66 @@ +"""The continual-learning story separates examples from measured evidence.""" + +import json +from pathlib import Path +import sys + +from bs4 import BeautifulSoup +import pytest + +SITE = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(SITE)) +from build import build + +SLUG = "sensevoice-finetuning-acceptance" + + +@pytest.fixture(scope="module", params=["source", "built"]) +def root(request, tmp_path_factory): + if request.param == "source": + return SITE / "legacy" + output = tmp_path_factory.mktemp("continual-story") + build(output) + return output + + +@pytest.mark.parametrize("prefix", ["", "en/"]) +def test_article_has_a_reader_path_and_honest_example(root, prefix): + soup = BeautifulSoup((root / prefix / "blog" / f"{SLUG}.html").read_text(), "html.parser") + article = soup.select_one("article") + assert len(article.select("h1")) == 1 + assert article.select_one('[data-editorial="opening"]') + example = article.select_one('[data-editorial="example"]').get_text() + assert "synthetic" in example.lower() or "合成" in example + boundary = article.select_one('[data-editorial="boundary"]').get_text() + assert "not" in boundary.lower() or "不等于" in boundary + assert len(article.select('[data-editorial="next-step"] a')) == 1 + assert article.select_one('a[href*="issues/3388#issuecomment-5578763142"]') + assert article.select_one('a[href*="/blob/v1.4.15/examples/industrial_data_pretraining/sense_voice/CONTINUAL_FINETUNING"]') + assert article.select_one('a[href*="/pull/3677"]') + assert len(article.select("pre")) == 0, "Link the maintained recipe; do not duplicate it" + assert len(article.select("tbody tr")) == 5 + image = article.select_one("figure img") + assert image.get("alt") and (root / image["src"].lstrip("/")).is_file() + assert article.select_one("figure figcaption") + assert soup.select_one('link[rel="canonical"]')["href"] == f"https://www.funasr.com/{prefix}blog/{SLUG}.html" + metadata = json.loads(soup.select_one('script[type="application/ld+json"]').get_text()) + assert metadata["datePublished"] == "2026-09-10" + assert metadata["headline"] == article.h1.get_text() + + +def test_synthetic_counts_support_the_decision_not_a_benchmark(): + data = json.loads((SITE / "data/continual-eval-example.json").read_text()) + assert data["synthetic"] is True and data["old_domain_limit_pp"] == 1 + rows = data["slices"] + assert len(rows) == 5 and all(row["reference_characters"] == 1000 for row in rows) + assert [sum(row[name] for row in rows) / 50 for name in ("baseline_errors", "a_errors", "b_errors")] == [19, 12.4, 12.9] + old = [row for row in rows if row["old_domain"]] + assert max((r["a_errors"] - r["baseline_errors"]) / 10 for r in old) == 6 + assert max((r["b_errors"] - r["baseline_errors"]) / 10 for r in old) == 0.5 + + +def test_story_is_discoverable_without_expanding_homepage(): + data = json.loads((SITE / "data/blog.json").read_text()) + row = next(entry for entry in data["articles"] if entry["slug"] == SLUG) + assert row["reviewed"] and row["category"] == "explanations" + assert len(data["selected"]) == 4 and SLUG not in data["selected"]