news 2026/10/26 9:17:29

中文语音识别完整工程:PyTorch实现ASR训练-推理-评估闭环

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
中文语音识别完整工程:PyTorch实现ASR训练-推理-评估闭环

简介:这是一套面向Python开发者与语音技术学习者的中文语音识别实战源码,聚焦深度学习在ASR领域的落地实现,适用于智能助手、语音控制系统等中文语音交互场景。资源共47个文件,含24个核心Python脚本(涵盖数据加载、声学模型SpeechModel25/26系列、语言模型LanguageModel、服务端asrserver及客户端testClient等)、14个文本类文件(含训练/测试语料标注txt、音节字典、语言模型词典等)、3个Markdown文档(含中英文README与开发日志)、3个列表文件(wav/syllable路径索引)以及YAML配置、Git忽略和MIT许可证文件,整体压缩包23.63MB。已有291人学习下载。读者可直接复现端到端中文语音识别流程:从ST-CMDS/THCHS-30等公开语料预处理、多版本CNN/RNN声学模型训练,到语言模型融合与服务部署,目录结构模块清晰,代码注释充分,配套文档完整,是深入理解中文ASR系统设计与工程实践的优质参考。

1. 这不是又一个“语音识别 demo”:它是一套能跑通中文日常语料、带完整训练-推理-评估闭环的 PyTorch 工程源码,专为想动手复现 ASR 流程但被 Kaldi/ESPnet 劝退的 Python 工程师准备

你试过用 Hugging Face 的 Whisper 模型做中文识别——结果发现它对带口音的普通话、带背景音乐的会议录音、甚至自己手机录的方言混杂语音,WER(词错误率)直接飙到 40% 以上?你也下载过 GitHub 上标着 “Chinese ASR” 的项目,解压后发现只有 3 行训练脚本、没数据加载器、没声学特征预处理说明、README 里写着 “需自行准备 LibriSpeech 中文版”——而你根本找不到这个“不存在”的数据集?这套「基于深度学习的中文语音识别系统设计源码」不是玩具级 notebook,它是一份从 raw wav 到文本输出、全程可调试、参数可调、模块可替换的完整工程:含预处理 pipeline(支持 wav / flac / mp3 输入,自动重采样+静音裁剪+梅尔频谱提取),双流 CNN-BiLSTM-CTC 架构实现(非简单堆叠,含时序归一化层与梯度裁剪策略),支持中文字符级与拼音级两种标签空间,内置 AISHELL-1 + 自建 5 小时办公场景录音(含会议、电话、语音备忘录)的混合训练配置,以及一套不依赖第三方服务的本地评估脚本(计算 CER/WER 并生成对齐热力图)。适合正在做语音交互产品原型、需要快速验证声学模型效果、或正啃《动手深度学习》第 12 章却卡在数据加载环节的 Python 工程师——它不教你反向传播推导,但它让你今天下午就能跑通第一条训练日志。

2. 从零启动:环境准备、数据组织与核心模块加载逻辑

2.1 环境依赖与版本锁定:为什么必须用 conda 而非 pip 安装 PyTorch

这套源码在 PyTorch 1.13.1 + CUDA 11.7 环境下完成全部验证,关键点在于torchaudio的sox_io后端对中文路径和非标准采样率(如 8kHz 电话录音)的兼容性。若用 pip 安装最新版 PyTorch(2.x),torchaudio.load()在读取部分国产录音笔生成的 WAV 文件时会触发RuntimeError: Failed to open file——这不是文件损坏,而是新版 torchaudio 默认启用soundfile后端,而 soundfile 对某些 RIFF 头字段解析存在边界缺陷。

# 必须使用 conda 创建隔离环境(避免与系统级 ffmpeg 冲突) conda create -n asr-zh python=3.9 conda activate asr-zh # 严格指定版本(官网对应表确认:https://pytorch.org/get-started/locally/) conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.7 -c pytorch -c nvidia pip install numpy==1.23.5 pandas==1.5.3 tqdm==4.64.1 librosa==0.9.2

提示:librosa==0.9.2是关键。新版 librosa(1.0+)默认启用numbaJIT 编译,但在某些 CentOS 7 服务器上会因 glibc 版本过低导致ImportError: libcblas.so.3: cannot open shared object file;0.9.2 仍使用纯 Python 实现,稳定但稍慢——对预处理阶段影响可接受。

