# 语义聚合控制器 (Semantic Aggregator) 语义聚合控制器是伪流式音频转写系统的核心模块,负责将多个音频片段的转录结果聚合成完整的语义单元(句子),并推送到下游模块(显示和翻译)。 ## 主要功能 1. **维护转录片段缓冲池**:收集来自转录模块的片段,直到形成完整语义单元 2. **判断语义完整性**:使用ChatGPT进行few-shot学习,判断多个片段是否组成完整句子 3. **重新转录**:将多个片段的音频合并,进行整体重新转录,提高准确性 4. **推送到下游**:将聚合结果发送到显示模块和翻译模块 ## 核心组件 ### SentenceCompletionDetector 使用ChatGPT进行few-shot学习,判断文本是否是一个完整的句子。 ```python detector = SentenceCompletionDetector() is_complete = detector.is_sentence_complete("你会学习到如何使用音频数据集") # False is_complete = detector.is_sentence_complete("你会学习到如何使用音频数据集。") # True ``` ### SemanticAggregator 主要聚合控制器,负责缓冲、判断、重新转录和推送。 ```python aggregator = SemanticAggregator( on_display=display_callback, # 显示回调 on_translate=translate_callback, # 翻译回调 transcriber=transcriber, # 转录器实例 segments_dir="dataset/audio/segments", # 音频片段目录 max_window=5.0, # 最大聚合时长(秒) max_segments=5, # 最大聚合片段数 min_gap=0.8, # 触发聚合的最小间隔(秒) force_flush_timeout=3.0 # 强制flush超时时间(秒) ) ``` ## 聚合判断逻辑 聚合器使用以下逻辑判断是否应该聚合并输出: 1. **语义完整性**:使用ChatGPT判断当前缓冲区中的文本是否形成完整句子 2. **时间间隔**:如果相邻片段之间的间隔超过阈值,认为是不同的语义单元 3. **最大窗口**:如果聚合的总时长超过阈值,强制聚合 4. **最大片段数**:如果聚合的片段数超过阈值,强制聚合 5. **超时机制**:如果长时间没有新片段,强制输出当前缓冲区内容 ## 重新转录流程 1. 获取所有片段的音频数据 2. 合并音频数据 3. 使用转录器重新转录合并后的音频 4. 比较重新转录结果与原始聚合结果 5. 如果有差异,更新显示并发送到翻译模块 ## 使用示例 ```python from display.display import OutputRenderer from translator.translator import NLLBTranslator from transcribe.transcribe import AudioTranscriber, TranscriptionResult from aggregator.semantic_aggregator import SemanticAggregator # 初始化各个模块 renderer = OutputRenderer() translator = NLLBTranslator() transcriber = AudioTranscriber(model="small", device="cuda") # 回调函数 def display_callback(sentence_id, text, state): renderer.display(sentence_id, text, state) def translate_callback(sentence_id, text): translation = translator.translate(text) print(f"[翻译] 句子 {sentence_id}: {translation}") # 初始化聚合器 aggregator = SemanticAggregator( on_display=display_callback, on_translate=translate_callback, transcriber=transcriber ) # 添加转录结果 for result in transcription_results: aggregator.add_segment(result) # 最后强制刷新缓冲区 aggregator.flush(force=True) ``` ## 测试 可以使用 `test_aggregator.py` 脚本测试聚合器功能: ```bash # 设置OpenAI API密钥 export OPENAI_API_KEY=your_api_key # 运行测试脚本 python -m aggregator.test_aggregator ``` ## 注意事项 1. 需要设置 `OPENAI_API_KEY` 环境变量才能使用ChatGPT进行句子完整性判断 2. 音频片段目录需要包含所有需要重新转录的音频文件 3. 转录器需要正确初始化,包括模型、设备和计算类型 4. 回调函数需要正确处理聚合结果,包括显示和翻译