GPAUP/nlp_personal

0

stars

2

commits

Python

primary language

Jul 16, 2026

updated

README

C3/C4 语音推理与会议智能个人模块

本仓库保存我在综合实训 C 方向中负责的个人代码,分为两部分:

  1. 服务器 C3/C4 实验:C3 级联文本后编辑与翻译、C4 端到端 S2T/S2S、质量评价、鲁棒性实验及 C3/C4 对比。
  2. 本地会议智能模块:上下文感知 ASR 纠错、实时端到端翻译事件适配、说话人标签、会议级声纹校正、会议记录、阶段摘要、最终纪要、会议库和混合 RAG。

完整团队产品位于 GPAUP/nlp_team


1. 模块概述

1.1 模块名称

C3 级联语音模型推理、C4 端到端语音模型推理与会议智能模块

1.2 模块说明

C3 位于团队 C2 ASR 之后。它接收结构化 JSON 中的 prediction_text,使用 Qwen2.5-7B-Instruct 完成可选 ASR 后编辑和目标语言翻译。个人 C3 不运行语音识别模型;JSON 中的 WER、CER 和 ASR 时延来自团队 C2,C3 只保留这些字段用于分析错误传播。

C4 与 C2-C3 级联并行,直接接收音频。服务器实验使用 SeamlessM4T-v2-large 和 Qwen2.5-Omni-7B-AWQ 完成端到端语音到文本翻译,并使用 UniSS 探索保留源说话人音色和情感的语音到语音翻译。

本地会议智能模块把模型结果扩展为真实会议能力:根据最近对话纠正 ASR 文本,统一端到端实时事件,为字幕建立说话人和 turn_id,会后重新聚类说话人,并将会议内容保存、总结和建立混合 RAG 索引。

1.3 完成情况概览

类型完成情况
基础要求完成 C3 英文 ASR 文本到中文译文;完成 C4 英文语音到中文文本端到端翻译
C3 进阶要求中/日/韩目标语言、Qwen 后编辑、质量评价、分阶段时延、C3/C4 对比和 TTS 上游接口
C4 进阶要求两类端到端模型全量实验、C1 音频变体鲁棒性、S2S、错误累计分析、UniSS 表达性语音翻译
本地扩展上下文纠错、实时端到端事件、声纹聚类、会议纪要、会议库和混合 RAG
可独立运行c3_cascade.pyc4_end2end.pyc4_qwen_omni_awq_end2end.py、评价脚本和本地模块评估脚本
团队集成服务器通过稳定样本 ID 和 JSON 对接;实时系统通过 partial/final 事件、turn_id 和音频时间戳对接

2. 环境、模型与数据依赖

2.1 运行环境

项目要求
Python3.10
主要依赖PyTorch、Transformers、NumPy、SciPy、scikit-learn、SoundFile、FunASR、ModelScope、DashScope
GPU服务器模型推理建议使用 CUDA GPU;评价脚本可使用 CPU
外部数据CREMA-D、TESS;本地会议功能使用 AMI 或用户会议录音
联网首次下载模型和调用本地会议系统所用阿里云 API 时需要

2.2 模型依赖

模型来源用途
Qwen2.5-7B-InstructHugging Face / ModelScopeC3 ASR 后编辑与多语言翻译
SeamlessM4T-v2-largeHugging FaceC4 端到端 S2T
Qwen2.5-Omni-7B-AWQHugging Face / ModelScopeC4 端到端 S2T 全量实验和 S2S 探索
UniSS论文上游项目表达性 S2S,保留源说话人音色和情感
CAM++ / ERes2NetV2 / FSMN-VADModelScope 3D-Speaker / FunASR本地说话人向量与语音活动检测
qwen-plus / text-embedding-v4阿里云 API本地上下文纠错、翻译、纪要和会议检索

模型权重及第三方模型源码不提交到本仓库。服务器脚本通过 --model_path 指定本地模型目录;UniSS 下载与环境脚本位于 server_c3_c4/c4/code/

2.3 数据与样例

数据或文件来源路径用途
CREMA-D公开情感语音数据集运行时自行配置完整句子 C3/C4 和 S2S 实验
TESS公开情感语音数据集运行时自行配置孤立词翻译与情感语音实验
AMI Meeting CorpusAMI 官方语料库本地展示时下载到团队项目 meeting_system/data/raw/amicorpus/多人会议回放、双语字幕、说话人标签、会议纪要和会议库展示
C2 JSON 样例本仓库提供examples/c2_asr_sample.json验证个人 C3 输入接口
C4 manifest 样例本仓库提供examples/c4_manifest_sample.json验证 C4 音频清单格式
轻量结果实验汇总server_c3_c4/results/复核指标、失败记录和对比结论

2.4 安装步骤

git clone https://github.com/GPAUP/nlp_personal.git
cd nlp_personal
conda create -n nlp_personal python=3.10 -y
conda activate nlp_personal
pip install -r requirements.txt

Qwen2.5-Omni-AWQ、UniSS 和 SeamlessM4T 的依赖存在差异,建议按 server_c3_c4/c4/code/setup_*.sh 建立独立环境,不要强行安装到同一个推理环境。


3. 文件结构与接口边界

3.1 文件结构

nlp_personal/
├── README.md
├── examples/                       # C2 JSON 与 C4 manifest 样例
├── server_c3_c4/
│   ├── c3/code/                    # C3 后编辑、翻译、评价和 C3/C4 比较
│   ├── c4/code/                    # SeamlessM4T、Qwen-Omni、UniSS 和鲁棒性脚本
│   ├── c4/eval/                    # 固定银标参考
│   └── results/                    # 轻量实验汇总
├── meeting_intelligence/
│   ├── src/                        # 声纹、端到端事件、会议库和 RAG
│   ├── integration/realtime_server.py
│   ├── evaluation/                 # 上下文纠错、RAG 和声纹评估
│   └── tests/
└── docs/images/                    # 架构图和结果图

meeting_intelligence/integration/realtime_server.py 来自团队共享后端调度文件。与个人工作直接对应的主要函数是:

  • run_local_diarization():会议级声纹处理和字幕回写。
  • correct_transcript_text():最近对话上下文 ASR 纠错。
  • generate_realtime_minutes():最终会议纪要。
  • generate_stage_summary():阶段摘要。
  • save_realtime_meeting():保存会议录音、字幕与纪要。
  • meeting_search():会议知识库检索接口。

3.2 接口边界

