Faiss With Hf Datasets And Clip
zh-CNhf-cookbooknotebooks
Export
用 🤗 transformers, 🤗 datasets 和 FAISS 嵌入多模态数据进行相似度搜索
嵌入对于语义压缩信息很有用。它们可用于执行相似性搜索、零样本分类或简单地训练新模型。相似性搜索用例包括在电子商务中搜索类似的产品、在社交媒体中搜索内容等等。
本 notebook 指导你使用 🤗transformers、🤗datasets 和 FAISS 从特征提取模型创建和索引嵌入,以便稍后使用它们进行相似性搜索。
让我们安装必要的库。
[ ]
对于本教程,我们将会使用 CLIP 模型来提取特征。 CLIP 是一个革命性的模型,其成功的将文本数据和图片数据两个模态联合起来训练。
[ ]
载入数据集,为了保持 notebook 的轻量性,我们这里会使用一个小型字幕数据集 jmhessel/newyorker_caption_contest.
[ ]
让我们来看一个例子
[ ]
[ ]
'Two women are looking out a window. There is snow outside, and there is a snowman with human arms.'
我们没必要去写任何函数去嵌入例子或创建索引。 🤗 datasets 库的 FAISS 组件抽象这些过程。我们可以仅仅简单使用 dataset 的 map 方法就可以创建一个新的带有每个例子嵌入的列,就像下面所示。让我们针对提示列中的文本特征创建一个嵌入。
[ ]
[ ]
我们可以同样处理图像嵌入
[ ]
[ ]
用文本提示( prompts )查询相关数据
我们现在可以用文本或者图片查询数据集来获取相似的项目
[ ]
[ ]
['A man is in the snow. A boy with a huge snow shovel is there too. They are outside a house.']
用图片提示( prompts )来查询数据
图片相似度推理也类似,你只需要调用 get_image_features 函数即可。
[ ]
搜索相似的图片
[ ]
显示与海狸图像最相似的图像。
[ ]
['Salmon swim upstream but they see a grizzly bear and are in shock. The bear has a smug look on his face when he sees the salmon.']
保存,推送,加载嵌入( embeddings )
我们可以用 save_faiss_index 函数储存数据集的嵌入。
[ ]
[ ]
去储存一个数据集仓库的嵌入是一个很好的练习,所以我们将在那里创建一个,并将我们的嵌入稍后推送到那里。
我们会登录 Hugging Face Hub, 创建一个数据集仓库,推送我们的所以,然后使用 snapshot_download 加载。
[ ]
[ ]
[ ]
我们可以使用 load_faiss_index 将嵌入加载到没有嵌入的数据集中。
[ ]
[ ]
[ ]