小熊回收站|txtai:基于 Transformer 的人工智能搜索引擎( 二 )
再次返回相同的结果 , 唯一不同之处在于嵌入是预计算的 。
保存并加载嵌入索引嵌入索引可以保存到磁盘并重新加载 。 此事 , 索引并不是以增量方式创建的 , 需要完全重建才能合并新数据 。
embeddings.save("index")embeddings = Embeddings()embeddings.load("index")uid = embeddings.search("climate change", 1)[0][0]print(sections[uid])
以上代码运行的结果:
Canada’s last fully intact ice shelf has suddenly collapsed, forming a Manhattan-sized iceberg
通过有限的代码 , 我们就能构建一个对自然语言有深刻理解的系统 。 来自 Transformer 模型的知识量是惊人的 。
句子嵌入txtai 构建句子嵌入来执行相似性搜索 。 txtai 获取每个文本记录条目 , 将其进行标记化并构建该记录的嵌入表示 。 在搜索时 , 查询被转换为文本嵌入 , 然后与文本嵌入的存储库进行比较 。
txtai 支持两种创建文本嵌入的方法:句子转换器和词嵌入向量 。 这两种方法各有优点 , 如下所示 。
Sentence TransformersGitHub 项目地址:
- 通过 Transformer 库生成的向量的平均池化来创建单个嵌入向量 。
- 支持模型存储在 Hugging Face 模型中心或本地存储 。
- 有关如何创建自定义模型的详细信息 , 请参阅 Sentence Transformers, 这些模型可以保存在本地 , 也可以上传到 Hugging Face 模型中心 。
- 基本模型需要强大的算力(首选 GPU) 。 可以构建更小 / 更轻的模型 , 以牺牲正确率来换取速度 。
- 通过对每个单词成分进行 BM25 评分 , 创建单个嵌入向量 。 这篇参考文献对这种方法进行了详细的描述 。
- 在 pymagnitude 库的支持下 , 经过预训练的词向量可从参考链接来安装 。
- 有关可以为自定义数据集构建词向量的代码 , 请参阅 vectors.py。
- 使用默认模型可以显著提高速度 。 对于较大的数据集 , 它在速度和准确性方面提供了很好的折衷 。
Python 中有许多可用的健壮库 , 可支持 ANN 搜索 。 txtai 有一个可配置的索引后端 , 允许插入不同的 ANN 库 。 目前 , txtai 支持以下这些库:
- Faiss
- Annoy
- Hnswlib
上面的库要么没有关联嵌入与记录 ID 的方法 , 要么假设 ID 是一个整数 。 txtai 会处理这个问题 , 并保留一个内部 ID 映射 , 允许任何 ID 类型 。
每个受支持系统(以及其他系统)的基准测试可以帮助指导哪种 ANN 最适合给定的数据集 。 也有平台上的差异 , 比如 , Faiss 只支持 Linux 和 macOS 。
抽取式问答系统除相似性搜索外 , txtai 支持对返回结果进行抽取式问答 。 这一强大的功能可以让你针对搜索结果列表询问其他一系列问题 。
这方面的示例用例之一是关于 Kaggle 上的 CORD-10 挑战 。 这项工作需要为一系列医疗查询创建摘要表 , 并为每个结果抽取额外的列 。
下面展示了如何在 txtai 中创建一个 Extractive QA(抽取式问答)组件:
推荐阅读
- 公司|千禾味业小熊电器遭减持,“厨房”概念消费股大跌
- 小熊超爱玩|还有两款游戏在路上,《银河战士4》开发期未知?没关系
- 小熊回收站|“对不起,我们不要IT培训班出来的程序员”
- 小熊科技|程序员你是怎么绘制架构图?
- 小熊科技|为突破美国垄断,中国对外宣布:将加大半导体投资用于自研
- 小熊科技|官宣!小米格力在一起了 董明珠35亿牵手成功
- 小熊科技|从零学ELK系列(十):SpringBoot接入ELK升级版
- 小熊回收站|-链表阻塞队列和数组阻塞队列的异同,Java并发编程
- 小熊科技|开学季选手机,这几款千元5G不能错过,最低价仅有1599
- 小熊科技|《和平精英》工作室操刀:腾讯自研大作《黎明觉醒》本月16日测试