图书奖索引:6500本获奖书籍通过嵌入向量搜索

Dev.to ML 2026-07-23T17:29:30.373192

41岁的历史学家Benjamin Breen,把自己学生时期在图书馆整理书籍的活儿,变成了一款公开可用的语义搜索工具。他是加州大学圣克鲁斯分校的教授,2026年夏天让Claude Code编写了Book Prize Index:一个收录近6500本英文非虚构类书籍的数据库,筛选标准很简单——只收录那些曾获得或入围英语世界最重要文学奖项的作品。这个项目不是为了用AI生成内容,恰恰相反:是用AI来帮人找到高质量的人类作品,对抗Breen直白称为“AI slop”的东西。

TL;DR
- Benjamin Breen,41岁,UC Santa Cruz历史学家,2026年夏天构建了Book Prize Index。
- 数据库收录约6500本非虚构类书籍,均为主要英文奖项的获奖或入围作品。
- Breen使用Claude和GPT-5.6从Wikipedia提取并结构化数据。
- 工具支持语义搜索:可以输入类似“出乎意料的稀有经典传记”这样的句子。
- 免费使用;Breen自掏腰包付服务器和API费用。
- 项目直接对标AI slop:用AI来精选高质量内容,而非生成平庸文本。
- Breen将体验比作自己当年在Butler Library整理GR 830书架的经历。

引言

Breen的出发点很个人化。大学第一年,他在国会图书馆分类法A-F区域——宗教、哲学、社会学和历史——当图书整理员(就是那种把还回来的书重新归位的员工)。为了不让自己无聊,他给自己定了个规矩:随便翻开一本书,读一页上的某一句。绝大多数书让他毫无感觉。但偶尔会碰到惊喜,比如一本讲述希腊化神秘崇拜的书,或是一本《衣服现代吗?》,然后他会忍不住读上好几页,才把书放回原位。

Book Prize Index:通过嵌入向量搜索 6,500 本获奖图书

布林说,这种阅读方法比任何正式课程教给他的都多,因为它是一种经过筛选的自主学习:学术图书馆的分类体系和选书标准已经替他挑选了这些书,而书被借出的事实则证明它们确实找到了真实读者。Book Prize Index 试图在数字层面重现那种既经过策展又带有部分随机性的翻阅体验。

布林的决定 布林认为,对英语非虚构类书籍而言,最可靠且可验证的品质标准其实很简单:成为某个重要文学奖项的入围者或获奖者。他清点了英语世界所有相关奖项,然后让 Claude 和 GPT-5.6 从维基百科上收集每个奖项的入围名单和获奖名单,再组织成一个可排序、可查询的数据库。最终成果是一份约 6,500 本书的清单,带有足够的元数据供用户筛选和排序。在此基础上,布林应用了一个嵌入向量模型来实现语义搜索:系统不再寻找精确的关键词匹配,而是寻找含义与查询内容相近的书籍。

背景与历史 布林将这一项目视为他一生中亲眼目睹的更广泛衰退的一部分:开放书架、可自由翻阅的图书馆正在消失,取而代之的是越来越多的“学习实验室”、小组自习室和社交空间,而陈旧罕见的图书则被扔进回收箱,换成数字版本。在这种背景下,他坚持认为优质的非虚构类书籍并未衰落——恰恰相反,他说自己正生活在这个类型鲜少被承认的黄金时代——即便非虚构类阅读量在聊天机器人和播客的竞争下不断下滑。GR 830 分类曾将宗教、民俗甚至吸血鬼归在同一个书架上。

技术细节与性能 Book Prize Index 的核心并非数据收集(布林是用 Claude 和 GPT-5.6 读取维基百科列表来解决的),而是构建在 6,500 本书之上的语义搜索层。

Book Prize Index: 用嵌入搜索6500本获奖图书

嵌入模型会把每本书和每一条查询都转换成一个数值向量,这个向量代表了它们的语义;决定哪些结果排在前面的是向量之间的远近,而不是关键词是否匹配。因此,像 "modern France" 或 "social history" 这类查询能生效,更具体的短语比如 "classic biographies that are surprisingly weird" 也同样有效——模型能把这种查询和那些任何关键词搜索都无法找到的书名关联起来,比如一本关于詹姆斯家族(Wharton 家族的)的传记,Breen 形容它比封面看起来还要古怪。下面的流程图概括了整个流程,从获奖书单到最终的语义查询。