类型来源 / 去向格式说明
C3 输入团队 C2JSON 数组必需字段为 idprediction_text;可带 WER/CER、ASR 时延和状态
C3 输出评价脚本 / C5JSONasr_textcorrected_asr_texttranslation、阶段时延、状态和错误
C4 输入C1 公共 manifestJSON 数组 + WAV优先读取 processed_audio,否则读取 raw_audio
C4 输出评价脚本 / C5JSON/WAVend2end_translation、时延、状态;S2S 另输出目标 WAV
实时输入团队 WebSocket 总线16 kHz PCM + JSON同源音频帧、语言、路线和会话控制
实时输出前端与会议库JSON 事件partial/final、turn_id、speaker、音频时间戳和延迟
RAG 输入输出会议库 / 语音助手文本与证据 JSON返回相关会议、说话人和音频时间位置

4. 基础要求实现与演示

4.1 C3 基础功能

个人 C3 只使用 Qwen2.5-7B-Instruct。程序读取 C2 已生成的 prediction_text,按批次构造翻译提示,输出目标语言文本。模型只加载一次,生成时关闭随机采样,保证批量实验可复现。

C2 asr_predictions.json
  -> 读取 prediction_text
  -> Qwen2.5-7B-Instruct
  -> translation + status + latency
文件 / 函数作用
c3/code/c3_cascade.py::load_asr()读取并检查 C2 JSON 列表
batch_generate()统一执行后编辑或翻译并记录批次时延
main()保留稳定 ID、上游指标和输出状态
c3_evaluate_outputs.py计算翻译质量标签和分阶段指标

4.2 C3 输入样例

{
  "id": "cremad_1001_dfa_ang_xx",
  "prediction_text": "Don't forget a jacket.",
  "wer": 0.0,
  "cer": 0.0,
  "latency_sec": 0.06,
  "status": "ok"
}

WER、CER 和 ASR 时延由团队 C2 产生,不代表个人 C3 内部运行了 ASR。

4.3 C3 独立演示

python server_c3_c4/c3/code/c3_cascade.py \
  --asr examples/c2_asr_sample.json \
  --model_path /path/to/Qwen2.5-7B-Instruct \
  --outdir outputs/c3_demo \
  --target_lang zh \
  --post_edit none \
  --batch_size 1 \
  --device cuda

开启 Qwen 后编辑:

python server_c3_c4/c3/code/c3_cascade.py \
  --asr examples/c2_asr_sample.json \
  --model_path /path/to/Qwen2.5-7B-Instruct \
  --outdir outputs/c3_post_edit_demo \
  --target_lang zh \
  --post_edit qwen \
  --batch_size 1 \
  --device cuda

输出记录应保留 id,并包含 asr_texttranslationllm_modeltranslation_latency_secstatuserror;开启后编辑后增加 corrected_asr_textpost_edit_latency_sec

4.4 C4 基础功能

C4 使用音频 manifest 直接运行端到端翻译,不读取 C3 的 ASR 文本。SeamlessM4T-v2-large 的独立命令:

python server_c3_c4/c4/code/c4_end2end.py \
  --input examples/c4_manifest_sample.json \
  --model_path /path/to/seamless-m4t-v2-large \
  --target_lang zh \
  --outdir outputs/c4_seamless_demo \
  --limit 1 \
  --batch_size 1

Qwen2.5-Omni-7B-AWQ 的独立命令:

python server_c3_c4/c4/code/c4_qwen_omni_awq_end2end.py \
  --input examples/c4_manifest_sample.json \
  --model_path /path/to/Qwen2.5-Omni-7B-AWQ \
  --target_lang zh \
  --outdir outputs/c4_qwen_demo \
  --limit 1 \
  --batch_size 1

主要输出字段为 idaudioend2end_translationlatency_secstatuserror。批量失败时脚本会回退到逐条推理,避免整批样本丢失。


5. 进阶要求实现与演示

5.1 完成情况

进阶要求状态对应文件说明
C3 多语言翻译完成c3_cascade.py支持中文、日语和韩语目标语言
C3 ASR 后编辑完成c3_cascade.py同一 Qwen 模型先修正明显错误再翻译
C3 质量评价完成c3_evaluate_outputs.pyBLEU、字符相似度、关键词和任务特定标签
C3/C4 同样本比较完成c3_compare_c4.py按稳定 ID 对比质量、错误传播和时延
C4 多模型端到端翻译完成c4_end2end.pyc4_qwen_omni_awq_end2end.pySeamlessM4T 与 Qwen2.5-Omni-AWQ
C1 音频变体鲁棒性完成c4_run_c1_robustness.py采样率、语速、音量、噪声和 VAD
C4 S2S完成探索Qwen S2S 与 UniSS 脚本保留失败记录并部署表达性 S2S
本地会议智能完成meeting_intelligence/上下文纠错、声纹、纪要、会议库和 RAG

5.2 进阶功能一:ASR 后编辑与多语言翻译

功能说明

基础 C3 直接翻译 C2 的 ASR 文本。当识别结果包含同音错词、缩写或专有名词错误时,错误会继续进入译文。本功能使用同一个 Qwen2.5-7B-Instruct 先完成受约束后编辑,再将修正结果翻译为中文、日语或韩语。程序同时保存原始文本、修正文本和译文,便于复核修正是否有效。

本地会议系统在此基础上使用最近 8 个确认句段作为上下文,只纠正 ASR final,不对仍会变化的 partial 文本重复调用模型。16 条受控困难样例中,最近 8 句上下文方案的修正后 CER 为 4.30%,术语准确率为 92.86%,平均延迟为 0.832 秒。

实现路径

文件 / 函数 / 脚本作用
server_c3_c4/c3/code/c3_cascade.py::build_messages()为后编辑和翻译构造不同的系统提示
c3_cascade.py::batch_generate()批量调用 Qwen2.5-7B-Instruct,并记录生成时延
c3_cascade.py::main()连接后编辑与翻译,保留原文、修正文和译文
meeting_intelligence/integration/realtime_server.py::correct_transcript_text()在实时会议中使用最近对话完成上下文纠错
C2 prediction_text -> 可选 Qwen 后编辑 -> 多语言翻译 -> 原文/修正文/译文/时延

输入格式与样例

字段 / 配置项格式是否必需说明
--asrJSON 文件C2 输出列表,样例见 examples/c2_asr_sample.json
id字符串跨模块稳定样本编号
prediction_text字符串C2 生成的英文识别文本
--post_editnone / qwen是否启用 ASR 后编辑
--target_langzh / ja / ko目标语言

演示命令

