- 博客(231)
- 收藏
- 关注
原创 Python 代码质量:最佳实践与工具(2)
通常,这些规范主要是表面上的(即与代码外在形式相关),这意味着它们不会改变代码的逻辑结果,尽管某些风格选择确实可以防止常见的逻辑错误。是一个过程,开发者在将代码合并到主分支或生产代码库之前,相互检查和评估彼此的代码,以确保其符合质量标准。当然,此表格并未详尽列出实现代码质量的所有策略、技术和工具,但它提供了一个良好的起点。它不仅改进了被审查的代码,还帮助开发者成长、学习,并在整个团队中共同推动编码标准和最佳实践的实施。这是一个通常添加到软件项目根目录中的文档,通常是简短的指南,提供有关项目的必要信息。
2025-04-08 14:25:49
600
原创 LLM(14):模型的长序列问题
如果你不熟悉 RNNs,不用担心——不需要详细了解 RNN 的工作原理就能跟随此处的讨论,这里的重点放在编码器-解码器的一般概念上。编码器在每一步更新其隐藏状态(隐藏层中的内部值),试图将整个输入句子的意思传给最后一个隐藏状态中,如图 3.4 所示。虽然我们不需要了解这些编码器-解码器结构的 RNN 的内部工作原理,但这里的关键思想是,编码器部分将整个输入文本处理成一个隐藏状态(记忆单元)。编码器-解码器 RNN 的一个重大局限性在于,在解码阶段,RNN 无法直接访问编码器中较早的隐藏状态。
2025-04-08 08:49:35
112
原创 数据结构:用生活中的例子解释 AOE 网中活动的最早和最迟开始时间的含义和计算方法
ES 的本质:活动的 “起跑线”,由所有前置任务的最长耗时路径决定。ES 的意义:确保活动不会早于所有前置任务完成的时间开始。关键活动:ES=LS,无缓冲时间,一旦延迟直接影响总工期。LS 的本质:活动的 “最后通牒时间”,超过这个时间开始会导致总工期延误。LS 的意义:帮助识别哪些活动可以适当延迟(非关键活动),哪些必须严格按时(关键活动)。计算逻辑:从终点倒推,确保每个活动的 LS 不影响后续活动的 LS。
2025-04-07 15:04:49
332
原创 MCP(Model Context Protocol,模型上下文协议)深度解析
在科技的不断演进中,大语言模型的应用范围越来越广泛,但传统API集成方式却如同一个混乱的拼图,每个服务都需要单独开发适配代码,这不仅增加了开发的复杂性和成本,还限制了大语言模型的灵活性和扩展性。MCP的出现,就如同给这个混乱的局面带来了一盏明灯。MCP类似于“AI领域的USB - C接口”,这一形象的比喻生动地说明了它的统一和兼容性。在计算机硬件领域,USB - C接口凭借其统一的标准,让各种设备能够方便快捷地连接和交互。同样,MCP通过统一协议,解决了传统API集成的碎片化问题。
2025-03-31 08:45:44
952
原创 数据结构:通过 PM 值计算 next 表
可以通过计算它所有子串的真前缀和真后缀的交集,并且找出交集中最长字符串的长度值,这个值称为 PM 值(Partial Match,部分匹配值)。,相应地得到下面的 PM 表,并将 PM 值向右移动一个位置,得到 next 数组值,同时令。这种方式是《数据结构》教材(严蔚敏,人民邮电出版社,2015年2月第2版)中所采用的,令。应向右移动的 2 个字符,结合图 7.4.4,可知模式串向右移动的位数。对应的 PM 值转化为下面的表格,即 PM 表。,即再次向右移动 3 个字符,并进入下一轮匹配。
2025-03-30 14:50:59
1103
原创 数据结构:利用递推式计算next表
值,并整理为表格(即下面介绍的“next 表”),以便此后反复查询——亦即,将“记忆力”转化为“预知力”。将上面的讨论,再向更一般化的情况推广,如图 6.3.4 所示,假设前一趟比对终止于。如图 6.3.1 所示,在某一趟匹配中,当对比到最后一个字符的时候,发现匹配失败(将上述案例推广到稍微一般的情况,如图 6.3.3 所示,在某一轮匹配中,值,并整理为表格(即下面介绍的“next 表”),以便此后反复查询”。这个与任何字符都匹配的字符,在这个过程中,必然会有能够满足。,并且该字符与任何字符都是匹配的。
2025-03-26 12:48:17
1169
原创 LLM(11):使用滑动窗口进行数据采样
如图 2.13 所示。)指的是 LLM 将接收的 input,而箭头右边的 token ID 代表 LLM 应预测的 target 的 token ID。内存占用:较小的batch size意味着在内存中同时处理的数据量减少,这对于内存有限的设备较为友好,可以避免因内存不足而导致的程序崩溃,还可能允许使用更大的模型或更复杂的网络结构。如果我们比较第一和第二批次,可以看到第二批次的 token ID 向右移动了一位(例如,第一批次输入中的第二个 ID 是 367,这是第二批次输入的第一个 ID)。
2025-03-26 11:09:04
1161
原创 LLM(8):将 token 转换为 token ID
然后,这些单个的 token 会被按字母顺序排序,并去除重复的 token,然后聚合到一个词汇表中,该词汇表定义了从每个唯一的 token 到一个唯一整数值的映射。从一个新的文本样本开始,我们对文本进行 token 化,并使用词汇表将文本 token 转换为 token ID。为此,可以创建词汇表的逆版本,该逆版本将 token ID 映射回相应的文本 token。因此,它不包含在词汇表中。方法接收样本文本,将其分割成单独的 tokens,并通过词汇表将这些 tokens 转换为 token IDs。
2025-03-21 09:28:00
562
原创 数据结构:栈的应用——后缀表达式求值
在严蔚敏教授的《数据结构》(人民邮电出版社,2015年2月第2版)案例 3.3:表达式求值(第78页)中,对后缀表达式求值有详细叙述,但其内容令部分基础不足够好的学习者费解,为此,本节先以简单的形式对后缀表达式求值方法给予介绍,而后解释书中的难点。后缀表达式的求值过程是:从左到右扫描后缀表达式。,如果利用栈,扫描这个后缀表达式。为例,它对应的后缀表达式为。
2025-03-19 08:34:50
1150
原创 数据结构:栈的应用——不同形式表达式的转换方法
尽管后缀表达式不够直观易读,但它不需要括号,只有操作数和运算符,并且越放在前面的运算符越优先执行,也就是考虑了运算符的优先级。利用栈将中缀表达式转换为后缀表达式的基本流程是:对中缀表达式从左到右扫描,将遇到的操作数直接存放到后缀表达式中,将遇到的每一个运算符或者左括号都暂时保存到运算符栈,而且先执行的运算符先出栈。后缀表达式(Postfix Expression),或称为逆波兰表示法(Reverse Polish Notation, RPN):在算术表达式中运算符在操作数的后面,例如。
2025-03-18 08:08:27
822
原创 LLM(3): Transformer 架构
大多数现代的大规模语言模型(LLMs)依赖于 Transformer 架构,这是一种在 2017 年的论文《注意力就是你所需要的》(https://arxiv.org/abs/1706.03762)中提出的深度神经网络架构。为了理解 LLMs,必须要先了解最初的 Transformer,它是为机器翻译任务而开发的,用于将英文文本翻译成德文和法文。简化版的 Transformer 架构如图 1.4 所示。图 1.4简化版的原始 Transformer 架构图示,它是一个用于语言翻译的深度学习模型。
2025-03-16 12:56:58
1004
原创 数据结构:栈的应用举例——括号匹配的检验
此算法的流程控制简单,而且便于推广至多类括号并存的场合。若遇右括号,则弹出栈顶的左括号并与之比对。当然,栈提前变空或者表达式扫描结束后栈非空,也意味着不匹配。如果表达式中包含括号,当程序中含有这类表达式时,在代码编译过程中,必然会检查括号是否匹配,这是一项必需的语法检查环节。此处假设表达式中只含有左、右圆括号,借助栈检验左右圆括号是否匹配。注意:上述方法难以处理含有多种括号的表达式,故不如迭代版适用性广。的括号匹配(上式中为了表示明显地表示括号,将。因此,可以使用分治算法,将表达式。
2025-03-16 12:32:38
756
原创 LLM(1):了解大语言模型
在 LLMs 出现之前,传统方法擅长于像电子邮件垃圾信息分类和简单的模式识别这样的分类任务,这些任务可以通过手工编写的规则或更简单的模型来捕捉。现代 LLMs 与早期 NLP 模型之间的另一个重要区别是,早期的 NLP 模型通常是为特定任务设计的,比如文本分类、语言翻译等。LLMs 背后的成功可以归因于许多 LLMs 所基于的 transformer 架构以及用于训练 LLMs 的巨大数据量,这使它们能够捕捉到各种语言细微差别、上下文和模式,这些如果手动编码将极具挑战性。
2025-03-12 12:46:56
337
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人