Echo Loop 跟读AI评测是如何工作的离线ASR、LCS对齐与词形还原评分全链路拆解【免费下载链接】Echo-LoopEcho Loop 是一款科学、高效的 AI 英语听说训练 App通过精听、跟读、盲听、复述和间隔复习自动驱动学习者把每一段音频真正练懂、练熟、练到会说。项目地址: https://gitcode.com/echo-loop/Echo-LoopEcho Loop是一款 AI 英语听说训练 App通过精听、跟读、盲听、复述和间隔复习帮你把音频练懂、练熟、练到会说。本文完整拆解其中最硬核的一环跟读Shadowing阶段的 AI 评测链路——从你按下停止录音到屏幕上打出匹配分数、把说对的词高亮出来中间经历了离线 ASR 识别sherpa-onnx Whisper、词形还原、LCS 动态规划对齐三步关键计算。全程不依赖云端识别与打分都在手机本地完成 一、评测全链路停止录音后发生了什么跟读阶段的会话由 listen_and_repeat_controller.dart 驱动它负责播放原句、管理录音状态机并在你停止录音后把音频送入评测流程。整条链路可以概括为四步录音落盘麦克风采集生成临时音频文件录音过程由 speech_recording_controller.dart 管理离线 ASR 识别本地引擎把语音转成英文文本Whisper / Moonshine 模型sherpa-onnx 推理文本对齐对识别文本和原句做分词、词形还原再用 LCS 算法找出共同词序评分与高亮按「命中词数 ÷ 目标词数」算出 0~1 的分数并生成高亮片段渲染到界面。下面逐层拆解。二、第一步离线 ASR 识别sherpa-onnx Whisper为什么选离线识别跟读评测对时延和隐私都很敏感每次录音都要即时打分且不想把朗读音频上传到云端。Echo Loop 选择sherpa-onnx这个跨平台 ONNX 推理库把 Whisper 系列模型int8 量化版直接跑在手机 CPU 上。模型目录维护在 asr_model_catalog.dart 中提供三档英文模型可选模型体积特点whisper-tiny-en-int8~62 MB最快适合入门体验whisper-base-en-int8~95 MB速度与精度的平衡点whisper-small-en-int8~228 MB精度最高此外还有一个共享的 Silero VAD 语音活动检测模型~0.5 MB用于识别前自动裁掉静音段。所有模型带 SHA256 校验下载与安装由 ASR 专属归档安装器负责入口 Provider 定义在 asr_engine_provider.dart。后台 Isolate 推理不卡界面核心实现在 sherpa_onnx_engine.dart。引擎初始化时会在一个**常驻后台 IsolateWorker 隔离区**里加载 Recognizer主线程只通过消息传递SendPort/ReceivePort发送转录请求并等待结果推理全程不阻塞 UI 线程 转录时的实际流程见 sherpa_onnx_engine.dart#L558-L684VAD 裁静音用 Silero VAD 以 16kHz 采样率扫描音频只在静音 ≥ 0.8 秒处切段短停顿不会被切碎合并小段相邻语音段累积合并为 ≤ 30 秒的 chunkWhisper 的硬上限减少模型调用次数逐段解码每个 chunk 送入 Whisper 推理最后拼接各段文本作为最终转录结果崩溃防护进入 native 推理前先写一个 pending 文件若进程在推理中被杀native abort下次启动可据此定位「崩在 ASR 推理」。引擎的统一接口定义在 offline_asr_engine.dartAsrModelConfig还会根据设备 CPU 核心数自动推荐推理线程数8 核以上用 6 线程其余 2~4 线程不占满 CPU给界面留余量。三、第二步分词、小写化与词形还原Lemmatization拿到识别文本后直接逐词对比会误伤——你读的是 Iwentto the park而 ASR 可能输出 Iwentto parks大小写、单复数、时态差异都会让朴素比对失准。比对逻辑集中在 speech_practice_matcher.dart每个词会经过三层归一化只保留英文词用正则[A-Za-z](?:[A-Za-z])?提取单词标点、数字、中文全部忽略全部小写消除大小写差异词形还原Lemmatize调用lemmatizerx包把词还原到词根形态例如 went → go、running → run、studied → study。这样时态、单复数、动词形态的差异就不会扣分了。 词形还原是这套评分「宽松但可信」的关键它惩罚的是真正说错的词而不是语法变体。四、第三步LCS 对齐与评分归一化之后就是核心的LCS最长公共子序列Longest Common Subsequence计算实现见 speech_practice_matcher.dart#L127-L172。LCS 在这里解决什么问题不是要求识别文本与原句逐字相同而是找出两条序列中保持原始词序的最长公共词子序列用户多说的、少说的、语序小调整的词会被自然跳过只统计真正命中且词序一致的目标词算法用经典的动态规划填表原文词数 × 识别词数的二维表再回溯得到每一对命中的索引。分数怎么算evaluate()方法speech_practice_matcher.dart#L46-L98的判定规则非常直白分数 命中的目标词数 ÷ 原句总词数范围 0~1分数 ≥ 0.5状态为passed通过✅分数 0.5状态为belowThreshold低于阈值提示再练一遍未识别到任何英文状态为noEnglishDetected提示检查麦克风或重新朗读。这套状态机定义在 speech_practice_models.dart 中。评分完成后SpeechMatchResult还会携带两组高亮片段transcriptSegments/referenceSegments把命中的词和未命中的词按原文位置切分界面就能把你的朗读文本和原句逐词标色——说对了高亮漏掉/说错的留白一眼看出差距。五、彩蛋LCS 结果还驱动了「自动停止录音」同一套 LCS 匹配结果在录音过程中还有第二个用途——判断你是否已经读完从而自动停止录音。speech_completion_detector.dart 实现了 5 条规则取最激进最短等待的一条规则逻辑效果A 尾部连续匹配原句结尾有连续词被命中且该片段唯一大概率已读完 → 1 秒后停B 全句匹配率100% → 1s≥95% → 2s≥90% → 3s匹配越高停得越快C 末尾词命中数原句最后 5 词命中 5/4/3/2/≤1 个对应 1/2/3/4/5 秒D 剩余词数估算定位当前进度按剩余词数估算等待说得越多停得越快E 近完成匹配率 ≥90% 且末尾 5 词命中 ≥4高置信快速收尾规则全部未触发时还有基于「有声时长 ÷ 原句时长 × 语速补偿系数」的动态兜底speech_completion_detector.dart#L394-L413说得多的人不会被固定的长等待卡住。这套机制不只服务于跟读——复述Retell功能也复用同一个SpeechTranscriptMatcher做段落级评测见 retell_recording_controller_provider.dart。六、源码路径速查想深入阅读的读者可以从这几个文件切入离线 ASR 引擎实现lib/services/asr/sherpa_onnx_engine.dartASR 统一接口与模型配置lib/services/asr/offline_asr_engine.dart模型目录CDN 路径/校验和lib/services/asr/asr_model_catalog.dart文本比对器分词/词形还原/LCS/评分lib/services/speech_practice_matcher.dart自动停止检测规则lib/services/speech_completion_detector.dart评测数据模型lib/models/speech_practice_models.dart跟读会话控制器lib/providers/listen_and_repeat/listen_and_repeat_controller.dart相关单元测试test/ 目录下搜索speech_practice_matcher与speech_completion_detector即可找到对应测试用例七、小结Echo Loop 的跟读 AI 评测本质是一条完全本地化的评分流水线sherpa-onnx 让 Whisper 模型在手机上离线跑起来词形还原抹掉语法变体的噪音LCS 动态规划保留词序地衡量「你真正说对了多少」最后以 50% 覆盖率作为通过线并用逐词高亮告诉你差在哪里。没有云端依赖、没有黑盒打分——每一步规则都写在源码里欢迎对照阅读 【免费下载链接】Echo-LoopEcho Loop 是一款科学、高效的 AI 英语听说训练 App通过精听、跟读、盲听、复述和间隔复习自动驱动学习者把每一段音频真正练懂、练熟、练到会说。项目地址: https://gitcode.com/echo-loop/Echo-Loop创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
GD库实现webp转换jpg的PHP程序 PHP程序来执行webp格式转换成jpg格式有几种方法:一是安装imagemagick实现,二是安装GD库实现,可以直接用dwebp命令。本文我们将介绍使用PHP的图像处理库GD,编写一个简单的PHP程序来完成这个任务。首先,确保你的PHP环境已… · 2026/9/26 22:41:16
各类网站排名揭秘:别被拖工期坑了,源码下载权在手 各类网站排名揭秘:别被拖工期坑了,源码下载权在手 改个按钮颜色建站公司拖一周?这种憋屈事,我前年还在福州软件园附近的小公司干过,真不是段子。当时客户就改个首页Banner的跳转链接,技术主管说“架构要评估”,结果拖了整整七天,最后发现是后台… · 2026/9/26 22:41:16
7B专用事实核查器击败30B通用评审员:RAG知识库防误删实战 你有没有遇到过这种情况:系统明明从知识库里检索到了正确答案,生成了一段有理有据的回复,却被审核环节判成“事实错误”,还反过来被改写成一句正确但毫无价值的废话。我遇到过,而且不止一次。我们团队原本在生产环境用… · 2026/9/26 23:23:02
自托管 LLM 实战:从硬件选型到软件开发流程接入 过去大半年,我几乎每周都会被朋友问到同一个问题:你们做软件开发辅助的那套 LLM,到底跑在哪?问的人多数已经在用 ChatGPT 或各类代码助手的订阅版,但一听到我们把十几个模型部署在自己服务器上,第一反应都是… · 2026/9/26 23:23:02
告别模板站,用免费工具搞定网站建设提案的5个进阶技巧 告别模板站,用免费工具搞定网站建设提案的5个进阶技巧 还在被客户吐槽“你们做的网站跟模板站一样丑”?这种痛,做建站的老鸟都懂。很多时候,客户想要的不是多花几万块买定制设计,而是一个能讲清楚业务逻辑、视觉有质感、加载还够快的专业方案。这时候,… · 2026/9/26 23:23:02
Codex CLI智能体实战:终端级OpenAI兼容协议与状态机设计 1. 项目概述:这不是一个“CLI工具教程”,而是一次智能体编程的底层实践重构OpenAI Codex CLI 智能体编程实战指南(十二)——这个标题里藏着三个被严重低估的关键信号:Codex不是API调用封装,它是代码生成模型… · 2026/9/26 23:23:02
专科生毕业论文AI工具实测:9款免费软件推荐与避坑指南 写专科毕业论文那会儿,我算是把AI工具折腾了个遍。从选题、开题报告到初稿、降重,再到最后被导师批“不像你自己写的”,踩过的坑比写出来的字还多。最近总有人问“学长,现在AI工具这么多,到底哪个适合专科生用”&#… · 2026/9/26 23:23:02
RikkaHub配置API Key全攻略:解决401 Unauthorized与密钥管理难题 你可能碰到过这样的场景:模型列表已经加载出来了,RikkaHub 控制台也能正常登录,可真的发一条对话请求时,却总是被401 Unauthorized或者incorrect api key provided怼回来。我最近完整地把 RikkaHub 配置 API Key 的流程走了一遍&a… · 2026/9/26 23:22:56
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46