llama.cpp-模型加载阶段
概述
如下图所示,是llama.cpp加载GGUF格式模型文件时的调用流程:

- 首先根据模型配置参数确定模型推理的后端设备类型和模型调用方式;
- 加载获取模型架构类型信息;
- 加载模型的超参数,包括模型名、词表大小、嵌入向量大小、模型层数等模型结构相关的超参数;
如下图所示,是llama.cpp加载GGUF格式模型文件时的调用流程:
LLM的原始输出是一个 logits 列表,该列表中的每个元素对应一个词元的预测概率,基于它们选择下一个预测的token, 这个过程称为采样。目前llama.cpp
存在多种采样方法可供选择,它们适用于不同的应用场景。 例如,在一些自然语言处理任务中,可能会采用贪心采样(Greedy Sampling)方法,即总是选择具有最高概率的token作为下一个 token。 这种方法简单直接,但可能会导致生成的文本缺乏多样性。 另一种常见的采样方法是随机采样(Random Sampling),它会根据 token 的概率分布进行随机选择。虽然这种方法增加了生成文本的多样性, 但也可能引入一些不太合理的选择。 为了在多样性和合理性之间取得平衡,还有一些更复杂的采样方法,如基于温度的采样(Temperature-based Sampling)。通过调整温度参数, 可以控制概率分布的平滑程度,从而影响采样的随机性。 此外,还有一些基于束搜索(Beam Search)的采样方法,它会同时考虑多个可能的序列,并根据一定的评估标准选择最优的序列作为输出。 不同的采样方法在不同的场景下具有各自的优势和局限性,选择合适的采样方法对于生成高质量的文本至关重要。
MiniCPM 是面壁与清华大学自然语言处理实验室共同开源的系列端侧大语言模型,主体语言模型 MiniCPM-1B
仅有 12亿(1.2B)的非词嵌入参数量。
如下图所示,是MiniCPMV模型的多模态推理流程图。如果有图片输入,会在文本字段中添加 (<image>./</image>)
占位符号,表示需要基于该图片特征进行内容的生成,当然也可以支持多个图片的输入,简单示例如下:
1 | (<image>./</image>)What is this picture? |
1 | (<image>./</image>)(<image>./</image>)What is those pictures? |
那么从图片的像素特征空间转到语言模型特征空间后,其等效的文本token长度固定为64
,多张图片的token长度则对应为64的倍数。
CTC,全称是Connectionist Temporal Classification,中文译为连接时序分类。特别适用于处理序列数据,例如语音识别、手写识别和机器翻译等任务,其中输入序列和输出序列的长度可能不一致。 更具体地说,CTC 解决了序列标注问题中标签与输入长度不匹配的难题。传统的序列标注方法要求输入序列和输出序列长度一致,而 CTC 允许输出序列比输入序列短,并引入了空白符(blank symbol)来处理重复和不必要的标签。
目前板端部署的语音模型是通义千问的SenseVoice Small模型,具有如下优点:
在语音特征前添加四个嵌入作为输入传递给编码器:
语音模型常用的语音特征类型如下:
在语音活动检测(VAD)中,有多种模型可供选择,每种模型都有其独特的特点和应用场景。
Webrtc-VAD
是一种广泛应用的语音活动检测模型,它基于语音信号的能量和过零率等特征进行检测。SileroVAD
则采用了深度学习技术,通过对大量语音数据的学习,能够更准确地检测语音活动。FSMN-VAD
结合了前馈序列记忆网络,在处理长语音序列时表现出色。
这些模型在不同的环境和应用中都发挥着重要作用。例如,在电话会议中,Webrtc-VAD 可以有效地过滤背景噪声,提高语音质量;在智能语音助手等场景中,SileroVAD 和 FSMN-VAD 能够更准确地识别用户的语音指令。
未来,随着技术的不断发展,语音活动检测模型将不断改进和创新,为语音通信和交互提供更好的支持。