2.2 数据目录结构:AISHELL-1 不是唯一选择,但必须按 schema 组织

源码不自带任何音频数据,但强制要求你按以下结构组织(否则data_loader.py会报KeyError: 'wav_path'):

asr_data/ ├── train/ │ ├── aishell/ │ │ ├── wav/ │ │ │ └── BAC009S0002W0123.wav # 命名规则:BAC{speaker_id}S{session_id}W{utterance_id}.wav │ │ └── trans.txt # 格式:BAC009S0002W0123 王者荣耀打野要会看小地图 │ └── office/ │ ├── wav/ │ │ └── meeting_001_002.wav # 自定义命名,但必须与 trans.txt 一致 │ └── trans.txt # 格式:meeting_001_002 请把刚才说的三点记下来 ├── dev/ │ └── ... # 同 train 结构 └── test/ └── ... # 同 train 结构

核心逻辑在dataset/aishell_dataset.py的__init__方法中:它遍历train/下所有子目录,读取每个trans.txt,用正则r'^(\w+)\s+(.+)$'提取 utt_id 和文本,再拼接wav/{utt_id}.wav构建绝对路径。注意:trans.txt中文本必须为 UTF-8 无 BOM 编码,且不能含制表符(\t)——Windows 记事本另存为时默认加 BOM,会导致UnicodeDecodeError。

2.3 模型加载链:model.py里的三个不可跳过的初始化钩子

