科学工具
科学工具让世界更美好
让世界更美好

学术论文语义搜索工具 Paper Semantic Search,通过语义匹配帮助用户发现相似文献学术论文语义搜索工具 Paper Semantic Search,通过语义匹配帮助用户发现相似文献

Paper Semantic Search 是一个学术论文语义搜索工具,能通过语义匹配帮助用户发现相似文献。Paper Semantic Search能从OpenReview等来源抓取论文的能力,支持使用文本查询或提供示例论文进行搜索,能同时提供了免费的本地开源嵌入模型和高质量的OpenAI API模型选项,通过将论文标题和摘要转换为可缓存的嵌入向量,然后利用余弦相似度进行匹配和排序,最后实现精准的相似论文推荐。

• 从 OpenReview 平台获取特定会议的论文(比如 ICLR2026 的投稿论文)

• 支持两种搜索方式:用示例论文作为参考搜索,或直接用文本查询关键词

• 自动缓存嵌入向量,避免重复计算,节省时间和资源

• 兼容两类嵌入模型:开源本地模型(如 all-MiniLM-L6-v2)和 OpenAI 模型

1、安装依赖

首先通过 pip 安装项目所需的依赖库,执行以下命令:

pip install -r requirements.txt

2、准备论文数据

通过 crawl.py 中的函数爬取目标会议的论文,生成 JSON 格式的论文数据集。以爬取 ICLR2026 会议投稿为例,代码如下:

from crawl import crawl_papers
crawl_papers(
venue_id="ICLR.cc/2026/Conference/Submission",
output_file="iclr2026_papers.json"
)

执行后会生成 iclr2026_papers.json 文件,包含该会议的论文标题、摘要等信息。

3、执行论文搜索

搜索功能通过 search.py 中的 PaperSearcher 类实现,支持本地模型和 OpenAI 模型两种选择,具体代码如下:

选择 1:使用本地模型(免费)

from search import PaperSearcher
# 初始化搜索器,指定论文数据文件和模型类型
searcher = PaperSearcher('iclr2026_papers.json', model_type='local')
# 计算论文的嵌入向量(首次运行会生成缓存,后续可直接复用)
searcher.compute_embeddings()

选择 2:使用 OpenAI 模型(质量更高,需 API 密钥)

先设置环境变量配置 API 密钥,再初始化搜索器:

# 终端中设置 API 密钥(Windows 系统用 set 替换 export)
export OPENAI_API_KEY='你的 OpenAI API 密钥'
from search import PaperSearcher
searcher = PaperSearcher('iclr2026_papers.json', model_type='openai')
searcher.compute_embeddings()

Paper Semantic Search 的两种搜索方式示例

用示例论文搜索:如果有几篇感兴趣的论文,可以用它们的标题和摘要作为参考,找到相似研究:

# 示例论文列表(可添加 1-5 篇,效果更好)
examples = [
{
"title": "你的参考论文标题",
"abstract": "你的参考论文摘要..."
}
]
# 搜索 Top 100 相似论文
results = searcher.search(examples=examples, top_k=100)

用文本查询搜索:直接输入感兴趣的研究方向描述,获取相关论文:

# 输入查询文本(比如具体研究主题)
results = searcher.search(query="大语言模型在医疗诊断中的应用", top_k=100)

查看与保存结果

搜索完成后,可直接显示结果或保存到文件:

# 显示前 10 条结果(n 参数控制显示数量)
searcher.display(results, n=10)
# 将所有结果保存到 JSON 文件
searcher.save(results, 'results.json')

Paper Semantic Search 工作原理

整个语义搜索的逻辑并不复杂,核心分为 5 个步骤,确保搜索结果的准确性和效率:

1、生成嵌入向量:将论文的标题和摘要转换为数值形式的嵌入向量,捕捉文本的语义信息

2、自动缓存:嵌入向量会以 cache_<文件名>_<哈希值>_<模型名>.npy 的格式保存,下次使用时无需重新计算,删除缓存文件可触发重新生成

3、查询嵌入:用相同的模型将用户的查询(示例论文或文本)也转换为嵌入向量

4、计算相似度:通过余弦相似度算法,对比查询嵌入与所有论文嵌入的相似程度

5、结果排序:按照相似度得分从高到低排序,返回排名靠前的论文

示例输出

执行 searcher.display(results, n=10) 后,终端会显示类似以下的结果,包含相似度得分、论文标题、编号、研究方向和 OpenReview 链接,方便直接访问原文:

================================================================================
Top 100 Results (showing 10)
================================================================================

1、[0.8456] Paper a
#12345 | 基础模型或前沿模型,包括大语言模型
https://openreview.net/forum?id=xxx

2、[0.8234] Paper b
#12346 | 机器人、自主系统、规划领域的应用
https://openreview.net/forum?id=yyy

Paper Semantic Search 使用小贴士

• 推荐用 1-5 篇示例论文进行搜索,或用一段详细的研究方向描述作为查询,能提升结果匹配度

• 大多数场景下,本地模型的效果已经足够,无需额外付费

• 若需要高精度搜索(比如关键研究方向排查),可选择 OpenAI 模型,成本约为 18000 次查询 1 美元