模型简介
模型特点
模型能力
使用案例
🚀 TEN对话轮次检测模型
TEN Turn Detection是一款先进的智能对话轮次检测模型,专为实现人类与AI之间自然、动态的交流而设计。该模型能够精准检测自然对话中的轮次转换信号,支持基于上下文的打断机制,有效提升人机对话的自然度。
🚀 快速开始
TEN Turn Detection在GitHub上也有提供,链接为 TEN-framework/ten-turn-detection。
📦 安装指南
pip install "transformers>=4.45.0"
pip install "torch>=2.0.0"
模型权重
TEN Turn Detection模型可在HuggingFace上获取。
💻 使用示例
基础用法
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
# Load model and tokenizer
model_id = 'TEN-framework/TEN_Turn_Detection'
model = AutoModelForCausalLM.from_pretrained(model_id, trust_remote_code=True, torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
# Move model to GPU
model = model.cuda()
model.eval()
# Function for inference
def analyze_text(text, system_prompt=""):
inf_messages = [{"role":"system", "content":system_prompt}] + [{"role":"user", "content":text}]
input_ids = tokenizer.apply_chat_template(
inf_messages,
add_generation_prompt=True,
return_tensors="pt"
).cuda()
with torch.no_grad():
outputs = model.generate(
input_ids,
max_new_tokens=1,
do_sample=True,
top_p=0.1,
temperature=0.1,
pad_token_id=tokenizer.eos_token_id
)
response = outputs[0][input_ids.shape[-1]:]
return tokenizer.decode(response, skip_special_tokens=True)
# Example usage
text = "Hello I have a question about"
result = analyze_text(text)
print(f"Input: '{text}'")
print(f"Turn Detection Result: '{result}'")
✨ 主要特性
- 上下文感知的轮次管理:TEN Turn Detection通过分析语言模式和语义上下文,准确识别对话轮次的完成点。这一能力使系统能够智能处理打断情况,根据上下文判断合适的打断时机,确保在各种对话场景中都能保持自然流畅的交流。
- 多语言轮次检测支持:该模型全面支持中英文两种语言,能够在多语言对话中准确识别轮次转换信号和完成信号。
- 卓越的性能:与多个开源解决方案相比,TEN在公开的测试数据集上的各项指标均表现出色。
📚 详细文档
数据集准备
我们已经开源了TEN-Turn-Detection测试集,这是一个专门为评估AI对话系统轮次检测能力而设计的双语(中文和英文)对话输入集合。该数据集由三个不同的部分组成:
- wait.txt:包含请求对话暂停或终止的表达。
- unfinished.txt:包含未完成的对话输入,语句被截断。
- finished.txt:提供跨多个领域的完整对话输入。
检测性能
我们使用测试数据集对多个开源的轮次检测模型进行了全面评估:
语言 | 模型 | 已完成准确率 | 未完成准确率 | 等待准确率 |
---|---|---|---|---|
英语 | 模型A | 59.74% | 86.46% | N/A |
英语 | 模型B | 71.61% | 96.88% | N/A |
英语 | TEN Turn Detection | 90.64% | 98.44% | 91% |
中文 | 模型B | 74.63% | 88.89% | N/A |
中文 | TEN Turn Detection | 98.90% | 92.74% | 92% |
⚠️ 重要提示
- 模型A不支持中文语言处理。
- 模型A和模型B均不支持“等待”状态检测。
模型格式选择
选择合适的模型格式取决于你的硬件能力和内存限制。
模型格式 | 精度 | 内存使用 | 设备要求 | 最佳用例 |
---|---|---|---|---|
BF16(Brain Float 16) | 非常高 | 高 | 支持BF16加速的GPU/CPU | 高速推理,减少内存使用 |
F16(Float 16) | 高 | 高 | 支持FP16加速的GPU/CPU | 当BF16不可用时进行推理 |
Q4_K | 中低 | 低 | CPU或低显存设备 | 内存受限的推理 |
Q6_K | 中等 | 适中 | 内存较大的CPU | 量化后获得更好的准确率 |
Q8_0 | 高 | 适中 | 显存适中的GPU/CPU | 量化模型中准确率最高 |
IQ3_XS | 低 | 非常低 | 超低内存设备 | 最大内存效率,低准确率 |
IQ3_S | 低 | 非常低 | 低内存设备 | 比IQ3_XS更实用 |
IQ3_M | 中低 | 低 | 低内存设备 | 比IQ3_S准确率更高 |
Q4_0 | 低 | 低 | 基于ARM的/嵌入式设备 | Llama.cpp自动优化ARM推理 |
超低比特(IQ1/2_*) | 非常低 | 极低 | 小型边缘/嵌入式设备 | 在极紧的内存中运行模型;低准确率 |
混合(例如 bf16_q8_0 ) |
中高 | 中等 | 支持混合精度的硬件 | 平衡性能和内存,关键层接近FP精度 |
BF16(Brain Float 16)
- 这是一种16位浮点格式,专为更快的计算而设计,同时保持良好的精度。
- 与FP32具有相似的动态范围,但内存使用更低。
- 如果你的硬件支持BF16加速(请检查设备规格),建议使用。
- 与FP32相比,它是高性能推理且内存占用减少的理想选择。
📌 使用场景:
- 硬件具有原生BF16支持(例如,较新的GPU、TPU)。
- 希望在节省内存的同时获得更高的精度。
- 计划将模型重新量化为其他格式。
📌 避免使用场景:
- 硬件不支持BF16(可能会回退到FP32并运行较慢)。
- 需要与缺乏BF16优化的旧设备兼容。
F16(Float 16)
- 这是一种16位浮点格式,具有高精度,但取值范围比BF16小。
- 适用于大多数支持FP16加速的设备(包括许多GPU和一些CPU)。
- 数值精度略低于BF16,但通常足以进行推理。
📌 使用场景:
- 硬件支持FP16但不支持BF16。
- 需要在速度、内存使用和准确性之间取得平衡。
- 在GPU或其他针对FP16计算优化的设备上运行。
📌 避免使用场景:
- 设备缺乏原生FP16支持(可能运行比预期慢)。
- 内存有限。
混合精度模型(例如 bf16_q8_0
、f16_q4_K
)
这些格式选择性地量化非关键层,同时保持关键层的全精度(例如,注意力和输出层)。
- 例如
bf16_q8_0
表示全精度BF16核心层 + 量化Q8_0其他层。 - 在内存效率和准确性之间取得平衡,比全量化模型有所改进,而无需BF16/F16的全部内存。
📌 使用场景:
- 需要比仅量化模型更高的准确性,但无法承受在所有地方使用全BF16/F16。
- 设备支持混合精度推理。
- 希望在受限硬件上为生产级模型优化权衡。
📌 避免使用场景:
- 目标设备不支持混合或全精度加速。
- 在超严格的内存限制下运行(在这种情况下,使用全量化格式)。
量化模型(Q4_K、Q6_K、Q8等)
量化可以在尽可能保持准确性的同时减小模型大小和内存使用。
- 低比特模型(Q4_K):最适合最小的内存使用,但可能精度较低。
- 高比特模型(Q6_K、Q8_0):准确性更好,但需要更多内存。
📌 使用场景:
- 在CPU上运行推理,需要优化模型。
- 设备显存较低,无法加载全精度模型。
- 希望在保持合理准确性的同时减少内存占用。
📌 避免使用场景:
- 需要最高的准确性(全精度模型更适合)。
- 硬件有足够的显存用于更高精度的格式(BF16/F16)。
极低比特量化(IQ3_XS、IQ3_S、IQ3_M、Q4_K、Q4_0)
这些模型针对非常高的内存效率进行了优化,非常适合低功耗设备或大规模部署,其中内存是关键限制因素。
- IQ3_XS:超低比特量化(3位),具有非常高的内存效率。
- 使用场景:最适合超低内存设备,即使Q4_K也太大。
- 权衡:与高比特量化相比,准确性较低。
- IQ3_S:小块大小,以实现最大内存效率。
- 使用场景:最适合低内存设备,其中IQ3_XS过于激进。
- IQ3_M:中等块大小,比IQ3_S具有更好的准确性。
- 使用场景:适用于低内存设备,其中IQ3_S过于受限。
- Q4_K:4位量化,具有逐块优化,以提高准确性。
- 使用场景:最适合低内存设备,其中Q6_K太大。
- Q4_0:纯4位量化,针对ARM设备进行了优化。
- 使用场景:最适合基于ARM的设备或低内存环境。
超低比特量化(IQ1_S、IQ1_M、IQ2_S、IQ2_M、IQ2_XS、IQ2_XSS)
- 超低比特量化(1 - 2位),具有极高的内存效率。
- 使用场景:最适合需要将模型放入非常受限的内存中的情况。
- 权衡:准确性非常低。可能无法按预期运行。使用前请充分测试。
量子网络监控测试
如果你觉得这些模型有用,可以帮助我测试我的人工智能驱动的量子网络监控助手,进行量子就绪安全检查: 👉 量子网络监控
量子网络监控服务的完整开源代码可在我的GitHub仓库中找到(名称中包含NetworkMonitor的仓库):量子网络监控源代码。如果你想自己进行模型量化,也可以找到我使用的代码 GGUFModelBuilder。
测试方法
选择一个AI助手类型:
TurboLLM
(GPT-4.1-mini)HugLLM
(Hugging Face开源模型)TestLLM
(仅实验性CPU)
测试内容
我正在挑战小型开源模型在AI网络监控中的极限,具体包括:
- 针对实时网络服务进行函数调用。
- 探索模型可以多小,同时仍能处理:
- 自动化Nmap安全扫描。
- 量子就绪检查。
- 网络监控任务。
不同助手介绍
- TestLLM(当前实验模型,在Hugging Face Docker空间的2个CPU线程上运行llama.cpp):
- ✅ 零配置设置。
- ⏳ 加载时间30秒(推理速度慢,但无API成本)。由于成本低,没有令牌限制。
- 🔧 寻求帮助! 如果你对边缘设备AI感兴趣,让我们合作!
- TurboLLM(使用gpt-4.1-mini):
- 性能非常好,但不幸的是,OpenAI按令牌收费。因此,令牌使用受到限制。
- 创建自定义cmd处理器,在量子网络监控代理上运行.NET代码。
- 实时网络诊断和监控。
- 安全审计。
- 渗透测试(Nmap/Metasploit)。
- HugLLM(最新的开源模型):
- 🌐 在Hugging Face推理API上运行。使用Novita托管的最新模型表现相当不错。
测试命令示例
"Give me info on my websites SSL certificate"
"Check if my server is using quantum safe encyption for communication"
"Run a comprehensive security audit on my server"
"Create a cmd processor to .. (what ever you want)"
注意,你需要安装量子网络监控代理才能运行.NET代码。这是一个非常灵活和强大的功能,请谨慎使用!
🔧 技术细节
量化方法测试
测试一种新的量化方法,使用规则将重要层提升到标准imatrix使用的水平之上。发现标准IMatrix在低比特量化和MOE模型中表现不佳,因此使用llama.cpp --tensor-type来提升选定的层。请参考 使用llama.cpp进行层提升。这种方法会创建更大的模型文件,但可以提高给定模型大小的精度。
模型原理
TEN Turn Detection利用基于Transformer的语言模型(Qwen2.5 - 7B)进行语义分析的多层方法。该模型将用户的文本分为三种关键状态:
- 已完成(finished):用户表达了完整的想法并期望得到回应的完整语句。例如:“Hey there I was wondering can you help me with my order”
- 等待(wait):用户明确指示AI不要说话的语句。例如:“Shut up”
- 未完成(unfinished):用户暂时停顿但打算继续说话的明显未完成语句。例如:“Hello I have a question about”
这三种分类状态使TEN系统能够通过智能管理轮次转换,减少尴尬的打断,同时保持对话流畅,创造自然的对话动态。
📄 许可证
本项目采用Apache 2.0许可证。
最终说明
我自掏腰包资助用于创建这些模型文件的服务器、运行量子网络监控服务,并支付从Novita和OpenAI进行推理的费用。模型创建和量子网络监控项目背后的所有代码都是开源的。请随意使用你认为有用的任何内容。
如果你欣赏这些工作,请考虑请我喝杯咖啡 ☕。你的支持有助于支付服务成本,并让我为大家提高令牌限制。
我也欢迎工作机会或赞助。
感谢你的支持!😊