整个模型构建封装在model/asr_model.py的ASRModel类中,但真正决定能否训起来的是其__init__里的三个隐式依赖:

  1. self.feature_extractor = MelSpectrogram(...):
    参数n_fft=512, hop_length=160, n_mels=80是针对 16kHz 采样率优化的。若你的 office 数据是 8kHz,必须在config.yaml中将sample_rate改为 8000,并同步调整hop_length=80(否则频谱时间轴压缩,CTC 对齐失败)。

  2. self.encoder = CNNSubsample(...):
    这个模块不是普通 CNN,它用Conv2d(stride=(2,2))+ReLU+BatchNorm2d三连,对(batch, 1, T, F)输入做 2 层下采样,最终输出(batch, 32, T//4, F//4)。它的存在是为了缓解 RNN 的长序列梯度消失——如果你删掉它直接接 BiLSTM,训练 loss 会在第 3 个 epoch 后停滞在 2.8+。

  3. self.ctc_loss = torch.nn.CTCLoss(blank=0, zero_infinity=True):
    zero_infinity=True是救命参数。当某条样本因太短导致log_probs时间步小于 target 长度时,CTCLoss 默认返回infloss,引发NaN梯度。设为True后,这类样本 loss 被置为 0,训练继续——这是实测中 73% 的 early-stop 根源。

3. 训练全流程拆解:从 config.yaml 到 loss 曲线收敛的每一步含义

3.1 config.yaml 的 7 个必调参数:它们如何决定你的模型是过拟合还是欠拟合

config.yaml是训练的总开关,其中 7 个参数直接影响收敛行为(其余可保持默认):

参数名默认值修改建议影响原理
batch_size16GPU 显存 ≥24GB 时设为 32;否则 8批大小影响梯度噪声水平:太小(≤4)loss 波动剧烈;太大(≥64)易过拟合,尤其对小数据集
lr1e-4初始训练用 5e-4;loss 连续 3 个 epoch 不降时减半学习率过高 → loss 暴涨;过低 → 收敛慢。该模型对 lr 敏感度高于 ResNet
warmup_steps2000保持默认前 2000 步线性增大学习率,避免初始梯度爆炸(实测关闭后前 100 step loss 峰值达 12.7)
max_epochs50AISHELL-1 单机训练建议 30;加 office 数据后可设 45epoch 过多必然过拟合,dev WER 在 28~30 epoch 后开始回升
label_type"char"若需部署到嵌入式设备,改"pinyin"(标签数从 4233→1246)拼音标签空间小,收敛快,但需后处理转汉字(pypinyin库)
spec_augmenttrue办公场景数据少于 10 小时,务必设true时域掩蔽(time mask)+ 频域掩蔽(freq mask)提升泛化,实测使 dev WER 降低 2.3%
grad_clip5.0保持默认梯度裁剪阈值,超过则缩放至 5.0。未设此值时,15% 的 batch 会出现nanloss

注意:label_type: "pinyin"时,vocab.json会自动切换为pinyin_vocab.json,其中包含 1246 个拼音(含声调,如"ā": 1,"á": 2)。不要手动修改 vocab 文件——preprocess.py会根据label_type重建。

3.2 训练命令执行与日志解读:如何从train.log判断是否真在学习

运行训练命令:

python train.py --config config.yaml --exp_name aishell_office_v1

关键日志段落解读(以第 12 个 epoch 为例):

[Epoch 12] Train Loss: 1.243 | Dev WER: 24.7% | LR: 5.00e-05 | GPU Mem: 14.2GB
  • Train Loss: 1.243:CTC loss 值,理想区间 0.8~1.5。若连续 5 epoch >1.8,检查spec_augment是否开启、batch_size是否过大。
  • Dev WER: 24.7%:开发集词错误率,下降趋势比 loss 更重要。若Dev WER先降后升(如 22%→24%→26%),说明已过拟合,立即 stop。
  • LR: 5.00e-05:当前学习率,验证warmup_steps是否生效(前 2000 step 应从 1e-5 线性增至 5e-4)。
  • GPU Mem: 14.2GB:显存占用。若接近显卡上限(如 24GB 卡占 23.5GB),batch_size必须下调,否则 OOM。

训练过程会自动生成exp/aishell_office_v1/checkpoint_12.pth(模型权重)和exp/aishell_office_v1/valid_wer.txt(各 epoch WER 记录)。后者是判断收敛的黄金依据——打开它,找 WER 最低值对应的 epoch,该 checkpoint 即为最佳模型。

3.3 推理脚本infer.py的三种调用模式:从单文件到批量转录的实战差异

infer.py支持三种输入方式,对应不同生产场景:

模式 1:单文件转录(调试用)

python infer.py --model_path exp/aishell_office_v1/checkpoint_best.pth \ --audio_path data/test/office/wav/meeting_001_002.wav \ --output_path result.txt

输出result.txt内容:

meeting_001_002: 请把刚才说的三点记下来

适用场景:验证模型是否加载成功、检查音频路径是否正确。

模式 2:目录批量转录(交付用)

python infer.py --model_path exp/aishell_office_v1/checkpoint_best.pth \ --audio_dir data/test/office/wav/ \ --trans_dir data/test/office/trans.txt \ --output_dir result_batch/

--trans_dir指向参考文本文件(用于计算 WER),--output_dir生成result_batch/prediction.txt,格式:

meeting_001_002 请把刚才说的三点记下来 meeting_001_003 我再重复一遍需求 ...

适用场景:批量评估模型精度,生成与trans.txt对齐的预测结果。

模式 3:流式推理(嵌入式部署预演)

python infer.py --model_path exp/aishell_office_v1/checkpoint_best.pth \ --stream_mode True \ --chunk_size 16000 # 1 秒音频(16kHz)

程序启动后,会实时监听麦克风输入,每 1 秒切片送入模型,输出:

[0.00-1.00s] 你好 [1.00-2.00s] 今天天气不错 ...

适用场景:验证模型延迟(实测 P50 延迟 320ms)、测试流式分段能力。注意:chunk_size必须是hop_length的整数倍(默认 160),否则频谱计算出错。

4. 避坑指南:我在 3 台不同配置机器上踩过的 5 个真实血泪坑

4.1 现象:训练第 1 个 epoch 就报RuntimeError: cuDNN error: CUDNN_STATUS_NOT_SUPPORTED

原因:CUDA 版本与 PyTorch 编译版本不匹配。常见于在 Ubuntu 20.04 上用apt install cuda-toolkit安装 CUDA 11.8,但 PyTorch 1.13.1 仅支持 CUDA 11.7。cuDNN 内核检测失败,触发降级到 CPU 模式,但代码中model.cuda()强制调用 GPU,导致冲突。
解决:卸载系统级 CUDA,用 conda 安装pytorch-cuda=11.7(它自带匹配的 cuDNN)。验证命令:python -c "import torch; print(torch.version.cuda)"输出11.7。

4.2 现象:dev WER一直卡在 85% 不动,train loss却降到 0.5

原因:trans.txt中文本含全角标点(,。!?)或空格不规范。模型词汇表只含 ASCII 字符与中文汉字,遇到,(U+FF0C)会映射到<unk>,CTC 解码时大量插入空白帧,导致 WER 虚高。
解决:用preprocess/normalize_text.py脚本统一处理所有trans.txt:

import re text = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9\s]', '', text) # 删除所有非汉字、字母、数字、空格字符 text = re.sub(r'\s+', ' ', text).strip() # 合并连续空格

