标准化与规范化之间的选择 | 数据预处理的关键

标准化(Standardization)与规范化(Normalization), 有何不同?

规范化(Normalization)

也称“归一化”,它将值重新缩放到 [0,1] 范围内。 它也被称为最小-最大缩放。

如果您希望不同的数据集处于相同的正比例上,这将非常有用。 它还为值创建了一个边界。

继续阅读

从“预测明天下雨的概率”说频率学派与贝叶斯学派

要计算天气事件这一非重复性质的单次事件的概率,我们通常不能直接应用频率主义学派的方法。相反,需要运用基于统计模型和当前环境数据的方法进行概率的估算。

频率主义学派的理论与解释局限性

频率主义学派认为,概率是大量相同条件下事件发生的长期频率。因此,对于无法重复实验验证的单个事件,如“明天下雨”这一预测,频率主义学派的理论并不适用。

继续阅读

柯尔莫戈洛夫复杂性(Kolmogorov Complexity)理论

定义

柯尔莫戈洛夫复杂性(Kolmogorov Complexity),是衡量一个对象信息内容大小的一种方法,它通过寻找描述该对象最短的二进制程序长度来定义。具体来说,一个对象的柯尔莫戈洛夫复杂性是指在给定的计算模型下,能够生成该对象的最短程序的长度。这个定义提供了一种量化对象信息量的方式,不依赖于具体的编码方式。

继续阅读

Langchain并不适用于生产环境。是因为…

在构建和运行自己的检索增强生成(RAG)系统时可能遇到的挑战。主要问题包括:

  • 幻觉问题:处理幻觉需要在RAG管道的每一步都采取反幻觉措施。这不是简单的“添加到提示中”的问题,而是需要在整个管道的每个设计决策中考虑“这如何影响幻觉?”。
  • 数据摄入问题:数据摄入听起来简单,但在生产使用中导入成千上万的文档和网页时,会遇到各种问题,如摄入是否顺畅、每个文档是否有清晰的审计日志、管道是否能够抵御失败等。
  • 引用/来源问题:Langchain可以快速原型和展示结果,但在向上级或CEO演示时,可能会被问到响应的来源或计算方式,Langchain不为你构建引用算法,你需要自己建立。
  • 查询相关性问题:在现实生活中,用户可能不知道如何查询,除非你明确构建了理解查询意图的过程,否则普通用户会像在Livechat中与真人聊天一样与聊天机器人交流。
  • 维护和MLOps问题:每当OpenAI发布新功能或新模型时,你的RAG管道如何受到影响?例如,某些客户的机器人开始用西班牙语回应正常的英语查询,这需要调查和修复。
  • 经济规模问题:自己构建时,开发成本“除以1”。而当OpenAI修复其LLM中的问题时,所有人都会受益。
  • 安全问题:虽然Langchain允许你控制文档的数据安全,但你需要考虑数据安全、聊天安全和聊天访问安全等所有方面。
  • 审计和分析问题:部署计划是否包括完整的审计轨迹以查看AI的说法和访问的其他方面?是否计划实施仪表板和分析以从聊天日志中获取洞察?
  • 持续开发问题:随着技术的发展,谁将负责持续的维护和开发?

虽然Langchain是一个很好的起点和教育工具,但它并不是为将真实用例带入生产而设计的。构建自己的RAG管道类似于自己组装服务器,虽然有趣,但在需要真正的生产使用时,运行自己的RAG系统会面临许多挑战。

解锁元自控力:高效管理诱惑,轻松实现积极生活

人们常常会说自己缺乏自控力,无法坚持健康饮食、定期锻炼、储蓄和每天早晨阅读或写作。

研究显示,高自控力的人在学业、心理健康、人际关系和控制冲动行为方面表现更好,甚至更快乐。

然而,好消息是,高自控力并不意味着不断与诱惑作斗争,真正能带来积极生活结果的自控力比通常所说的“意志力”和“自律”更为不费力。

研究发现,高自控力的人在日常生活中遇到的诱惑更少,他们擅长避免而非抵抗诱惑,并且在建立和打破习惯方面表现出色。