python server_c3_c4/c3/code/c3_cascade.py \
  --asr examples/c2_asr_sample.json \
  --model_path /path/to/Qwen2.5-7B-Instruct \
  --outdir outputs/c3_post_edit_ja \
  --post_edit qwen \
  --target_lang ja \
  --batch_size 1 \
  --device cuda

输出格式

输出字段格式说明
asr_text文本C2 原始识别结果
corrected_asr_text文本或空值Qwen 后编辑结果
translation文本指定目标语言的译文
post_edit_latency_sec浮点数单条后编辑时延
translation_latency_sec浮点数单条翻译时延
status / error字符串运行状态和失败原因

示例图片与结果

中、日、韩 smoke test 和后编辑对比结果位于 server_c3_c4/results/c3/outputs/,评价汇总文件名为 c3_summary.jsonc3_eval_summary.json

5.3 进阶功能二:C3/C4 同样本比较与音频鲁棒性

功能说明

级联路线保留显式 ASR 文本,便于定位错误,但识别错误可能继续影响翻译;端到端路线直接从音频生成译文,可以绕开显式文本错误。本功能用稳定样本 ID 对齐 C3 与 C4,使用同一套银标参考和质量标签比较两条路线,并在采样率、语速、音量、噪声和 VAD 等 C1 音频变体上检查鲁棒性。

CREMA-D 含 7442 条完整句子,TESS 含 2800 条孤立词语音。CREMA-D 使用 BLEU、字符相似度和关键词命中,TESS 使用严格词命中、音近或语义部分命中和载体短语标签。

实现路径

文件 / 函数 / 脚本作用
c3/code/c3_evaluate_outputs.py将 C3 结果转换为统一评价格式
c3/code/c3_compare_c4.pyid 配对 C3/C4 结果并生成对比报告
c4/code/c4_evaluate_outputs.py提供 C3/C4 共用的银标和质量标签逻辑
c4/code/c4_run_c1_robustness.py批量运行 SeamlessM4T 音频变体实验
c4/code/c4_run_qwen_omni_c1_robustness.py批量运行 Qwen2.5-Omni-AWQ 鲁棒性实验
同一 id 的 C3 JSON + C4 JSON + manifest + 银标
-> 统一评价 -> 质量分布/时延/错误传播/典型样例

输入格式与样例

输入格式是否必需说明
--c3目录或 JSONC3 输出目录
--c4目录或 JSONC4 输出目录或结果文件
--manifestJSON包含稳定 ID、数据集和参考文本
--referencesJSONserver_c3_c4/c4/eval/c4_silver_references.json

演示命令

python server_c3_c4/c3/code/c3_compare_c4.py \
  --c3 /path/to/c3_output \
  --c4 /path/to/c4_results.json \
  --manifest /path/to/dataset.json \
  --references server_c3_c4/c4/eval/c4_silver_references.json \
  --outdir outputs/c3_vs_c4

输出格式与实验结果

输出格式说明
c3_vs_c4_summary.jsonJSON样本数量、质量分布、平均时延和配对统计
c3_vs_c4_report.mdMarkdown汇总表、典型成功与失败样例
quality_label字符串correctpartialwrong 或任务特定标签
路线 / 数据样本数质量结果平均时延
C2-C3 / CREMA-D7442BLEU 0.4917;correct 84.68%0.0836 s/条(含上游 C2)
SeamlessM4T / CREMA-D7442correct 81.39%0.0409 s/条
Qwen2.5-Omni-AWQ / CREMA-D7442字符相似度 0.7819;correct 95.58%0.842 s/条
C2-C3 / TESS2800严格词命中 47.32%0.0832 s/条(含上游 C2)
SeamlessM4T / TESS2800严格词命中 27.25%0.0310 s/条
Qwen2.5-Omni-AWQ / TESS2800严格词命中 25.00%0.714 s/条

鲁棒性实验中,CREMA-D clean_16k 的 WER 为 0.0108、字符相似度为 0.7056;speed_1_1 的 WER 上升到 0.2109、字符相似度下降到 0.5926;noise_snr_5 的 WER 为 0.1940、字符相似度为 0.5983。

示例图片

C3/C4 推理时间对比

5.4 进阶功能三:UniSS 表达性语音到语音翻译

功能说明

SeamlessM4T-v2-large 和 Qwen2.5-Omni-7B-AWQ 已完成端到端 S2T 实验。继续使用 Qwen2.5-Omni-AWQ 尝试 S2S 时,中文文本有意义,但当前环境生成的 WAV 没有可理解内容;其预设音色也不等同于保留输入说话人的风格。为完成“尝试保留说话人风格或语音情感”的进阶要求,本模块调研并部署 UniSS。

UniSS 分别提取源语音的说话人表示和语言内容,在语言模型中生成目标文本与目标语音语义表示,再由 Codec Decoder 将目标语义和源说话人表示组合为目标波形。个人适配代码将其接入项目 manifest,并处理 16 kHz 单声道转换、任务 token、语言 token、结果解析和 WAV 保存。

实现路径

文件 / 函数 / 脚本作用
c4/code/download_uniss_hf_no_proxy.sh下载 UniSS 模型权重
c4/code/setup_uniss_minimal_env.sh建立 UniSS 独立运行环境
c4/code/c4_uniss_s2s_smoke.py运行 manifest 样本,输出转写、翻译和目标语音
c4/code/c4_uniss_s2s_cremad_compare.py整理 CREMA-D 六类情感的配对结果
源 WAV -> 16 kHz mono -> semantic/speaker tokens
-> 任务与目标语言控制 -> UniSS 生成
-> transcription + translation + target speech tokens -> WAV

输入格式与样例

参数 / 字段格式是否必需说明
--uniss-src目录上游 UniSS 源码目录
--model-path目录UniSS 权重目录
--manifestJSON,可重复C1 clean manifest;至少包含 id 和音频路径
processed_audio / raw_audioWAV 路径输入语音,优先使用处理后音频
emotion字符串CREMA-D 情感标签,用于配对试听整理
--modeQuality / Performance / S2STUniSS 推理模式

演示命令

python server_c3_c4/c4/code/c4_uniss_s2s_smoke.py \
  --uniss-src /path/to/UniSS-source \
  --model-path /path/to/UniSS-model \
  --manifest /path/to/CREMA-D/clean_16k/dataset.json \
  --manifest /path/to/TESS/clean_16k/dataset.json \
  --output-dir outputs/uniss_s2s_demo \
  --mode Quality \
  --target-lang '<|cmn|>' \
  --max-chunks 1

