主要观点:作者和 Chris 从“ scratch ”开始为博客创建搜索引擎,基于词嵌入( word embeddings ),通过将文章中的词嵌入到 N 维空间并求和来表示文章,用余弦相似度对搜索结果排序。还介绍了如何加载和嵌入 word2vec 模型、处理博客文章的文本规范化、创建搜索 REPL 以及构建网页搜索前端,通过收集评估数据集和计算 top-k 准确率来评估搜索效果,最后提出未来可采用 TF-IDF 技术来减少噪声以提升搜索效果。
关键信息:
- 搜索引擎基于 word2vec ,将词映射到 N 维空间,通过嵌入文章词并求和来表示文章,用余弦相似度排序。
- 加载 word2vec 是一个简单的 pickle 操作,嵌入单词通过在字典中查找,嵌入多个单词则逐个嵌入后求和。
- 处理博客文章时进行文本规范化,将标点等处理后统一为小写。
- 搜索 REPL 中通过嵌入查询词和文章词的向量来计算余弦相似度进行搜索。
- 网页搜索前端将 word2vec 分成两个文件,通过 HTTP Range 请求下载所需部分,仅下载几 KB 大小的嵌入权重。
- 评估搜索效果时收集评估数据集,计算 top-k 准确率,图表显示准确率随 k 和关键词数量增加而提高,但有边际收益递减现象。
重要细节:
- word2vec 是一个 12MB 的 pickle 文件,加载后是一个字典映射字符串到 numpy.float32 数组。
- 文本规范化函数
normalize_text
用正则表达式去除非字母字符并转换为小写。 - 搜索 REPL 的
search
函数中计算余弦相似度的函数vec_cosine_similarity
,先计算向量的模,再计算点积除以模的乘积。 - 网页搜索前端将 word2vec 分成
vecs.jsonl
和index.json
两个文件,分别存储嵌入和索引。 - 评估数据集
sample_documents
包含文档路径和对应的搜索关键词。 - 计算 top-k 准确率的函数
compute_top_k_accuracy
,通过随机采样关键词构建查询,确定目标文档在搜索结果中的排名并统计准确率。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。