手写 Huggingface RAG 系统(3)——构建向量数据库与生成 November 30, 2025 1854 words • 10 min read 有了前面的 Embedding 模型,我们就可以用这个模型将 chunk 内容转换成向量,然后构建向量数据库了。 在讲解具体构建过程前,我们简单介绍一下混合索引的概念。 > 最初的版本是没引入混合索引的,但是在使用 RAG 系统的过程中发现 `AutoModel` 这个模块的检索效果不太好,就引入了。 在检索向量时,以 `AutoModel` 为例,我们需要检索下面两类文档: 1. ... #RAG
手写 Huggingface RAG 系统(2)——Embedding 构建 November 27, 2025 920 words • 5 min read 完成分块之后,我们就需要对分块的数据进行 Embedding 了。为了让 Embedding 在 Huggingface Transformers 上的效果更好,我们使用我们 chunk 好的数据构造数据集,在 `jinaai/jina-embeddings-v2-base-en` 上进行微调。 微调后的模型上传到了... #RAG
手写 Huggingface RAG 系统(1)——数据预处理与分块 November 27, 2025 2957 words • 15 min read 最近自己手写了一个基于 Huggingface transformers 英文文档的 RAG 系统,这里整理一下开发的过程。 所有的组件都是自己写的,Embedding 模型是基于分块后的文档微调 jinaai/jina-embeddings-v2-base-en 模型得到的。最终效果如下: <Image src={image_2025_11_27_11_47_52} alt="alt... #RAG
使用 MinIO 管理用户头像遇到的问题 November 24, 2025 432 words • 3 min read 在手写用户前后端的时候遇到了下面的问题:用户注册时头像上传是成功的,但是 User Profile 显示的是 fallback 的头像。在改了前端和其他的后端代码无果后,发现是 MinIO 的配置有些问题。 原本在 MinIO 中如下配置了预签名: ```typescript const sevenDays = 7 * 24 * 60 * 60; const url = await... #Backend#MinIO
使用 Transformer 做简单的机器翻译 November 16, 2025 94 words • 1 min read 这个没什么好说的,就是对 Transformer 原论文的简单复现,下面贴一下 Colab Notebook: ```notebook src=/notebooks/Transformer_translator. html ``` 可以看到不论是训练速度还是生成结果(这里训练过程没有计算 BLEU 分数了,只是看了 Loss),Transformer 都优于我们之前用 Seq2Seq +... #Transformer#NLP
文档的分层注意力网络 November 14, 2025 1215 words • 7 min read Hierarchical Attention Networks for Document Classification 这篇论文引入了一个分层的注意力网络:它使用结构化的注意力,先理解单词,再理解句子,最后理解整篇文档。 HAN 由下面的组件组成: 1. 单词序列 Encoder:使用 Encoder 对句子中的单词进行处理。这个和 Seq2Seq 中的 Encoder 类似。 2... #Deep Learning#RNN#NLP#Document Classification
Luong Attention November 8, 2025 1886 words • 10 min read 全局注意力的概念在 Bahdanau Attention 笔记中已经介绍过了:在 Decode 过程中,每当生成一个词,Decoder 会查看 Encoder 输出的所有隐藏状态并关注自己需要的那个。Luong Attention 的这一流程如下: 1. 获取 RNN 的隐藏状态 $h_t$ 和 Encoder 所有隐藏状态 $h_s$。 2... #RNN#Seq2Seq#Attention
简单机器翻译实现 November 8, 2025 2086 words • 11 min read 在复习了 Encoder-Decoder 后,自己搓了一个简单的机器翻译,用 30k 的 cmn-eng. txt 数据集训练的,下面简单讲解一下。 在开始实现之前,我们先定义一些 tag,这些 tag 能够让我们的模型更好地确认翻译的边界和方向: 1... #RNN#Seq2Seq#Attention
Bahdanau Attention November 8, 2025 693 words • 4 min read 在 Encoder-Decoder 架构中,我们知道 Encoder 负责把输入压缩成一个隐藏状态向量,但是压缩成一个固定的向量必然会导致关键信息的损失,一个简单的想法是:不把所有内容压缩到一个向量中,而是**把序列中的每个词都生成一个对应的向量,然后在 Decoder 输出时去“寻找”它对应的向量,利用自己找到的内容生成结果**。这便是 Seq2Seq 中简单的注意力思想。 上面的思想在... #RNN#Seq2Seq#Attention
Encoder-Decoder 架构整理 November 8, 2025 273 words • 2 min read Encoder-Decoder 的引入是为了解决 RNN 无法处理 Seq2Seq 的问题。 我们知道 RNN 在每个时间步接受一个输入、并且返回一个输出。这对于定长的序列问题很方便(比如给句子的每个词做词性标注),但是很多 Seq2Seq 并不是定长的,输入和输出的长度并不固定(比如翻译问题)。唯一的解决办法是让 RNN 一次就读完全部的输入。但是 RNN... #RNN#Seq2Seq