输出格式

输出格式说明
results.jsonJSON样本 ID、源情感、源转写、目标翻译、时延和目标 WAV 路径
smoke_report.mdMarkdown多数据集汇总表
output_wavWAVUniSS 生成的中文目标语音
chunksJSON 数组每个语音片段的转写、翻译和生成记录

服务器实验从 CREMA-D 中整理了覆盖 angry、disgust、fear、happy、neutral 和 sad 的 18 组配对元数据。仓库中保留 server_c3_c4/results/c4/outputs_uniss_s2s_cremad_compare/ 下的结果与报告。

示例图片

UniSS 架构

5.5 扩展功能一:会议级声纹校正

功能说明

本地展示系统没有参会人的注册声纹,实时阶段只能根据当前已经收到的短语音建立临时身份。为提高最终会议记录的稳定性,本功能在会议结束后利用整场音频重新进行声纹聚类,并把最终标签写回字幕、纪要和历史会议。

实现路径

文件 / 函数 / 脚本作用
meeting_intelligence/src/online_vad.py过滤静音和非语音窗口
meeting_intelligence/src/online_diarization.pyCAM++ / ERes2NetV2 声纹向量和在线候选确认
meeting_intelligence/src/meeting_diarization.py::_spectral_cluster()P-pruning 相似度图、特征值间隙和谱聚类
meeting_diarization.py::align_transcript_to_turns()按最大时间重叠将标签写回字幕
整场录音 -> FSMN-VAD -> 重叠窗口 -> CAM++ embedding
-> 长会议谱聚类 / 短片段 AHC -> 标签平滑与类别合并
-> 说话人时间线 -> 字幕回写

输入格式与样例

输入格式是否必需说明
audio16 kHz WAV 或音频字节整场会议录音,AMI 可用于本地展示
transcriptJSON 数组包含开始、结束时间的字幕,用于标签回写
speaker_count整数已知参会人数时可显式指定,否则由聚类估计

演示命令

python -c "from meeting_intelligence.src.meeting_diarization import diarize_audio; import json; print(json.dumps(diarize_audio('/path/to/AMI.wav'), ensure_ascii=False, indent=2))"

python -m unittest discover \
  -s meeting_intelligence/tests \
  -p "test_*.py" -v

输出格式

输出字段格式说明
turnsJSON 数组每个说话人区间的起止时间和参会者标签
speaker_count整数聚类得到的说话人数
speaker_centroids数组各聚类的归一化声纹中心
speaker_source字符串标签来源,如本地会议级声纹处理

示例图片

会议级声纹结果与会议库

5.6 扩展功能二:会议库与混合 RAG

功能说明

实时字幕在会议结束后被保存为结构化会议记录。本功能把最终纪要和连续发言转换为证据块,通过语义向量和关键词联合检索历史会议,为会议语音助手提供带来源的回答依据。摘要单独形成证据块,字幕每 4 个连续发言形成一个证据块,同时保存会议 ID、日期、主题、说话人和音频时间位置。

实现路径

文件 / 函数 / 脚本作用
meeting_intelligence/src/meeting_library.py保存和读取会议索引、字幕、纪要及录音元数据
meeting_intelligence/src/meeting_rag.py::_chunk_text()将纪要和连续发言切成证据块
meeting_rag.py::build_index()使用 text-embedding-v4 建立 1024 维向量索引
meeting_rag.py::retrieve()融合语义相似度和关键词得分并返回来源
meeting_intelligence/evaluation/evaluate_rag.py对比关键词、纯向量与混合检索
会议字幕/纪要 -> 证据块 + 元数据 -> 向量索引
用户问题 -> 0.78 × 语义相似度 + 0.22 × 关键词
-> Top-K 会议证据 -> 带会议名称、说话人和时间位置的结果

输入格式与样例

输入 / 配置格式是否必需说明
meeting_index.jsonJSON 数组已完成会议的索引
单场会议详情JSON包含 transcriptminutes
DASHSCOPE_API_KEY环境变量调用 text-embedding-v4
查询文本字符串例如“最近有讨论台风吗”

本地展示使用 AMI 历史会议和浏览器实时会议。运行个人评估前,将团队系统生成的已完成会议目录放入 meeting_intelligence/outputs/meetings/

演示命令

cp .env.example meeting_intelligence/.env
# 在 meeting_intelligence/.env 中填写 DASHSCOPE_API_KEY 后执行:
cd meeting_intelligence
python evaluation/evaluate_rag.py

输出格式与实验结果

输出格式说明
outputs/meetings/rag/chunks.jsonJSON会议证据块与来源元数据
outputs/meetings/rag/vectors.npzNumPy 压缩文件归一化语义向量
检索结果JSON 数组得分、会议、日期、说话人和时间位置
方法Recall@1Recall@3MRR@5
证据块关键词86.67%100.00%92.22%
纯向量80.00%86.67%85.78%
混合 RAG100.00%100.00%100.00%

示例图片

会议库与检索展示


6. 与团队系统的集成说明

服务器模块通过统一 JSON 和稳定样本 ID 联调:

  1. C1/C2 负责生成音频和 asr_predictions.json
  2. 个人 C3 按 id 读取 prediction_text,输出 translation
  3. 个人 C4 按相同 id 直接读取音频,输出 end2end_translation
  4. 团队 C5 使用 --text_field translation--text_field end2end_translation 接入两条路线。

本地产品通过统一事件协议集成:C3 和 C4 的不同服务事件被转换为 partial/final;所有字幕、翻译和说话人更新携带 turn_id,避免异步结果覆盖下一轮发言。会议结束后,录音、字幕、会议级说话人时间线和纪要写入同一会议对象,再供 RAG 和语音助手调用。

联调时最主要的问题是模块返回结构和时序不同。解决方式不是让前端分别适配每个模型,而是在后端统一字段、状态和轮次编号,使前端只维护一套字幕卡片和会议保存逻辑。


7. 已知问题与后续改进

问题当前原因后续改进
C3 后编辑可能改写原本正确的文本大模型倾向进行语义等价改写增加文本差异门控、术语白名单和置信度回退
Qwen2.5-Omni-AWQ 的 S2S 音频未通过验收当前环境与语音生成分支存在适配问题,且预设音色不满足源风格保持保留失败记录,以 UniSS 为表达性 S2S 主线
UniSS 风格保持目前以配对试听为主尚未建立统一客观评价集补充说话人相似度、情感分类和人工听测

Contributors

GPAUP

2 commits

GPAUP/nlp_personal