flowchart TD

Book Prize Index:用 Embedding 搜索 6500 本获奖图书

A["维基百科上的奖项列表"] --> B["Claude 和 GPT-5.6 提取数据"]
B --> C["6500 本书的结构化数据库"]
C --> D["Embedding 模型生成向量"]
D --> E["短语语义搜索"]

图书奖索引:通过嵌入向量检索6500本获奖书籍

E --> F["推荐书籍列表"] 每本书被转换成一个向量,用于衡量其与其他书籍在主题上的接近程度。

方法 何时使用 优势 局限性
关键词搜索 搜索确切书名或作者 精确且可预测 如果书名不共享词汇,则无法按主题找到相关书籍
语义搜索(嵌入向量) 按概念、风格或与另一本书的相似性进行探索 能找到标题之间非显而易见的关联 结果有时令人困惑或难以解释
人工策展(图书管理员或上架员) 在物理空间内的偶然发现 质量过滤已经过专家和真实读者验证 无法扩展到实体馆藏和图书馆开放时间之外

如何开始(尝试)

图书奖索引是将嵌入向量应用于结构化文本集合的一个简单案例。在小规模上复现这个想法并不需要复杂的基础设施:只需一个嵌入模型和少量书名即可。

from sentence_transformers import SentenceTransformer
modelo = SentenceTransformer("all-MiniLM-L6-v2")
consulta = "biografias clasicas sorprendentemente raras"
vector_consulta = modelo.encode(consulta)
print(vector_consulta.shape)

第一个代码块加载了一个通用嵌入模型,并将查询语句转换为向量。结果是一个数值数组(对于该模型通常是384维),表示整个句子的语义,而非其中包含的确切词语。

import numpy as np
def similitud_coseno(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
libros = [
    "El mundo de ayer, de Stefan Zweig",
    "Vida y epoca de Michael K, de J. M. Coetzee",
    "Cosmos, de Carl Sagan",
]
vectores_libros = modelo.encode(libros)
puntajes = [similitud_coseno(vector_consulta, v) for v in vectores_libros]
ranking = sorted(zip(libros, puntajes), key=lambda x: x[1], reverse=True)
print(ranking[0])

第二个代码块计算查询语句与语料库中每本书之间的余弦相似度,并按语义接近度从高到低排序结果。

排在搜索结果最前面的书,并不是和搜索词有最多共同关键词的那本,而是在语义上最接近你意图的那本。为了验证Book Prize Index全部数据能否正确响应查询,Breen本人建议:先搜一本你熟悉的书,然后看看系统推荐的相关书目在主题上是否合理。💡 小贴士:如果你打算给自己的小规模数据集搭建语义搜索引擎,可以先从一个轻量模型(比如MiniLM)开始,再用更大的模型——计算成本增长很快,而且不一定总能明显提升用户感知到的相关性。

影响与分析

Book Prize Index和其他打着AI标签的工具最大的区别在于:它不生成文本,而是整理人类已经写好的文本。Breen对此直言不讳:这个项目里除了收集和结构化数据的工具、以及语义搜索引擎之外,没有任何AI成分。这个区别很重要,因为它把大语言模型的两种截然不同的用法分开了:一种是用它们生成全新内容(有给互联网增加更多AI垃圾的风险),另一种是用它们来组织和导航已经通过质量筛选的人类内容——在这里,就是各大英语文学奖评审团筛选出的作品。

💭 关键点:语义搜索不是要取代图书管理员或书架整理员,它是在模拟一个摆放整齐的书架上那种经过筛选的偶然发现——只不过规模扩大到几千本书,而且不需要你本人站在正确书架前面。Stefan Zweig的例子很好地说明了Breen想要促成的那种发现:Zweig的回忆录《昨日的世界》(关于二战前的维也纳)出现在相关语义搜索的结果中——Breen形容这本书极其动人,是Zweig在1942年于巴西自杀前写下的。

查看原文