---
document_type: "architecture_design"
service: "MOMENTRY_CORE"
title: "ASRX Large 取代 ASR 可行性分析"
date: "2026-04-01"
version: "V1.0"
status: "active"
owner: "Warren"
created_by: "OpenCode"
tags:
  - "asrx"
  - "large"
  - "可行性分析"
ai_query_hints:
  - "查詢 ASRX Large 取代 ASR 可行性分析 的內容"
  - "ASRX Large 取代 ASR 可行性分析 的主要目的是什麼？"
  - "如何操作或實施 ASRX Large 取代 ASR 可行性分析？"
---

# ASRX Large 取代 ASR 可行性分析

| 項目 | 內容 |
|------|------|
| 分析日期 | 2026-04-01 |
| 分析者 | OpenCode |
| 目標 | 評估是否可以用 ASRX large 完全取代 ASR |

---

## 執行摘要

### ❌ 不建議完全取代

**建議保留兩個處理器**，原因：
1. **效能差異巨大**（3-10倍）
2. **使用場景不同**
3. **資源消耗不同**
4. **向下兼容性**

---

## 功能對比

### ASR (faster-whisper)

```json
{
  "language": "zh",
  "language_probability": 0.9916,
  "segments": [
    {
      "start": 0.0,
      "end": 2.0,
      "text": "正常來講就是簡吉斯用完之後"
    }
  ]
}
```

**功能**：
- ✅ 語音轉文字
- ✅ 語言識別
- ✅ 句級時間戳

### ASRX Large (whisperx + large-v3)

```json
{
  "language": "zh",
  "segments": [
    {
      "start": 0.0,
      "end": 2.0,
      "text": "正常來講就是簡吉斯用完之後",
      "speaker_id": "SPEAKER_01",
      "words": [
        {"start": 0.0, "end": 0.5, "word": "正常", "speaker": "SPEAKER_01"},
        {"start": 0.5, "end": 1.0, "word": "來講", "speaker": "SPEAKER_01"},
        ...
      ]
    }
  ]
}
```

**功能**：
- ✅ 語音轉文字（更高準確度）
- ✅ 語言識別
- ✅ 句級時間戳
- ✅ **詞級時間戳**
- ✅ **說話人分離**
- ✅ **說話人ID**

---

## 效能對比

### 短影片 (159.6秒)

| 處理器 | 模型 | 時間 | 加速比 | 記憶體 |
|--------|------|------|--------|--------|
| **ASR** | tiny | 12.68s | 12.6x | ~2GB |
| **ASR** | base | ~25s | 6.4x | ~2.5GB |
| **ASR** | small | ~50s | 3.2x | ~3GB |
| **ASRX** | base + diarization | 30-60s | 2.7-5.3x | ~4GB |
| **ASRX** | large-v3 + diarization | **120-200s** | **0.8-1.3x** | **~6-8GB** |

### 長影片 (114分鐘)

| 處理器 | 預估時間 | 記憶體 |
|--------|---------|--------|
| **ASR** | ~9分鐘 | ~2GB |
| **ASRX large** | **~90-150分鐘** | **~6-8GB** |

**關鍵發現**：
- ASRX large 比 ASR 慢 **10-16 倍**
- 長影片處理時間從 9 分鐘增加到 **90-150 分鐘**
- 記憶體使用增加 **3-4 倍**

---

## 準確度對比

### Whisper 模型準確度（WER - Word Error Rate）

| 模型 | WER (英文) | WER (中文) | 相對準確度 |
|------|-----------|-----------|-----------|
| tiny | 7.5% | 12-15% | 基準 |
| base | 5.5% | 9-12% | +20% |
| small | 4.5% | 7-10% | +30% |
| medium | 3.5% | 6-8% | +40% |
| **large-v3** | **2.5%** | **5-7%** | **+50%** |

**結論**：
- large-v3 比 tiny 準確度提升 **50-60%**
- 但代價是處理時間增加 **10-16 倍**

---

## 使用場景分析

### 場景 1：快速預覽（ASR 勝）