0

stars

2

commits

Python

primary language

Jul 16, 2026

updated

README

C3/C4 语音推理与会议智能个人模块

本仓库保存我在综合实训 C 方向中负责的个人代码,分为两部分:

  1. 服务器 C3/C4 实验:C3 级联文本后编辑与翻译、C4 端到端 S2T/S2S、质量评价、鲁棒性实验及 C3/C4 对比。
  2. 本地会议智能模块:上下文感知 ASR 纠错、实时端到端翻译事件适配、说话人标签、会议级声纹校正、会议记录、阶段摘要、最终纪要、会议库和混合 RAG。

完整团队产品位于 GPAUP/nlp_team


1. 模块概述

1.1 模块名称

C3 级联语音模型推理、C4 端到端语音模型推理与会议智能模块

1.2 模块说明

C3 位于团队 C2 ASR 之后。它接收结构化 JSON 中的 prediction_text,使用 Qwen2.5-7B-Instruct 完成可选 ASR 后编辑和目标语言翻译。个人 C3 不运行语音识别模型;JSON 中的 WER、CER 和 ASR 时延来自团队 C2,C3 只保留这些字段用于分析错误传播。

C4 与 C2-C3 级联并行,直接接收音频。服务器实验使用 SeamlessM4T-v2-large 和 Qwen2.5-Omni-7B-AWQ 完成端到端语音到文本翻译,并使用 UniSS 探索保留源说话人音色和情感的语音到语音翻译。

本地会议智能模块把模型结果扩展为真实会议能力:根据最近对话纠正 ASR 文本,统一端到端实时事件,为字幕建立说话人和 turn_id,会后重新聚类说话人,并将会议内容保存、总结和建立混合 RAG 索引。

1.3 完成情况概览

类型完成情况
基础要求完成 C3 英文 ASR 文本到中文译文;完成 C4 英文语音到中文文本端到端翻译
C3 进阶要求中/日/韩目标语言、Qwen 后编辑、质量评价、分阶段时延、C3/C4 对比和 TTS 上游接口
C4 进阶要求两类端到端模型全量实验、C1 音频变体鲁棒性、S2S、错误累计分析、UniSS 表达性语音翻译
本地扩展上下文纠错、实时端到端事件、声纹聚类、会议纪要、会议库和混合 RAG
可独立运行c3_cascade.pyc4_end2end.pyc4_qwen_omni_awq_end2end.py、评价脚本和本地模块评估脚本
团队集成服务器通过稳定样本 ID 和 JSON 对接;实时系统通过 partial/final 事件、turn_id 和音频时间戳对接

2. 环境、模型与数据依赖

2.1 运行环境

项目要求
Python3.10
主要依赖PyTorch、Transformers、NumPy、SciPy、scikit-learn、SoundFile、FunASR、ModelScope、DashScope
GPU服务器模型推理建议使用 CUDA GPU;评价脚本可使用 CPU
外部数据CREMA-D、TESS;本地会议功能使用 AMI 或用户会议录音
联网首次下载模型和调用本地会议系统所用阿里云 API 时需要

2.2 模型依赖

模型来源用途
Qwen2.5-7B-InstructHugging Face / ModelScopeC3 ASR 后编辑与多语言翻译
SeamlessM4T-v2-largeHugging FaceC4 端到端 S2T
Qwen2.5-Omni-7B-AWQHugging Face / ModelScopeC4 端到端 S2T 全量实验和 S2S 探索
UniSS论文上游项目表达性 S2S,保留源说话人音色和情感
CAM++ / ERes2NetV2 / FSMN-VADModelScope 3D-Speaker / FunASR本地说话人向量与语音活动检测
qwen-plus / text-embedding-v4阿里云 API本地上下文纠错、翻译、纪要和会议检索

模型权重及第三方模型源码不提交到本仓库。服务器脚本通过 --model_path 指定本地模型目录;UniSS 下载与环境脚本位于 server_c3_c4/c4/code/

2.3 数据与样例

数据或文件来源路径用途
CREMA-D公开情感语音数据集运行时自行配置完整句子 C3/C4 和 S2S 实验
TESS公开情感语音数据集运行时自行配置孤立词翻译与情感语音实验
AMI Meeting CorpusAMI 官方语料库本地展示时下载到团队项目 meeting_system/data/raw/amicorpus/多人会议回放、双语字幕、说话人标签、会议纪要和会议库展示
C2 JSON 样例本仓库提供examples/c2_asr_sample.json验证个人 C3 输入接口
C4 manifest 样例本仓库提供examples/c4_manifest_sample.json验证 C4 音频清单格式
轻量结果实验汇总server_c3_c4/results/复核指标、失败记录和对比结论

2.4 安装步骤

git clone https://github.com/GPAUP/nlp_personal.git
cd nlp_personal
conda create -n nlp_personal python=3.10 -y
conda activate nlp_personal
pip install -r requirements.txt

Qwen2.5-Omni-AWQ、UniSS 和 SeamlessM4T 的依赖存在差异,建议按 server_c3_c4/c4/code/setup_*.sh 建立独立环境,不要强行安装到同一个推理环境。


3. 文件结构与接口边界

3.1 文件结构

nlp_personal/
├── README.md
├── examples/                       # C2 JSON 与 C4 manifest 样例
├── server_c3_c4/
│   ├── c3/code/                    # C3 后编辑、翻译、评价和 C3/C4 比较
│   ├── c4/code/                    # SeamlessM4T、Qwen-Omni、UniSS 和鲁棒性脚本
│   ├── c4/eval/                    # 固定银标参考
│   └── results/                    # 轻量实验汇总
├── meeting_intelligence/
│   ├── src/                        # 声纹、端到端事件、会议库和 RAG
│   ├── integration/realtime_server.py
│   ├── evaluation/                 # 上下文纠错、RAG 和声纹评估
│   └── tests/
└── docs/images/                    # 架构图和结果图

meeting_intelligence/integration/realtime_server.py 来自团队共享后端调度文件。与个人工作直接对应的主要函数是:

  • run_local_diarization():会议级声纹处理和字幕回写。
  • correct_transcript_text():最近对话上下文 ASR 纠错。
  • generate_realtime_minutes():最终会议纪要。
  • generate_stage_summary():阶段摘要。
  • save_realtime_meeting():保存会议录音、字幕与纪要。
  • meeting_search():会议知识库检索接口。

3.2 接口边界

