语义聚合控制器 (Semantic Aggregator)
语义聚合控制器是伪流式音频转写系统的核心模块,负责将多个音频片段的转录结果聚合成完整的语义单元(句子),并推送到下游模块(显示和翻译)。
主要功能
- 维护转录片段缓冲池:收集来自转录模块的片段,直到形成完整语义单元
- 判断语义完整性:使用ChatGPT进行few-shot学习,判断多个片段是否组成完整句子
- 重新转录:将多个片段的音频合并,进行整体重新转录,提高准确性
- 推送到下游:将聚合结果发送到显示模块和翻译模块
核心组件
SentenceCompletionDetector
使用ChatGPT进行few-shot学习,判断文本是否是一个完整的句子。
detector = SentenceCompletionDetector()
is_complete = detector.is_sentence_complete("你会学习到如何使用音频数据集") # False
is_complete = detector.is_sentence_complete("你会学习到如何使用音频数据集。") # True
SemanticAggregator
主要聚合控制器,负责缓冲、判断、重新转录和推送。
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超时时间(秒)
)
聚合判断逻辑
聚合器使用以下逻辑判断是否应该聚合并输出:
- 语义完整性:使用ChatGPT判断当前缓冲区中的文本是否形成完整句子
- 时间间隔:如果相邻片段之间的间隔超过阈值,认为是不同的语义单元
- 最大窗口:如果聚合的总时长超过阈值,强制聚合
- 最大片段数:如果聚合的片段数超过阈值,强制聚合
- 超时机制:如果长时间没有新片段,强制输出当前缓冲区内容
重新转录流程
- 获取所有片段的音频数据
- 合并音频数据
- 使用转录器重新转录合并后的音频
- 比较重新转录结果与原始聚合结果
- 如果有差异,更新显示并发送到翻译模块
使用示例
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
脚本测试聚合器功能:
# 设置OpenAI API密钥
export OPENAI_API_KEY=your_api_key
# 运行测试脚本
python -m aggregator.test_aggregator
注意事项
- 需要设置
OPENAI_API_KEY
环境变量才能使用ChatGPT进行句子完整性判断 - 音频片段目录需要包含所有需要重新转录的音频文件
- 转录器需要正确初始化,包括模型、设备和计算类型
- 回调函数需要正确处理聚合结果,包括显示和翻译