运行后重新生成vocab.json。

4.3 现象:infer.py报错IndexError: index 4234 is out of bounds for dimension 1 with size 4233

原因:checkpoint_best.pth保存时vocab.json有 4233 个 token,但推理时加载了另一个目录下的vocab.json(比如aishell_only/vocab.json),其 size 为 4234。PyTorch 加载权重后,self.decoder.weight形状为[4234, hidden],但vocab_size参数传入 4233,解码时索引越界。
解决:永远用--model_path所在目录的vocab.json。在infer.py开头加校验:

assert len(vocab) == model.decoder.weight.size(0), \ f"Vocab size {len(vocab)} != model output dim {model.decoder.weight.size(0)}"

4.4 现象:CPU 推理速度极慢(单条 10 秒音频耗时 45 秒)

原因:torchaudio.transforms.MelSpectrogram默认使用sox_io后端,在 CPU 模式下性能极差。
解决:强制切换为soundfile后端(需提前pip install soundfile):

import torchaudio torchaudio.set_audio_backend("soundfile") # 加在 infer.py 开头

实测提速 3.2 倍(45s → 14s)。

4.5 现象:spec_augment开启后,训练 loss 前 100 step 突然飙升到 15+

原因:spec_augment的freq_mask_param默认为 27(掩蔽 27 个 mel bin),但你的n_mels=80,掩蔽比例达 33%。对短语音(<2s),频域信息损失过大,模型无法学习有效特征。
解决:按数据长度动态设置freq_mask_param。在dataset/aishell_dataset.py的__getitem__中:

if waveform.shape[-1] < 32000: # <2s at 16kHz freq_mask_param = 15 else: freq_mask_param = 27

5. 模型诊断与精度提升:用 CER/WER 分析报告定位具体错误类型

5.1 生成细粒度错误分析报告:不只是 WER 数字,而是知道错在哪

eval.py不仅输出 WER,还生成error_analysis.html,其中关键表格:

错误类型示例占比建议动作
替换(Substitution)苹果→平安42%检查声学相似字对(píng guǒvspíng ān),在vocab.json中增加同音词权重
删除(Deletion)我想吃→我想28%检查静音裁剪阈值(silence_thresholdinconfig.yaml),调高至 0.02(默认 0.01)避免切掉弱辅音
插入(Insertion)今天→今天啊19%检查 CTC blank token 解码策略,启用ctc_beam_search(见 5.2)替代贪心解码
合并(Merge)微信支付→微支付11%增加ngram语言模型(kenlm),在decoder.py中集成

生成命令:

python eval.py --model_path exp/aishell_office_v1/checkpoint_best.pth \ --test_dir data/test/ \ --output_dir report_v1/

报告位于report_v1/error_analysis.html,点击任意错误行可查看原始音频波形与对齐热力图(mel-spectrogram 上叠加 CTC 发射概率)。

5.2 用 Beam Search 替代 Greedy 解码:让 WER 降低 3.7% 的实操步骤

默认infer.py使用贪心解码(每帧选最高概率 token),但 CTC 的条件独立假设导致局部最优≠全局最优。启用 beam search 需两步:

Step 1:安装ctc-decoder(非 Hugging Face 的transformers版本)

pip install ctc-decoder==0.1.0 # 注意:必须 0.1.0,新版 API 不兼容

Step 2:修改decoder.py的decode_ctc函数

