近期简单学习了一下向量数据库 qdrant 与 sentence-transformers 库,两者结合可以构建一个简单的自然语言搜索引擎。顺着官方的教程实操了一遍之后,稍微调整一番,我在中文数据集上构建了一个自然语言搜索引擎。
数据采集
教程中的数据集是一些美国的初创公司的数据(来自 startups-list.com),我打算自己从互联网上采集一些中文数据集,正好近期一直在使用微信读书,决定采集微信读书平台上计算机分类下的书籍数据。
观察了微信读书网页版的请求之后,我发现可以通过 ‘https://weread.qq.com/web/bookListInCategory/{type}?maxIndex={maxIndex}‘ 获取指定分类下的书籍列表。
在实验过程中,我发现即使分类下有更多的书籍,maxIndex 超过 480 之后就不再返回新的数据了,这应该是微信读书官方的一些限制。不过计算机分类下一共有七个子分类,每个分类都采集四百多本书籍,总共有 3000 多本书籍,也足够使用了。
首先定义一个函数用于获取制定分类指定页数的书籍列表。
1 | url = 'https://weread.qq.com/web/bookListInCategory/' |
为了提高采集的效率,我创建了一个线程池用于批量执行采集任务。
1 | from itertools import product |
最终的执行时间是 11 秒,相当不错的速度。
数据处理
参考教程里的流程,我使用 pandas 进行了初步的数据处理,并用 sentence-transformers 库生成书籍描述的向量表示。
1 | from sentence_transformers import SentenceTransformer |