ToyNLP: 从零实现自然语言处理经典模型
终于到了介绍 ToyNLP 项目的时候,这应该是个人今年投入时间最多的项目了。上篇文章写的 BERT 论文复现 其实就是这个项目开发过程中的一个记录。今天我们来简单谈谈这个项目的来龙去脉。
终于到了介绍 ToyNLP 项目的时候,这应该是个人今年投入时间最多的项目了。上篇文章写的 BERT 论文复现 其实就是这个项目开发过程中的一个记录。今天我们来简单谈谈这个项目的来龙去脉。

我在网上搜到了很多 BERT 复现的项目,有博客,也有 GitHub 代码仓库等。 这些文章和代码会告诉你他们在复现 BERT,介绍 BERT 是什么,原理是什么,代码要怎么写…… 但是几乎没有人提及是否复现了论文的指标,甚至也不会放当前实现的指标出来——这就让人不得不怀疑其正确性。所以在开始之前,我们先来谈一谈正确性的问题。
Rust 和 Python 结合的生态这几年发展的越来越好,很多高性能的 Python 库都是用 Rust 作为底层实现。 本文推荐一些优秀的 Rust 实现的 Python 库,希望能够帮到大家。
在看很多大语言模型的推理代码时,发现有一个非常重要的概念,就是 KV Cache。 这里我们简要介绍一下 KV Cache 的核心原理并给出基于 GPT-2 的代码实现以便于本地复现。 相关的实验和测试代码同样开源在toyllm.
在看 LLM + RL 的一些论文时,发现对于一些 RL 概念 (比如 GAE) 的理解还是有所欠缺, 所以就系统地学习了一遍深度强化学习(Deep Reinforcement Learning)相关的知识。选的书是 Foundations of Deep Reinforcement Learning1.
在阅读过程中,将书中介绍的一些算法(REINFORCE、SARSA、DQN(Double DQN)、A2C、PPO)用 PyTorch 从头实现了一遍,统一整理到了开源库, 也就是今天要介绍的 ToyRL。 为了更好地配合书一起学习,当前实现尽量贴近书中的伪代码。 另外每个算法实现都在一个 Python 文件内完成,虽然有些重复代码,但是避免了代码碎片化,更便于学习。
今天我们将介绍并复现 Deepmind 的一篇关于 LLM Speculative Sampling 的论文:Accelerating large language model decoding with speculative sampling1. 我们将用不到 100 行代码来复现这篇论文,并得到 2 倍以上的速度提升。
在 Deepseek R1 发布之后,看到了论文中 RL 的算法用的是 GRPO,而 GRPO 是在之前 Deepseek Math 的论文中被提出来的。GRPO 的目标函数如下:
之前在朋友圈/推特上推荐的几本 NLP/LLM 的书大家都比较喜欢,这里为了方便大家查阅,统一整理了一下 (另外加上了一些深度学习基础知识学习的书籍), 同时也发在公众号上方便大家收藏查阅。