412 lines
8.4 KiB
Markdown
412 lines
8.4 KiB
Markdown
|
|
# DeepSeek本地大模型智能语音评测配置指南
|
|||
|
|
|
|||
|
|
## 🎯 架构说明
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
录音(MP3)
|
|||
|
|
↓
|
|||
|
|
Whisper识别 → 文本
|
|||
|
|
↓
|
|||
|
|
DeepSeek分析 → 智能评分
|
|||
|
|
↓
|
|||
|
|
详细评测报告
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ 已完成的修改
|
|||
|
|
|
|||
|
|
### 1. 创建DeepSeek服务
|
|||
|
|
**文件:** `DeepSeekService.java`
|
|||
|
|
- 调用DeepSeek API进行智能评分
|
|||
|
|
- 支持语义理解("你好"="您好")
|
|||
|
|
- 提供详细反馈和建议
|
|||
|
|
|
|||
|
|
### 2. 集成评测流程
|
|||
|
|
**文件:** `VoiceEvaluationServiceImpl.java`
|
|||
|
|
- Whisper识别音频
|
|||
|
|
- DeepSeek智能评分
|
|||
|
|
- 多层降级机制
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 部署方案(3种)
|
|||
|
|
|
|||
|
|
### **方案1:使用Ollama(推荐)**
|
|||
|
|
|
|||
|
|
#### **优点:**
|
|||
|
|
- ✅ 部署最简单
|
|||
|
|
- ✅ 自动管理模型
|
|||
|
|
- ✅ GPU加速支持
|
|||
|
|
- ✅ OpenAI兼容接口
|
|||
|
|
|
|||
|
|
#### **部署步骤:**
|
|||
|
|
|
|||
|
|
**1. 安装Ollama**
|
|||
|
|
```bash
|
|||
|
|
# Windows
|
|||
|
|
# 下载:https://ollama.com/download
|
|||
|
|
|
|||
|
|
# Linux
|
|||
|
|
curl -fsSL https://ollama.com/install.sh | sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**2. 下载DeepSeek模型**
|
|||
|
|
```bash
|
|||
|
|
# 下载DeepSeek-R1模型(推荐,准确度高)
|
|||
|
|
ollama pull deepseek-r1:latest
|
|||
|
|
|
|||
|
|
# 或者下载更小的版本(速度快)
|
|||
|
|
ollama pull deepseek-r1:7b
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**3. 启动Ollama服务**
|
|||
|
|
```bash
|
|||
|
|
# Ollama会自动启动在 http://localhost:11434
|
|||
|
|
# 无需额外操作
|
|||
|
|
|
|||
|
|
# 验证服务
|
|||
|
|
curl http://localhost:11434/api/tags
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**4. 配置Java服务**
|
|||
|
|
|
|||
|
|
编辑`DeepSeekService.java`第27-28行(已默认配置):
|
|||
|
|
```java
|
|||
|
|
private static final String DEEPSEEK_URL = "http://localhost:11434/v1/chat/completions";
|
|||
|
|
private static final String MODEL_NAME = "deepseek-r1:latest";
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**5. 启动完整服务**
|
|||
|
|
```bash
|
|||
|
|
# Terminal 1: 启动Whisper
|
|||
|
|
cd Test/python
|
|||
|
|
python whisper_server.py
|
|||
|
|
|
|||
|
|
# Terminal 2: 启动Java后端
|
|||
|
|
cd Study-Vue-redis
|
|||
|
|
mvn clean package -DskipTests
|
|||
|
|
# 重启后端
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**6. 测试**
|
|||
|
|
|
|||
|
|
查看后端日志:
|
|||
|
|
```
|
|||
|
|
🎤 Whisper识别结果: 你好世界
|
|||
|
|
🧠 使用DeepSeek智能评分(语义理解)
|
|||
|
|
✅ DeepSeek智能评测完成: 得分=95, 反馈=发音清晰,表达准确
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### **方案2:使用vLLM(高性能)**
|
|||
|
|
|
|||
|
|
#### **优点:**
|
|||
|
|
- ⚡ 速度最快
|
|||
|
|
- 🔥 GPU推理优化
|
|||
|
|
- 📈 支持批处理
|
|||
|
|
|
|||
|
|
#### **部署步骤:**
|
|||
|
|
|
|||
|
|
**1. 安装vLLM**
|
|||
|
|
```bash
|
|||
|
|
pip install vllm
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**2. 启动DeepSeek服务**
|
|||
|
|
```bash
|
|||
|
|
python -m vllm.entrypoints.openai.api_server \
|
|||
|
|
--model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \
|
|||
|
|
--port 8000
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**3. 修改DeepSeekService配置**
|
|||
|
|
```java
|
|||
|
|
// 改为vLLM地址
|
|||
|
|
private static final String DEEPSEEK_URL = "http://localhost:8000/v1/chat/completions";
|
|||
|
|
private static final String MODEL_NAME = "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B";
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### **方案3:使用Docker(生产环境)**
|
|||
|
|
|
|||
|
|
#### **优点:**
|
|||
|
|
- 📦 环境隔离
|
|||
|
|
- 🔄 易于迁移
|
|||
|
|
- 🛡️ 稳定可靠
|
|||
|
|
|
|||
|
|
#### **Docker Compose配置:**
|
|||
|
|
|
|||
|
|
创建`docker-compose.yml`:
|
|||
|
|
```yaml
|
|||
|
|
version: '3'
|
|||
|
|
services:
|
|||
|
|
whisper:
|
|||
|
|
image: python:3.9
|
|||
|
|
volumes:
|
|||
|
|
- ./Test/python:/app
|
|||
|
|
working_dir: /app
|
|||
|
|
command: python whisper_server.py
|
|||
|
|
ports:
|
|||
|
|
- "5001:5001"
|
|||
|
|
deploy:
|
|||
|
|
resources:
|
|||
|
|
reservations:
|
|||
|
|
devices:
|
|||
|
|
- driver: nvidia
|
|||
|
|
count: 1
|
|||
|
|
capabilities: [gpu]
|
|||
|
|
|
|||
|
|
deepseek:
|
|||
|
|
image: ollama/ollama
|
|||
|
|
ports:
|
|||
|
|
- "11434:11434"
|
|||
|
|
volumes:
|
|||
|
|
- ollama_data:/root/.ollama
|
|||
|
|
deploy:
|
|||
|
|
resources:
|
|||
|
|
reservations:
|
|||
|
|
devices:
|
|||
|
|
- driver: nvidia
|
|||
|
|
count: 1
|
|||
|
|
capabilities: [gpu]
|
|||
|
|
|
|||
|
|
volumes:
|
|||
|
|
ollama_data:
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**启动:**
|
|||
|
|
```bash
|
|||
|
|
docker-compose up -d
|
|||
|
|
|
|||
|
|
# 下载DeepSeek模型
|
|||
|
|
docker exec -it <容器ID> ollama pull deepseek-r1:latest
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 DeepSeek配置优化
|
|||
|
|
|
|||
|
|
### **1. 调整温度参数(影响输出稳定性)**
|
|||
|
|
|
|||
|
|
编辑`DeepSeekService.java`第68行:
|
|||
|
|
```java
|
|||
|
|
requestBody.put("temperature", 0.3); // 0.1-0.9
|
|||
|
|
// 0.1 = 非常严格,输出一致
|
|||
|
|
// 0.3 = 平衡 ✅ 推荐
|
|||
|
|
// 0.7 = 更有创意
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **2. 调整最大Token数**
|
|||
|
|
|
|||
|
|
编辑`DeepSeekService.java`第164行:
|
|||
|
|
```java
|
|||
|
|
String response = chat(prompt, 500); // 增加到800
|
|||
|
|
// 500 = 简短反馈
|
|||
|
|
// 800 = 详细分析
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **3. 自定义评测标准**
|
|||
|
|
|
|||
|
|
编辑`DeepSeekService.java`第131-155行的提示词:
|
|||
|
|
```java
|
|||
|
|
private String buildEvaluationPrompt(String recognizedText, String standardText) {
|
|||
|
|
return String.format("""
|
|||
|
|
你是一位专业的中文语音评测专家...
|
|||
|
|
|
|||
|
|
评分标准:
|
|||
|
|
- 准确度: 重点考察语义准确性(可调整)
|
|||
|
|
- 完整度: 是否表达完整(可调整)
|
|||
|
|
- 流利度: 语言流畅性(可调整)
|
|||
|
|
- 发音: 发音清晰度(可调整)
|
|||
|
|
|
|||
|
|
特殊规则:
|
|||
|
|
- "你好"和"您好"视为等价 ✅
|
|||
|
|
- 语气词("嗯"、"啊")可忽略 ✅
|
|||
|
|
- 停顿不影响得分 ✅
|
|||
|
|
...
|
|||
|
|
""", standardText, recognizedText);
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 DeepSeek智能评分优势
|
|||
|
|
|
|||
|
|
### **对比传统算法:**
|
|||
|
|
|
|||
|
|
| 评测项 | 传统算法 | DeepSeek智能评分 |
|
|||
|
|
|-------|---------|-----------------|
|
|||
|
|
| **语义理解** | ❌ "你好"≠"您好" | ✅ 理解同义词 |
|
|||
|
|
| **语法检查** | ❌ 无法检查 | ✅ 自动检测错误 |
|
|||
|
|
| **流利度** | ❌ 简单统计 | ✅ 理解语言流畅性 |
|
|||
|
|
| **详细反馈** | ❌ 仅分数 | ✅ 具体建议 |
|
|||
|
|
| **适应性** | ❌ 固定规则 | ✅ 自适应调整 |
|
|||
|
|
|
|||
|
|
### **示例对比:**
|
|||
|
|
|
|||
|
|
**输入:**
|
|||
|
|
- 标准文本:"你好,今天天气很好"
|
|||
|
|
- 识别文本:"您好,今天的天气非常不错"
|
|||
|
|
|
|||
|
|
**传统算法:**
|
|||
|
|
```
|
|||
|
|
得分: 60分(文字不匹配)
|
|||
|
|
准确度: 40%
|
|||
|
|
建议: 无
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**DeepSeek智能评分:**
|
|||
|
|
```
|
|||
|
|
得分: 95分(语义正确)
|
|||
|
|
准确度: 98%(您好=你好,非常不错=很好)
|
|||
|
|
流利度: 95%(表达自然流畅)
|
|||
|
|
建议: 表达准确,可以保持
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 降级机制
|
|||
|
|
|
|||
|
|
系统会自动选择最佳评测方案:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. Whisper + DeepSeek ✅ 最佳(智能评分)
|
|||
|
|
↓ 失败
|
|||
|
|
2. Whisper单独评分 ⚡ 良好(简单算法)
|
|||
|
|
↓ 失败
|
|||
|
|
3. 百度API ☁️ 备用(云端服务)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**查看当前使用的方案(后端日志):**
|
|||
|
|
```
|
|||
|
|
🧠 使用DeepSeek智能评分(语义理解) ← 最佳
|
|||
|
|
📊 使用Whisper内置评分(DeepSeek不可用) ← 降级1
|
|||
|
|
☁️ 使用百度API进行评测(本地不可用) ← 降级2
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 测试验证
|
|||
|
|
|
|||
|
|
### **步骤1:启动所有服务**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Terminal 1: Whisper
|
|||
|
|
cd Test/python && python whisper_server.py
|
|||
|
|
|
|||
|
|
# Terminal 2: DeepSeek (Ollama)
|
|||
|
|
# 自动运行,无需操作
|
|||
|
|
|
|||
|
|
# Terminal 3: Java后端
|
|||
|
|
cd Study-Vue-redis && mvn spring-boot:run
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **步骤2:查看服务状态**
|
|||
|
|
|
|||
|
|
访问健康检查:
|
|||
|
|
```bash
|
|||
|
|
# Whisper
|
|||
|
|
curl http://localhost:5001/health
|
|||
|
|
|
|||
|
|
# DeepSeek
|
|||
|
|
curl http://localhost:11434/api/tags
|
|||
|
|
|
|||
|
|
# Java后端
|
|||
|
|
curl http://localhost:30091/actuator/health
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **步骤3:测试语音评测**
|
|||
|
|
|
|||
|
|
在APP中录音测试,查看后端日志:
|
|||
|
|
|
|||
|
|
**预期日志(成功):**
|
|||
|
|
```
|
|||
|
|
🎤 Whisper识别结果: 你好世界
|
|||
|
|
🧠 使用DeepSeek智能评分(语义理解)
|
|||
|
|
调用DeepSeek: 你是一位专业的语音评测专家...
|
|||
|
|
✅ DeepSeek响应成功
|
|||
|
|
✅ DeepSeek评测成功: 总分=95, 反馈=发音清晰,表达准确
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚙️ 性能优化
|
|||
|
|
|
|||
|
|
### **1. GPU加速(推荐)**
|
|||
|
|
|
|||
|
|
如果有NVIDIA显卡:
|
|||
|
|
```bash
|
|||
|
|
# 确认GPU可用
|
|||
|
|
nvidia-smi
|
|||
|
|
|
|||
|
|
# Ollama自动使用GPU,无需配置
|
|||
|
|
# vLLM需要安装CUDA版本
|
|||
|
|
pip install vllm[cuda]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**性能提升:**
|
|||
|
|
- CPU: ~5秒/次
|
|||
|
|
- GPU: ~0.5秒/次(10倍提升)
|
|||
|
|
|
|||
|
|
### **2. 模型量化**
|
|||
|
|
|
|||
|
|
使用量化模型减少内存和提升速度:
|
|||
|
|
```bash
|
|||
|
|
# 下载4-bit量化模型(推荐)
|
|||
|
|
ollama pull deepseek-r1:7b-q4
|
|||
|
|
|
|||
|
|
# 修改配置
|
|||
|
|
private static final String MODEL_NAME = "deepseek-r1:7b-q4";
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**效果:**
|
|||
|
|
- 内存占用:16GB → 4GB
|
|||
|
|
- 速度提升:2倍
|
|||
|
|
- 准确度损失:<5%
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 推荐配置
|
|||
|
|
|
|||
|
|
### **开发环境:**
|
|||
|
|
```
|
|||
|
|
Whisper: base模型(CPU)
|
|||
|
|
DeepSeek: deepseek-r1:7b-q4(CPU)
|
|||
|
|
评分方式: DeepSeek智能评分
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **生产环境:**
|
|||
|
|
```
|
|||
|
|
Whisper: small模型(GPU)
|
|||
|
|
DeepSeek: deepseek-r1:latest(GPU)
|
|||
|
|
评分方式: DeepSeek智能评分
|
|||
|
|
部署方式: Docker Compose
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 成本对比
|
|||
|
|
|
|||
|
|
| 方案 | 硬件要求 | 成本 | 速度 | 准确率 |
|
|||
|
|
|------|---------|------|------|--------|
|
|||
|
|
| **百度API** | 无 | 免费5万/天 | 快 | 高 |
|
|||
|
|
| **Whisper单独** | 4GB内存 | 免费 | 中 | 高 |
|
|||
|
|
| **Whisper+DeepSeek(CPU)** | 16GB内存 | 免费 | 慢 | ✅ 很高 |
|
|||
|
|
| **Whisper+DeepSeek(GPU)** | 8GB显存 | 免费 | ✅ 很快 | ✅ 很高 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ 总结
|
|||
|
|
|
|||
|
|
**DeepSeek智能语音评测优势:**
|
|||
|
|
1. ✅ 语义理解,智能评分
|
|||
|
|
2. ✅ 详细反馈和建议
|
|||
|
|
3. ✅ 完全本地化,数据私有
|
|||
|
|
4. ✅ 免费无限次使用
|
|||
|
|
5. ✅ 自动降级,高可用
|
|||
|
|
|
|||
|
|
**现在就可以开始使用!** 🎉
|