from ctc_decoder import ctc_decoder def decode_ctc(self, log_probs, beam_width=10): # log_probs: (T, V) where V = vocab_size decoder = ctc_decoder( vocab_list=list(self.vocab.keys()), # ['<blank>', '的', '是', ...] blank_id=0, beam_width=beam_width, log_probs_input=True ) # 返回 top-k 结果,取第 0 个(best) return decoder.decode(log_probs.cpu().numpy())[0]

然后在infer.py中调用decode_ctc(log_probs, beam_width=10)。实测在 AISHELL-1 dev 上,WER 从 24.7% → 21.0%,代价是单条音频推理时间从 120ms 增至 310ms。

5.3 中文标点恢复:为什么模型输出全是“今天天气不错”而你需要“今天天气不错。”

模型训练时trans.txt通常不含标点(ASR 任务惯例),但实际应用需补标点。源码提供punctuator.py,基于规则而非大模型:

def add_punctuation(text): # 规则1:句末语气词后加句号 text = re.sub(r'(啊|呢|吧|啦|呀|哦|嘿)$', r'\1。', text) # 规则2:问号词后加问号 text = re.sub(r'(吗|呢|吧|啊\?)$', r'\1?', text) # 规则3:数字+单位后加顿号(适配口语) text = re.sub(r'(\d+)(元|米|个|次)', r'\1\2、', text) return text.strip(',。!?;:、') # 调用 text = "今天天气不错啊 我想去公园" print(add_punctuation(text)) # 输出:今天天气不错啊。 我想去公园。

该规则集覆盖 83% 的日常对话标点,无需额外模型,延迟 <5ms。若需更高精度,可接入bert4keras的标点恢复模型(punctuator_bert.py已预留接口)。

6. 部署前最后检查清单:从 checkpoint 到 Docker 镜像的 6 个硬性验证点

6.1 检查点完整性验证:确保.pth文件不缺层、不丢权重

模型权重文件checkpoint_best.pth必须包含state_dict、config、vocab三个 key,缺一则无法加载:

import torch ckpt = torch.load("exp/aishell_office_v1/checkpoint_best.pth") required_keys = ["state_dict", "config", "vocab"] for k in required_keys: assert k in ckpt, f"Missing key: {k}" # 验证 state_dict 层名与 model 定义一致 model = ASRModel(ckpt["config"]) missing, unexpected = model.load_state_dict(ckpt["state_dict"], strict=False) assert len(missing) == 0, f"Missing layers: {missing}" assert len(unexpected) == 0, f"Unexpected layers: {unexpected}"

血泪教训:某次因磁盘满导致torch.save()写入中断,checkpoint_best.pth只有 2MB(正常应 ≥180MB),但torch.load()不报错,直到model.cuda()时才崩溃。从此我每次cp模型后必跑此验证。

6.2 ONNX 导出与跨平台验证:为什么 PyTorch 模型不能直接扔进嵌入式设备

PyTorch 模型含动态控制流(如if len(x) > 100),ONNX 不支持。导出前必须改写model.py中所有条件分支为torch.where:

# 错误写法(ONNX 不支持) if x.size(1) > max_len: x = x[:, :max_len] # 正确写法 x = torch.where(torch.arange(x.size(1)) < max_len, x, torch.zeros_like(x))

导出命令:

python export_onnx.py --model_path exp/aishell_office_v1/checkpoint_best.pth \ --output_path asr_zh.onnx \ --input_shape "(1,1,16000)" # 1s 音频

验证 ONNX:

onnxruntime_test.exe --model asr_zh.onnx --input "dummy_input.npy" # Windows # 或 Linux 下 python -c "import onnxruntime; sess=onnxruntime.InferenceSession('asr_zh.onnx'); print(sess.get_inputs()[0].shape)"

输出(1, 1, 16000)表示成功。

6.3 Docker 镜像最小化:从 2.1GB 到 427MB 的精简路径

原始镜像含 conda、jupyter、docs,生产环境只需 runtime:

FROM continuumio/miniconda3:4.12.0 # 只装必要包 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt && \ rm -rf /opt/conda/pkgs/* && \ conda clean --all -f -y # 复制模型与代码 COPY exp/aishell_office_v1/checkpoint_best.pth /app/model/ COPY src/ /app/src/ WORKDIR /app # 启动脚本 CMD ["python", "src/infer.py", "--model_path", "model/checkpoint_best.pth", "--stream_mode", "True"]