类型来源 / 去向格式说明
C3 输入团队 C2JSON 数组必需字段为 idprediction_text;可带 WER/CER、ASR 时延和状态
C3 输出评价脚本 / C5JSONasr_textcorrected_asr_texttranslation、阶段时延、状态和错误
C4 输入C1 公共 manifestJSON 数组 + WAV优先读取 processed_audio,否则读取 raw_audio
C4 输出评价脚本 / C5JSON/WAVend2end_translation、时延、状态;S2S 另输出目标 WAV
实时输入团队 WebSocket 总线16 kHz PCM + JSON同源音频帧、语言、路线和会话控制
实时输出前端与会议库JSON 事件partial/final、turn_id、speaker、音频时间戳和延迟
RAG 输入输出会议库 / 语音助手文本与证据 JSON返回相关会议、说话人和音频时间位置

4. 基础要求实现与演示

4.1 C3 基础功能

个人 C3 只使用 Qwen2.5-7B-Instruct。程序读取 C2 已生成的 prediction_text,按批次构造翻译提示,输出目标语言文本。模型只加载一次,生成时关闭随机采样,保证批量实验可复现。

C2 asr_predictions.json
  -> 读取 prediction_text
  -> Qwen2.5-7B-Instruct
  -> translation + status + latency
文件 / 函数作用
c3/code/c3_cascade.py::load_asr()读取并检查 C2 JSON 列表
batch_generate()统一执行后编辑或翻译并记录批次时延
main()保留稳定 ID、上游指标和输出状态
c3_evaluate_outputs.py计算翻译质量标签和分阶段指标

4.2 C3 输入样例

{
  "id": "cremad_1001_dfa_ang_xx",
  "prediction_text": "Don't forget a jacket.",
  "wer": 0.0,
  "cer": 0.0,
  "latency_sec": 0.06,
  "status": "ok"
}

WER、CER 和 ASR 时延由团队 C2 产生,不代表个人 C3 内部运行了 ASR。

4.3 C3 独立演示

python server_c3_c4/c3/code/c3_cascade.py \
  --asr examples/c2_asr_sample.json \
  --model_path /path/to/Qwen2.5-7B-Instruct \
  --outdir outputs/c3_demo \
  --target_lang zh \
  --post_edit none \
  --batch_size 1 \
  --device cuda

开启 Qwen 后编辑:

python server_c3_c4/c3/code/c3_cascade.py \
  --asr examples/c2_asr_sample.json \
  --model_path /path/to/Qwen2.5-7B-Instruct \
  --outdir outputs/c3_post_edit_demo \
  --target_lang zh \
  --post_edit qwen \
  --batch_size 1 \
  --device cuda

输出记录应保留 id,并包含 asr_texttranslationllm_modeltranslation_latency_secstatuserror;开启后编辑后增加 corrected_asr_textpost_edit_latency_sec

4.4 C4 基础功能

C4 使用音频 manifest 直接运行端到端翻译,不读取 C3 的 ASR 文本。SeamlessM4T-v2-large 的独立命令:

python server_c3_c4/c4/code/c4_end2end.py \
  --input examples/c4_manifest_sample.json \
  --model_path /path/to/seamless-m4t-v2-large \
  --target_lang zh \
  --outdir outputs/c4_seamless_demo \
  --limit 1 \
  --batch_size 1

Qwen2.5-Omni-7B-AWQ 的独立命令:

python server_c3_c4/c4/code/c4_qwen_omni_awq_end2end.py \
  --input examples/c4_manifest_sample.json \
  --model_path /path/to/Qwen2.5-Omni-7B-AWQ \
  --target_lang zh \
  --outdir outputs/c4_qwen_demo \
  --limit 1 \
  --batch_size 1

主要输出字段为 idaudioend2end_translationlatency_secstatuserror。批量失败时脚本会回退到逐条推理,避免整批样本丢失。


5. 进阶要求实现与演示

5.1 完成情况

进阶要求状态对应文件说明
C3 多语言翻译完成c3_cascade.py支持中文、日语和韩语目标语言
C3 ASR 后编辑完成c3_cascade.py同一 Qwen 模型先修正明显错误再翻译
C3 质量评价完成c3_evaluate_outputs.pyBLEU、字符相似度、关键词和任务特定标签
C3/C4 同样本比较完成c3_compare_c4.py按稳定 ID 对比质量、错误传播和时延
C4 多模型端到端翻译完成c4_end2end.pyc4_qwen_omni_awq_end2end.pySeamlessM4T 与 Qwen2.5-Omni-AWQ
C1 音频变体鲁棒性完成c4_run_c1_robustness.py采样率、语速、音量、噪声和 VAD
C4 S2S完成探索Qwen S2S 与 UniSS 脚本保留失败记录并部署表达性 S2S
本地会议智能完成meeting_intelligence/上下文纠错、声纹、纪要、会议库和 RAG

5.2 进阶功能一:ASR 后编辑与多语言翻译

功能说明

基础 C3 直接翻译 C2 的 ASR 文本。当识别结果包含同音错词、缩写或专有名词错误时,错误会继续进入译文。本功能使用同一个 Qwen2.5-7B-Instruct 先完成受约束后编辑,再将修正结果翻译为中文、日语或韩语。程序同时保存原始文本、修正文本和译文,便于复核修正是否有效。

本地会议系统在此基础上使用最近 8 个确认句段作为上下文,只纠正 ASR final,不对仍会变化的 partial 文本重复调用模型。16 条受控困难样例中,最近 8 句上下文方案的修正后 CER 为 4.30%,术语准确率为 92.86%,平均延迟为 0.832 秒。

实现路径

文件 / 函数 / 脚本作用
server_c3_c4/c3/code/c3_cascade.py::build_messages()为后编辑和翻译构造不同的系统提示
c3_cascade.py::batch_generate()批量调用 Qwen2.5-7B-Instruct,并记录生成时延
c3_cascade.py::main()连接后编辑与翻译,保留原文、修正文和译文
meeting_intelligence/integration/realtime_server.py::correct_transcript_text()在实时会议中使用最近对话完成上下文纠错
C2 prediction_text -> 可选 Qwen 后编辑 -> 多语言翻译 -> 原文/修正文/译文/时延

输入格式与样例

字段 / 配置项格式是否必需说明
--asrJSON 文件C2 输出列表,样例见 examples/c2_asr_sample.json
id字符串跨模块稳定样本编号
prediction_text字符串C2 生成的英文识别文本
--post_editnone / qwen是否启用 ASR 后编辑
--target_langzh / ja / ko目标语言

演示命令

