关于大模型分词(tokenization),大神Karpathy刚刚推荐了一篇必读新论文。
主题是:自动检测大模型中那些会导致“故障”的token。
简单来说,由于大模型tokenizer的创建和模型训练是分开的,可能导致某些token在训练中很少、甚至完全没出现过。这些“训练不足”(under-trained)的token会导致模型产生异常输出。
最经典的例子,就是SolidGoldMagikarp——
这个单词一度让ChatGPT“胡言乱语”。只要prompt里包含这个词,ChatGPT就开始文不对题,生成一些混乱的输出:
现在,来自Cohere的研究人员针对这个问题,提出检测“故障”token的有效方法,他们还发现:在多个主流开源大语言模型上,包括Llama系列、Mistral系列在内,训练不足的token都在不同程度上普遍存在。
p.s. Cohere是Transformer最年轻作者Aidan Gomez创办的公司,此前推出了Command R系列开源大模型。去年6月,该公司估值达到了22亿美元。
研究人员提出的方法主要包括三个步骤。
首先,通过检查tokenizer词汇表并观察其编码/解码行为,来分析tokenizer,找出其中特殊类别的token,比如不完整的UTF-8序列等。
然后,根据模型架构计算识别指标,找出嵌入向量异常的token,列入“训练不足”候选名单。
举个例子,对于tied embedding模型,利用一组已知的未使用的embedding,通过主成分分析去除unembedding矩阵中的常数成分。
接着计算其余token和这些未使用embedding的余弦距离,作为“训练不足”指标。
而对于non-tied embedding的模型,可以直接采用embedding向量的L2范数来检测。
最后,通过特定prompt来进行验证,看看候选token们是否确实超出了训练数据的分布,会引发异常输出。
常见类型包括:
研究人员还发现,词汇表较大的模型,“训练不足”token的数量也会明显增多。
因为大词汇表意味着更稀疏的token分布和更细粒度的token切分,这必然会导致更多低频token和无意义的token残片,增加“训练不足”token的比例。同时,大词汇表也给模型训练带来了更大的优化难度。
值得注意的是,论文提到,基于相同tokenizer的模型表现相似,而不同的tokenizer实现、配置、训练数据,会导致不同模型间“训练不足”token的明显差异。
论文认为,优化词汇表结构和tokenizer算法,是解决token训练不足问题的关键。
他们也提出了一些建议:
本文来自微信公众号”量子位“
【开源免费】graphrag是微软推出的RAG项目,与传统的通过 RAG 方法使用向量相似性作为搜索技术不同,GraphRAG是使用知识图谱在推理复杂信息时大幅提高问答性能。
项目地址:https://github.com/microsoft/graphrag
【开源免费】Dify是最早一批实现RAG,Agent,模型管理等一站式AI开发的工具平台,并且项目方一直持续维护。其中在任务编排方面相对领先对手,可以帮助研发实现像字节扣子那样的功能。
项目地址:https://github.com/langgenius/dify
【开源免费】RAGFlow是和Dify类似的开源项目,该项目在大文件解析方面做的更出色,拓展编排方面相对弱一些。
项目地址:https://github.com/infiniflow/ragflow/tree/main
【开源免费】phidata是一个可以实现将数据转化成向量存储,并通过AI实现RAG功能的项目
项目地址:https://github.com/phidatahq/phidata
【开源免费】TaskingAI 是一个提供RAG,Agent,大模型管理等AI项目开发的工具平台,比LangChain更强大的中间件AI平台工具。
项目地址:https://github.com/TaskingAI/TaskingAI
【开源免费】LangGPT 是一个通过结构化和模板化的方法,编写高质量的AI提示词的开源项目。它可以让任何非专业的用户轻松创建高水平的提示词,进而高质量的帮助用户通过AI解决问题。
项目地址:https://github.com/langgptai/LangGPT/blob/main/README_zh.md
在线使用:https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0