requirements.txt内容精简为:

torch==1.13.1+cu117 torchaudio==0.13.1+cu117 numpy==1.23.5 librosa==0.9.2 onnxruntime-gpu==1.15.1

构建后docker images显示427MB,比原镜像小 5 倍,启动时间从 12s → 1.8s。

6.4 延迟压测报告:在 Jetson Orin 上实测的 3 个关键阈值

用perf_test.py在 Jetson Orin(32GB RAM, 16GB GPU)上压测:

批大小音频长度平均延迟P95 延迟是否满足实时
11s182ms210ms✅(<200ms)
13s495ms580ms❌(需分 chunk)
41s310ms390ms⚠️(勉强)

结论:Orin 上必须用stream_mode=True+chunk_size=16000,禁用 batch 推理。实测中,若强行batch_size=4,GPU 显存占用达 14.2GB,触发 thermal throttling,延迟飙升至 1.2s。

从那以后我每次交付 ASR 模型,都强制走一遍这 6 个验证点:先torch.load检权重,再onnxruntime跑单帧,接着docker build --no-cache,最后在目标硬件上time python perf_test.py。少一步,上线后就可能收到凌晨 2 点的告警——不是模型不准,是它根本没跑起来。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/26 9:16:11

MySQL数据库操作指南与优化实战

1. MySQL课堂笔记核心内容解析2023年3月30日的MySQL课堂笔记实际上是一份非常实用的数据库操作指南&#xff0c;特别适合刚接触MySQL的开发者和学生群体。作为关系型数据库的典型代表&#xff0c;MySQL在Web应用、企业系统和数据分析等领域都有广泛应用。这份笔记从安装配置到基…

作者头像 李华
网站建设 2026/10/26 9:15:49

MSF生成Windows反弹Shell木马实战指南

1. MSF生成Windows反弹Shell木马实验概述在渗透测试和安全研究中&#xff0c;反弹Shell&#xff08;Reverse Shell&#xff09;是一种常见的后渗透技术手段。与传统的正向连接不同&#xff0c;反弹Shell会主动从目标机器回连到攻击者控制的服务器&#xff0c;这种技术能有效绕过…

作者头像 李华
网站建设 2026/10/26 9:15:22

Python人工智能美颜系统:磨皮美白瘦脸大眼算法与服务化

简介&#xff1a;面向具备一定Python与图像处理基础、希望动手实践人像美化算法的开发者与学习者&#xff0c;这套基于Python的人工智能美颜系统可用于理解从人脸关键点检测到肤色增强、面部特征优化的实现路径。压缩包共10个文件、约68.95MB&#xff0c;包含Python主程序与界面…

作者头像 李华
网站建设 2026/10/26 9:15:18

文本化世界建模:面向长程因果推演的结构化AI架构

1. 项目概述&#xff1a;这不是又一个“大模型看图说话”&#xff0c;而是让AI真正学会“推演未来”“Long-Horizon Textual World Modeling through Structured Reasoning”——这个标题乍一看像论文摘要&#xff0c;但拆开来看&#xff0c;它直指当前大模型最硬的那块骨头&am…

作者头像 李华
网站建设 2026/10/26 9:14:47

银联卡BIN表构建与查询:号段、最长前缀匹配与命中率验证

简介&#xff1a;这份「2025最新银联卡BIN表」面向支付系统开发、数据分析、风控规则配置及接口测试人员&#xff0c;提供按银行维度整理的银联卡BIN参考数据&#xff0c;可用于卡BIN查询、发卡行识别、卡类型判断、卡号长度校验以及支付路由初筛等场景。压缩包内共1个文件&…

作者头像 李华
网站建设 2026/10/26 9:14:46

FREA:面向真实化学反应可行性的专家级评估基准

1. 项目概述&#xff1a;这不是一个“AI做化学”的噱头&#xff0c;而是一场反应可行性验证的范式转移FREA——全称是FeasibilityReactionExpertAssessment&#xff0c;直译过来就是“反应可行性专家评估基准”。这个名字里没有“大模型”“LLM”“AI for Science”这类当前满天…

作者头像 李华