python server_c3_c4/c3/code/c3_cascade.py \
  --asr examples/c2_asr_sample.json \
  --model_path /path/to/Qwen2.5-7B-Instruct \
  --outdir outputs/c3_post_edit_ja \
  --post_edit qwen \
  --target_lang ja \
  --batch_size 1 \
  --device cuda

输出格式

输出字段格式说明
asr_text文本C2 原始识别结果
corrected_asr_text文本或空值Qwen 后编辑结果
translation文本指定目标语言的译文
post_edit_latency_sec浮点数单条后编辑时延
translation_latency_sec浮点数单条翻译时延
status / error字符串运行状态和失败原因

示例图片与结果

中、日、韩 smoke test 和后编辑对比结果位于 server_c3_c4/results/c3/outputs/,评价汇总文件名为 c3_summary.jsonc3_eval_summary.json

5.3 进阶功能二:C3/C4 同样本比较与音频鲁棒性

功能说明

级联路线保留显式 ASR 文本,便于定位错误,但识别错误可能继续影响翻译;端到端路线直接从音频生成译文,可以绕开显式文本错误。本功能用稳定样本 ID 对齐 C3 与 C4,使用同一套银标参考和质量标签比较两条路线,并在采样率、语速、音量、噪声和 VAD 等 C1 音频变体上检查鲁棒性。

CREMA-D 含 7442 条完整句子,TESS 含 2800 条孤立词语音。CREMA-D 使用 BLEU、字符相似度和关键词命中,TESS 使用严格词命中、音近或语义部分命中和载体短语标签。

实现路径

文件 / 函数 / 脚本作用
c3/code/c3_evaluate_outputs.py将 C3 结果转换为统一评价格式
c3/code/c3_compare_c4.pyid 配对 C3/C4 结果并生成对比报告
c4/code/c4_evaluate_outputs.py提供 C3/C4 共用的银标和质量标签逻辑
c4/code/c4_run_c1_robustness.py批量运行 SeamlessM4T 音频变体实验
c4/code/c4_run_qwen_omni_c1_robustness.py批量运行 Qwen2.5-Omni-AWQ 鲁棒性实验
同一 id 的 C3 JSON + C4 JSON + manifest + 银标
-> 统一评价 -> 质量分布/时延/错误传播/典型样例

输入格式与样例

输入格式是否必需说明
--c3目录或 JSONC3 输出目录
--c4目录或 JSONC4 输出目录或结果文件
--manifestJSON包含稳定 ID、数据集和参考文本
--referencesJSONserver_c3_c4/c4/eval/c4_silver_references.json

演示命令

python server_c3_c4/c3/code/c3_compare_c4.py \
  --c3 /path/to/c3_output \
  --c4 /path/to/c4_results.json \
  --manifest /path/to/dataset.json \
  --references server_c3_c4/c4/eval/c4_silver_references.json \
  --outdir outputs/c3_vs_c4

输出格式与实验结果

输出格式说明
c3_vs_c4_summary.jsonJSON样本数量、质量分布、平均时延和配对统计
c3_vs_c4_report.mdMarkdown汇总表、典型成功与失败样例
quality_label字符串correctpartialwrong 或任务特定标签
路线 / 数据样本数质量结果平均时延
C2-C3 / CREMA-D7442BLEU 0.4917;correct 84.68%0.0836 s/条(含上游 C2)
SeamlessM4T / CREMA-D7442correct 81.39%0.0409 s/条
Qwen2.5-Omni-AWQ / CREMA-D7442字符相似度 0.7819;correct 95.58%0.842 s/条
C2-C3 / TESS2800严格词命中 47.32%0.0832 s/条(含上游 C2)
SeamlessM4T / TESS2800严格词命中 27.25%0.0310 s/条
Qwen2.5-Omni-AWQ / TESS2800严格词命中 25.00%0.714 s/条

鲁棒性实验中,CREMA-D clean_16k 的 WER 为 0.0108、字符相似度为 0.7056;speed_1_1 的 WER 上升到 0.2109、字符相似度下降到 0.5926;noise_snr_5 的 WER 为 0.1940、字符相似度为 0.5983。

示例图片

C3/C4 推理时间对比

5.4 进阶功能三:UniSS 表达性语音到语音翻译

功能说明

SeamlessM4T-v2-large 和 Qwen2.5-Omni-7B-AWQ 已完成端到端 S2T 实验。继续使用 Qwen2.5-Omni-AWQ 尝试 S2S 时,中文文本有意义,但当前环境生成的 WAV 没有可理解内容;其预设音色也不等同于保留输入说话人的风格。为完成“尝试保留说话人风格或语音情感”的进阶要求,本模块调研并部署 UniSS。

UniSS 分别提取源语音的说话人表示和语言内容,在语言模型中生成目标文本与目标语音语义表示,再由 Codec Decoder 将目标语义和源说话人表示组合为目标波形。个人适配代码将其接入项目 manifest,并处理 16 kHz 单声道转换、任务 token、语言 token、结果解析和 WAV 保存。

实现路径

文件 / 函数 / 脚本作用
c4/code/download_uniss_hf_no_proxy.sh下载 UniSS 模型权重
c4/code/setup_uniss_minimal_env.sh建立 UniSS 独立运行环境
c4/code/c4_uniss_s2s_smoke.py运行 manifest 样本,输出转写、翻译和目标语音
c4/code/c4_uniss_s2s_cremad_compare.py整理 CREMA-D 六类情感的配对结果
源 WAV -> 16 kHz mono -> semantic/speaker tokens
-> 任务与目标语言控制 -> UniSS 生成
-> transcription + translation + target speech tokens -> WAV

输入格式与样例

参数 / 字段格式是否必需说明
--uniss-src目录上游 UniSS 源码目录
--model-path目录UniSS 权重目录
--manifestJSON,可重复C1 clean manifest;至少包含 id 和音频路径
processed_audio / raw_audioWAV 路径输入语音,优先使用处理后音频
emotion字符串CREMA-D 情感标签,用于配对试听整理
--modeQuality / Performance / S2STUniSS 推理模式

演示命令

python server_c3_c4/c4/code/c4_uniss_s2s_smoke.py \
  --uniss-src /path/to/UniSS-source \
  --model-path /path/to/UniSS-model \
  --manifest /path/to/CREMA-D/clean_16k/dataset.json \
  --manifest /path/to/TESS/clean_16k/dataset.json \
  --output-dir outputs/uniss_s2s_demo \
  --mode Quality \
  --target-lang '<|cmn|>' \
  --max-chunks 1