这些发现表明,高自控力的人可能更擅长预测潜在的自控失败并采取措施预防,从而实现了所谓的“元自控力”。

元自控力是指高度自控力的人通过预防和避免诱惑来管理自己的自控资源。

与其在面临诱惑时努力抵制,他们更善于提前预测可能的自控失败,并采取措施来避免陷入诱惑的境地。

他们可能会选择避免诱惑的环境,建立健康的习惯和规律,以减少需要进行努力型自控的机会。

通过这种方式,他们能够更有效地管理自己的自控资源,避免过度消耗,从而更轻松地保持自控力。

元自控力的关键在于提前规划和预防,而不是仅仅依靠在面临诱惑时的抵制。

JSON的替代方案

  1. Protocol Buffers(protobuf):Protocol Buffers是一种由Google开发的二进制序列化格式。它具有高效的序列化和反序列化速度,并且生成的数据大小较小。Protocol Buffers使用预定义的消息格式和架构,可以在多种编程语言之间进行交互。
  2. MessagePack:MessagePack是一种高效的二进制序列化格式,旨在比JSON更紧凑和快速。它具有类似JSON的数据结构,但使用二进制编码,可以减小数据大小并提高序列化和反序列化的速度。
  3. BSON(Binary JSON):BSON是一种二进制编码的JSON扩展,用于在MongoDB等数据库中存储和交换数据。它支持更多的数据类型和功能,如日期、二进制数据和正则表达式,并且比JSON更紧凑。
  4. Avro:Avro是一种数据序列化系统,旨在提供高效的二进制格式。它使用基于模式的编码,可以在序列化和反序列化时实现高性能。Avro还支持架构演化,可以在数据结构发生变化时保持向后和向前的兼容性。
    Pasted image 20240220115403.png

选择替代方案取决于具体需求和场景。如果需要高性能、紧凑的数据交换格式,可以考虑Protocol Buffers、MessagePack、BSON或Avro。这些替代方案都具有优化的序列化和反序列化速度,并且可以减小数据大小。

导致JSON缓慢的原因

  1. 解析开销:当JSON数据到达应用程序时,需要进行解析才能将其转换为可用的数据结构。解析过程可能相对较慢,特别是在处理大量或深度嵌套的JSON数据时。

  2. 序列化和反序列化:JSON要求在从客户端发送到服务器时对数据进行序列化(将对象编码为字符串),并在接收时进行反序列化(将字符串转换回可用对象)。这些步骤可能会带来开销并影响应用程序的整体速度。

  3. 字符串操作:JSON是基于文本的,严重依赖字符串操作来执行串联和解析等操作。与处理二进制数据相比,字符串处理速度可能较慢。

  4. 缺乏数据类型:JSON具有一组有限的数据类型(例如,字符串、数字、布尔值)。复杂的数据结构可能需要效率较低的表示形式,从而导致内存使用量增加和处理速度变慢。

  5. 冗长:JSON的人类可读设计可能导致冗长。冗余的键和重复的结构会增加有效负载的大小,从而导致更长的数据传输时间。

  6. 没有二进制支持:JSON缺乏对二进制数据的本机支持。在处理二进制数据时,开发人员通常需要将其编码和解码为文本,这可能效率较低。

  7. 深度嵌套:在某些情况下,JSON数据可以深度嵌套,需要递归解析和遍历。这种计算复杂性会减慢应用程序的速度,特别是在没有优化的情况下。

这些因素可能会导致JSON在某些情况下成为应用程序性能的瓶颈。了解这些问题有助于我们采取相应的优化措施,以提高应用程序的性能。

为OpenWRT开发配置交叉编译环境

在Linux环境中进行交叉编译是开发嵌入式系统常见的一种做法,特别是当开发环境和目标系统的架构不同的时候。例如,在OpenWRT这类定制化的Linux系统中,就经常需要使用交叉编译。下面将介绍为什么需要交叉编译,如何在Linux环境下安装交叉编译工具链,以及如何验证工具链是否安装正确。

继续阅读