```
需求：快速查看影片內容
時間限制：< 30秒
準確度要求：中等
說話人分離：不需要

推薦：ASR (tiny)
理由：
- 12.68s vs 120-200s
- 快速索引，後續可精確處理
```

### 場景 2：會議記錄（ASRX 勝）

```
需求：完整會議記錄
時間限制：無
準確度要求：高
說話人分離：必需

推薦：ASRX (large-v3)
理由：
- 需要識別不同發言人
- 準確度優先
- 可接受較長處理時間
```

### 場景 3：字幕生成（ASR 中等模型勝）

```
需求：生成字幕
時間限制：< 5分鐘
準確度要求：高
說話人分離：不需要

推薦：ASR (small/medium)
理由：
- 字幕不需要說話人信息
- 準確度足夠
- 處理時間合理
```

### 場景 4：播客/訪談（ASRX 勝）

```
需求：播客節目轉錄
時間限制：無
準確度要求：高
說話人分離：必需

推薦：ASRX (base/large)
理由：
- 多人對話需要區分
- 準確度重要
```

### 場景 5：新聞/演講（ASR 勝）

```
需求：單一演講者轉錄
時間限制：< 1分鐘
準確度要求：中等
說話人分離：不需要（單人）

推薦：ASR (base)
理由：
- 單一說話人，無需分離
- 快速處理
```

---

## 架構建議

### 方案 A：保留雙處理器（推薦）

```
Momentry 處理管道：

[影片輸入]
    ↓
[快速分析] → ASR (tiny/base) → 快速索引
    ↓
[深度分析] → ASRX (large) → 完整記錄（可選）
```

**優點**：
- ✅ 靈活選擇
- ✅ 效能優化
- ✅ 成本控制
- ✅ 向下兼容

**缺點**：
- ⚠️ 需維護兩個處理器
- ⚠️ 配置較複雜

### 方案 B：ASRX 取代 ASR（不推薦）

```
Momentry 處理管道：

[影片輸入]
    ↓
[ASRX large] → 完整分析
```

**優點**：
- ✅ 單一處理器
- ✅ 功能完整
- ✅ 最高準確度

**缺點**：
- ❌ 效能下降 10-16 倍
- ❌ 記憶體增加 3-4 倍
- ❌ 成本大幅增加
- ❌ 不適合快速預覽

### 方案 C：ASRX 可配置模式（折衷）

```python
class ASRXProcessor:
    def __init__(self, mode="auto"):
        """
        mode:
        - "fast": 使用 tiny 模型，無說話人分離（等同 ASR）
        - "balanced": 使用 base 模型，輕量說話人分離
        - "accurate": 使用 large 模型，完整說話人分離
        """
        if mode == "fast":
            self.model = "tiny"
            self.diarization = False
        elif mode == "balanced":
            self.model = "base"
            self.diarization = True
        elif mode == "accurate":
            self.model = "large-v3"
            self.diarization = True
```

**優點**：
- ✅ 單一處理器
- ✅ 靈活配置
- ✅ 向下兼容

**缺點**：
- ⚠️ 配置複雜度增加
- ⚠️ 需要維護多種模式

---

## 成本分析

### 硬體資源

| 處理器 | CPU | GPU | 記憶體 | 儲存 |
|--------|-----|-----|--------|------|
| **ASR (tiny)** | 低 | 可選 | 2GB | 75MB |
| **ASR (base)** | 中 | 可選 | 2.5GB | 150MB |
| **ASRX (large)** | 高 | 建議 | 6-8GB | 3GB+ |

### 處理時間成本

以 100 部影片（平均 30 分鐘）為例：

| 方案 | 總處理時間 | 記憶體峰值 |
|------|-----------|-----------|
| **ASR (tiny)** | 15 小時 | 2GB |
| **ASRX (large)** | **150-250 小時** | 6-8GB |

### 雲端成本（AWS p3.2xlarge）

| 方案 | 每小時成本 | 總成本 |
|------|-----------|--------|
| **ASR** | $0.90 | $13.50 |
| **ASRX** | $0.90 | **$135-225** |

**結論**：ASRX large 成本為 ASR 的 **10-17 倍**

---

## 技術實現

