# 语音点餐系统 **Repository Path**: kun2025/voiceactivated_ordering_system ## Basic Information - **Project Name**: 语音点餐系统 - **Description**: 语音点餐系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-23 - **Last Updated**: 2026-01-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目简介 ## 步骤 - 语音识别(ASR): - 接受音频输入,完成音频到文字的识别过程 - 例如,用户输入“wo zai jian fei, bang wo dian ge bu zhang pang de wai mai” - 语音识别模块需输出“我在减肥,帮我点个不长胖的外卖” - 领域分类(DOM):接受输入的文本或语音 - “我在减肥,帮我点个不长胖的外卖” - 判断是否与外卖相关“1/0”。 - 查询改写(QUE):接受表意含糊的文本,按句式输出具体的点餐的品类或餐品 - 文本输入“我在减肥,帮我点个不长胖的外卖” - 输出“帮我点沙拉”。 - 由于天猫精灵在调用链路上需要判断调起那个服务接口,因此借用生产链路已有的DIS系统,需要将其改写为固定句式“我要点XXX”“帮我点XXX”等。 ## 评分政策 - $s = \alpha \, ASR + \beta \, DOM + \gamma \, QUE$ - 其中 $\alpha = 0.5, \, \beta = 0.3, \, \gamma = 0.2$ ### 语音识别准确率 - 语音识别部分准确率采用指标“CER 字错率”作为语音识别准确率。 - CER(Character Error Rate)指的是机器翻译或者语音识别系统中,系统输出的单词与原始单词之间错误的比例。这个指标通常用于评估机器翻译或语音识别系统的性能。CER 的计算方式是将系统错误翻译的单词数除以总的单词数。 - 计算公式: CER 字错率=识别文本相对标注文本的编辑距离/标注文本总字数 - 语音识别部分得分为: $$ ASR = 1 - \frac{1}{N} \sum CER_i $$ ### 领域分类准确率 - 该部分得分会将选手结果 $\hat{y}$ 与真实值(gr) $y$ 做对比,并计算准确率: $$ DOM = \frac{1}{N} \sum c_i \quad \begin{cases} c_i = 1 & y_i = \hat{y}_i, \\ c_i = 0 & y_i \neq \hat{y}_i \end{cases} $$ ### 查询改写接受率 - 本次大赛需要参赛者交付一整套从语音交互,智能推荐,完成下单的整体链路演示(具体见复赛环节)。 - 鉴于智能推荐评估较为主观,此部分会采用饿了么自研大模型EGPT对改写的query进行“接受推荐”或“不接受推荐”评估,最终加总。 - $r_i = 1$ 表示大模型不接受选手给出的推荐菜品。请注意改写query中的菜品必须来自于菜品库中,查询改写部分得分为: $$ QUE = \frac{1}{\sum \hat{y}_i} \sum \hat{y}_i \, q_i \, \frac{s_i}{5} \quad \begin{cases} q_i = 1 & \text{菜品在菜品库中}, \\ q_i = 0 & \text{菜品不在菜品库中} \end{cases} \quad s_i \in \{0,1,2,3,4,5\} $$   # 语音识别(ASR) ## 1.1    获得直接ASR结果 - 使用阿里paraformer ASR模型,对训练数据进行处理,得到ASR结果。 - 将得到的ASR结果与标注数据对比,并计算CER: - CER(Character Error Rate)指的是机器翻译或者语音识别系统中,系统输出的单词与原始单词之间错误的比例。这个指标通常用于评估机器翻译或语音识别系统的性能。CER 的计算方式是将系统错误翻译的单词数除以总的单词数。 - 计算公式: CER 字错率=识别文本相对标注文本的编辑距离/标注文本总字数 - 得到CER结果,作为基准 ## 1.2.1    本地大模型校对?微调 Qwen2.5 获取校对模型(效果不好) - **数据预处理** - 将 dataset 的 70% 作为 trainset,进行ASR结果(如“杜 轩 达 的 只 剩 旅 记”)与标注文本(“杜宣达的只剩雨季”)对齐,生成训练样本。 - 错误模式分析 :统计ASR常见错误,针对性设计数据增强策略。 - 需要更改的错误类型:同音异字,口音方言,吞字,多字,专有名词识别不准,句式颠倒 - **微调策略** - 任务设计 :将校准任务转化为 Seq2Seq 任务,输入ASR文本,输出标注文本。 - 高效微调 :使用 LoRA 或 Prefix-Tuning 减少训练资源消耗。 - 评估指标 :关注字符级准确率(如CER)和响应延迟。 - **推理加速** - 模型量化 :将模型转换为FP16或INT8格式,减少计算量。 - 批处理优化 :合并多个请求为批次处理,但需控制批大小以避免延迟超标。 - 缓存机制 :对高频查询结果进行缓存,降低实际响应时间。 - **测试环节** - 使用余下 30% 的 dataset 作为 testset,比较准确度与只进行ASR的高低。 - 备注:在处理数据集的时候,应当加入 random 函数进行随机化。 - **训练效果** - 非常不好 ## 1.2.2    本地大模型校对?直接使用 Qwen2.5 或 DeepSeek-R1-7B 进行校对(效果不好) - 在 4090 24GB 的云服务器上,使用 vLLM 对 Qwen2.5-7B-Instruct 模型进行推理,并且无精度影响。 - 在 Mac mini 上,使用 transformers + torch.float16 或 int8量化的方法,配合 mps 加速,运行 Qwen2.5-1.5B-Instruct 模型进行推理 - 实操上讲,两种模型在准确度没有太多区别   # 领域分类(DOM)—— A测试 ## 2.1.1    基于 TF-IDF + n-gram + SVD 降维 + 逻辑回归 的文本分类模型 本方案旨在构建一个高效、鲁棒的中文文本分类器,采用“TF-IDF 向量化 + n-gram 组合 + SVD 降维 + 逻辑回归”这一经典管道结构,辅以网格搜索与交叉验证进行参数优化 1. **数据处理**: - 分别使用准确的结果以及ASR识别结果训练模型,并分别得到相对应的准确度 - 中文分词采用自定义分词器 `chinese_tokenizer`,结合常见停用词(如“的”、“是”、“和”等)进行清洗。 2. **文本向量化:TF-IDF + n-gram**: - 使用 `TfidfVectorizer` 提取文本特征,设置 `ngram_range=(1, 3)`,支持一元、二元和三元语法模型。(可以将这个参数加入到网格搜索) - 通过 `max_features=5000` 限制特征数量,平衡维度与效果。 - 停用词过滤、分词方式均做了自定义设置以适应中文文本。 3. **降维处理:SVD(TruncatedSVD)**: - 原始 TF-IDF 特征维度高,采用 SVD 将其压缩至 300 维(可调),保留关键信息的同时降低计算复杂度和过拟合风险。 4. **分类器:逻辑回归(Logistic Regression)**: - 选用逻辑回归作为分类器,设置最大迭代次数 `max_iter=3000` 保证收敛。 - 初始使用默认参数进行预实验,后续通过网格搜索精准调参。 5. **模型管道(Pipeline)**: - 将上述三个阶段(TF-IDF → SVD → 逻辑回归)封装为一个 pipeline,简化训练流程并利于参数统一调节。 ## 2.1.2    优化方案 - **预实验**: - 先对 `penalty`、`C`、`solver` 及 `n_components` 做大致范围搜索,快速定位性能较优的参数组合。 - **正式网格搜索**: - 针对 l1 正则化展开精细搜索 - 使用 5 折 StratifiedKFold 交叉验证保持各类别比例一致。 - 使用并行计算提升训练效率。 - 最终在训练集上达到 **99.97%** 的交叉验证准确率。 - 自动记录最佳参数及准确率到日志文件中,并以准确率为命名格式保存最终模型(`.joblib` 格式)。   # 查询改写(QUE)—— B测试 ## 3.1    基础方案设计 ### 3.1.1    关键词匹配 - 对输入的意图语句根据词性进行划分,提取 adj. 和 n. 作为识别出的意图特征 - 构建 Faiss 向量与倒排索引,在数据集中依据特征信息查找合适的菜品并输出 ### 3.1.2    大模型微调 + 特征匹配 - 微调 Qwen2.5-1.5B-Instruct 模型,用来对用户意图进行识别,并输出其所需要的特征信息 - 构建 Faiss 向量与倒排索引,在数据集中依据特征信息查找合适的菜品并输出 ### 3.1.3    大模型 + 特征匹配 - 直接使用 Qwen2.5-1.5B-Instruct 模型,对用户意图进行识别,并输出其所需要的特征信息 - 构建 Faiss 向量与倒排索引,在数据集中依据特征信息查找合适的菜品并输出 ### 3.1.4    大模型 + 本地知识库 - 直接使用 Qwen2.5-1.5B-Instruct 模型,或使用微调的 Qwen2.5-1.5B-Instruct 模型,对用户意图进行识别,并保存其所需要的特征信息 - 根据特征信息使用关键词匹配查找合适的菜品(倒排索引) - 将匹配的菜品输入回大模型,寻找最优解 ## 3.2    优化方案 ### 3.2.1    多模型混合测试 | | Qwen2.5-1.5B-Instruct | Qwen3-4B | Qwen2.5-3B-Instruct | Qwen2.5-7B-Instruct | |:---:|:---------------------:|:--------:|:-------------------:|:-------------------:| |速度| 0.2 sec | --- | --- | 0.4 sec | |准度|0.8214| --- | --- |0.8425| |准度|0.8293| --- | --- || - 使用Paraformer配基于深度ASR分类器识别结果进行多次提交