输出格式

输出格式说明
results.jsonJSON样本 ID、源情感、源转写、目标翻译、时延和目标 WAV 路径
smoke_report.mdMarkdown多数据集汇总表
output_wavWAVUniSS 生成的中文目标语音
chunksJSON 数组每个语音片段的转写、翻译和生成记录

服务器实验从 CREMA-D 中整理了覆盖 angry、disgust、fear、happy、neutral 和 sad 的 18 组配对元数据。仓库中保留 server_c3_c4/results/c4/outputs_uniss_s2s_cremad_compare/ 下的结果与报告。

示例图片

UniSS 架构

5.5 扩展功能一:会议级声纹校正

功能说明

本地展示系统没有参会人的注册声纹,实时阶段只能根据当前已经收到的短语音建立临时身份。为提高最终会议记录的稳定性,本功能在会议结束后利用整场音频重新进行声纹聚类,并把最终标签写回字幕、纪要和历史会议。

实现路径

文件 / 函数 / 脚本作用
meeting_intelligence/src/online_vad.py过滤静音和非语音窗口
meeting_intelligence/src/online_diarization.pyCAM++ / ERes2NetV2 声纹向量和在线候选确认
meeting_intelligence/src/meeting_diarization.py::_spectral_cluster()P-pruning 相似度图、特征值间隙和谱聚类
meeting_diarization.py::align_transcript_to_turns()按最大时间重叠将标签写回字幕
整场录音 -> FSMN-VAD -> 重叠窗口 -> CAM++ embedding
-> 长会议谱聚类 / 短片段 AHC -> 标签平滑与类别合并
-> 说话人时间线 -> 字幕回写

输入格式与样例

输入格式是否必需说明
audio16 kHz WAV 或音频字节整场会议录音,AMI 可用于本地展示
transcriptJSON 数组包含开始、结束时间的字幕,用于标签回写
speaker_count整数已知参会人数时可显式指定,否则由聚类估计

演示命令

python -c "from meeting_intelligence.src.meeting_diarization import diarize_audio; import json; print(json.dumps(diarize_audio('/path/to/AMI.wav'), ensure_ascii=False, indent=2))"

python -m unittest discover \
  -s meeting_intelligence/tests \
  -p "test_*.py" -v

输出格式

输出字段格式说明
turnsJSON 数组每个说话人区间的起止时间和参会者标签
speaker_count整数聚类得到的说话人数
speaker_centroids数组各聚类的归一化声纹中心
speaker_source字符串标签来源,如本地会议级声纹处理

示例图片

会议级声纹结果与会议库

5.6 扩展功能二:会议库与混合 RAG

功能说明

实时字幕在会议结束后被保存为结构化会议记录。本功能把最终纪要和连续发言转换为证据块,通过语义向量和关键词联合检索历史会议,为会议语音助手提供带来源的回答依据。摘要单独形成证据块,字幕每 4 个连续发言形成一个证据块,同时保存会议 ID、日期、主题、说话人和音频时间位置。

实现路径

文件 / 函数 / 脚本作用
meeting_intelligence/src/meeting_library.py保存和读取会议索引、字幕、纪要及录音元数据
meeting_intelligence/src/meeting_rag.py::_chunk_text()将纪要和连续发言切成证据块
meeting_rag.py::build_index()使用 text-embedding-v4 建立 1024 维向量索引
meeting_rag.py::retrieve()融合语义相似度和关键词得分并返回来源
meeting_intelligence/evaluation/evaluate_rag.py对比关键词、纯向量与混合检索
会议字幕/纪要 -> 证据块 + 元数据 -> 向量索引
用户问题 -> 0.78 × 语义相似度 + 0.22 × 关键词
-> Top-K 会议证据 -> 带会议名称、说话人和时间位置的结果

输入格式与样例

输入 / 配置格式是否必需说明
meeting_index.jsonJSON 数组已完成会议的索引
单场会议详情JSON包含 transcriptminutes
DASHSCOPE_API_KEY环境变量调用 text-embedding-v4
查询文本字符串例如“最近有讨论台风吗”

本地展示使用 AMI 历史会议和浏览器实时会议。运行个人评估前,将团队系统生成的已完成会议目录放入 meeting_intelligence/outputs/meetings/

演示命令

cp .env.example meeting_intelligence/.env
# 在 meeting_intelligence/.env 中填写 DASHSCOPE_API_KEY 后执行:
cd meeting_intelligence
python evaluation/evaluate_rag.py

输出格式与实验结果

输出格式说明
outputs/meetings/rag/chunks.jsonJSON会议证据块与来源元数据
outputs/meetings/rag/vectors.npzNumPy 压缩文件归一化语义向量
检索结果JSON 数组得分、会议、日期、说话人和时间位置
方法Recall@1Recall@3MRR@5
证据块关键词86.67%100.00%92.22%
纯向量80.00%86.67%85.78%
混合 RAG100.00%100.00%100.00%

示例图片

会议库与检索展示


6. 与团队系统的集成说明

服务器模块通过统一 JSON 和稳定样本 ID 联调:

  1. C1/C2 负责生成音频和 asr_predictions.json
  2. 个人 C3 按 id 读取 prediction_text,输出 translation
  3. 个人 C4 按相同 id 直接读取音频,输出 end2end_translation
  4. 团队 C5 使用 --text_field translation--text_field end2end_translation 接入两条路线。

本地产品通过统一事件协议集成:C3 和 C4 的不同服务事件被转换为 partial/final;所有字幕、翻译和说话人更新携带 turn_id,避免异步结果覆盖下一轮发言。会议结束后,录音、字幕、会议级说话人时间线和纪要写入同一会议对象,再供 RAG 和语音助手调用。

联调时最主要的问题是模块返回结构和时序不同。解决方式不是让前端分别适配每个模型,而是在后端统一字段、状态和轮次编号,使前端只维护一套字幕卡片和会议保存逻辑。


7. 已知问题与后续改进

问题当前原因后续改进
C3 后编辑可能改写原本正确的文本大模型倾向进行语义等价改写增加文本差异门控、术语白名单和置信度回退
Qwen2.5-Omni-AWQ 的 S2S 音频未通过验收当前环境与语音生成分支存在适配问题,且预设音色不满足源风格保持保留失败记录,以 UniSS 为表达性 S2S 主线
UniSS 风格保持目前以配对试听为主尚未建立统一客观评价集补充说话人相似度、情感分类和人工听测

Contributors

GPAUP

2 commits

Languages

Python

97.3%

Shell

2.7%