### ASRX Large 輸出格式

```json
{
  "language": "zh",
  "segments": [
    {
      "start": 0.0,
      "end": 2.0,
      "text": "正常來講就是簡吉斯用完之後",
      "speaker_id": "SPEAKER_01",
      "confidence": 0.95,
      "words": [
        {
          "start": 0.0,
          "end": 0.5,
          "word": "正常",
          "speaker": "SPEAKER_01",
          "confidence": 0.98
        }
      ]
    }
  ],
  "speakers": [
    {
      "id": "SPEAKER_01",
      "total_time": 120.5,
      "segment_count": 45
    }
  ]
}
```

### 向下兼容方案

如果決定用 ASRX 取代 ASR，需要：

```python
def get_asr_compatible_output(asrx_result):
    """將 ASRX 輸出轉換為 ASR 格式（向下兼容）"""
    return {
        "language": asrx_result["language"],
        "language_probability": 0.99,
        "segments": [
            {
                "start": seg["start"],
                "end": seg["end"],
                "text": seg["text"]
            }
            for seg in asrx_result["segments"]
        ]
    }
```

---

## 決策矩陣

| 因素 | ASR | ASRX large | 權重 | 得分 |
|------|-----|-----------|------|------|
| **處理速度** | 10 | 2 | 30% | ASR勝 |
| **準確度** | 6 | 10 | 25% | ASRX勝 |
| **功能完整** | 4 | 10 | 20% | ASRX勝 |
| **資源消耗** | 10 | 3 | 15% | ASR勝 |
| **維護成本** | 8 | 6 | 10% | ASR勝 |
| **總分** | **7.6** | **5.9** | 100% | **ASR勝** |

---

## 最終建議

### ✅ 保留兩個處理器（強烈推薦）

**實施方案**：

```rust
pub enum ASRMode {
    Fast,      // ASR (tiny/base) - 快速轉錄
    Accurate,  // ASR (small/medium) - 準確轉錄
    Diarized,  // ASRX (base/large) - 說話人分離
}

impl VideoProcessor {
    pub fn process_audio(&self, mode: ASRMode) -> Result<ASRResult> {
        match mode {
            ASRMode::Fast => self.run_asr("tiny"),
            ASRMode::Accurate => self.run_asr("medium"),
            ASRMode::Diarized => self.run_asrx("base"),
        }
    }
}
```

**API 設計**：

```bash
# 快速轉錄（預設）
POST /api/v1/process
{
  "file_uuid": "...",
  "processors": ["asr"]  # 使用 ASR tiny
}

# 準確轉錄
POST /api/v1/process
{
  "file_uuid": "...",
  "processors": ["asr:medium"]
}

# 說話人分離
POST /api/v1/process
{
  "file_uuid": "...",
  "processors": ["asrx"]  # 使用 ASRX base
}

# 完整分析
POST /api/v1/process
{
  "file_uuid": "...",
  "processors": ["asrx:large"]
}
```

---

## 實施建議

### Phase 1：保留現狀（已完成）
- ✅ ASR 處理器（tiny/base/small/medium）
- ✅ ASRX 處理器（base/large）

### Phase 2：統一介面（建議）
- 創建 `AudioProcessor` 統一介面
- 支援模式選擇
- 向下兼容現有 API

### Phase 3：優化 ASRX（可選）
- 預下載模型
- GPU 加速
- 批次處理

---

## 結論

### ❌ 不建議完全取代

**原因**：
1. 效能差異太大（10-16倍）
2. 使用場景不同
3. 成本差異顯著
4. 靈活性降低

### ✅ 建議保留雙處理器

**理由**：
1. 滿足不同場景需求
2. 效能與準確度平衡
3. 成本可控
4. 向下兼容

### 📋 未來方向

考慮將 ASR 和 ASRX 合併為統一的 `AudioProcessor`，支援多種模式：

```
AudioProcessor
├── mode: fast (ASR tiny)
├── mode: balanced (ASR medium)
└── mode: diarized (ASRX base)
```

這樣可以：
- 統一 API
- 靈活配置
- 向下兼容
- 降低維護複雜度
