当前位置: 首页 > news >正文

2025-05-20 模型下载--文本向量化--Faiss检索

模型下载

  • 使用Python脚本进行下载
from huggingface_hub import snapshot_download
# import os# os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
# 自定义下载目录(Windows 路径建议用 raw string 或 pathlib)
download_dir = r"../model/V2/jina-embeddings-v3"local_dir = snapshot_download(repo_id="jinaai/jina-embeddings-v3",local_dir=download_dir,local_dir_use_symlinks=False  # 避免 Windows 下软链接问题
)print("模型保存路径:", local_dir)
  • 当使用跑数据集的时候,还是会出现错误,找不到各种文件,原因是依赖了其他的文件
  • 地址 https://huggingface.co/jinaai/xlm-roberta-flash-implementation/tree/main

文本向量化

import pandas as pd
from sentence_transformers import SentenceTransformer
import os# =========================
# 📍 Step 1: 加载数据
# =========================
input_datapath = './data/fine_food_reviews_1k.csv'df = pd.read_csv(input_datapath, index_col=0)
df = df[["Time", "ProductId", "UserId", "Score", "Summary", "Text"]]
df = df.dropna()# 合并文本字段
df["combined"] = ("Title: " + df.Summary.str.strip() + "; Content: " + df.Text.str.strip()
)# =========================
# 📍 Step 2: 加载本地模型
# =========================
model_path = 'model/jina-embeddings-v3/models--jinaai--jina-embeddings-v3/snapshots/f1944de8402dcd5f2b03f822a4bc22a7f2de2eb9'
model = SentenceTransformer(model_path, trust_remote_code=True)# =========================
# 📍 Step 3: 批量编码文本
# =========================
texts = df["combined"].tolist()# tqdm 显示进度条,convert_to_numpy 提供 array 输出
embeddings = model.encode(texts, show_progress_bar=True, convert_to_numpy=True)# =========================
# 📍 Step 4: 存储向量数据
# =========================
df["embedding"] = embeddings.tolist()# 保存为 parquet(高效)或 csv
output_path = './output/fine_food_reviews_with_embeddings.parquet'
os.makedirs(os.path.dirname(output_path), exist_ok=True)
df.to_parquet(output_path, index=False)print(f"✅ 向量化完成,共生成 {len(df)} 条记录,已保存至:{output_path}")

Faiss检索

import pandas as pd
import numpy as np
import faiss
from sentence_transformers import SentenceTransformer# ========== 1. 加载数据 ==========
df = pd.read_parquet('./output/fine_food_reviews_with_embeddings.parquet')
embeddings = np.array(df['embedding'].to_list())  # 转成 numpy array# ========== 2. 加载模型 ==========
model_path = 'model/jina-embeddings-v3/models--jinaai--jina-embeddings-v3/snapshots/f1944de8402dcd5f2b03f822a4bc22a7f2de2eb9'
model = SentenceTransformer(model_path, trust_remote_code=True)# ========== 3. 构建向量索引 ==========
index = faiss.IndexFlatL2(embeddings.shape[1])
index.add(embeddings)# ========== 4. 查询示例 ==========
query = "蜂蜜"
query_vec = model.encode([query], convert_to_numpy=True)# 查询 TopK 相似文本
D, I = index.search(query_vec, k=3)print("🔍 查询结果:")
for idx in I[0]:print(f"\n📌 Score: {df.iloc[idx]['Score']}")print(f"📄 Text: {df.iloc[idx]['combined']}")

相关文章:

  • STL中list的模拟
  • 链表原理与实现:从单链表到LinkedList
  • Gin--Blog项目-flags文件解析
  • OpenCV 人脸识别:从基础到实践全解析
  • HarmonyOS5云服务技术分享--云缓存快速上手指南
  • vue2+webpack环境变量配置
  • 开源一个记账软件,支持docker一键部署
  • 详解ip地址、子网掩码、网关、广播地址
  • ArcObjects学习教程
  • CouchDB 可观测最佳实践
  • Centos上搭建 OpenResty
  • 什么是 AI 人工智能?什么是机器学习?什么是深度学习?三者啥关系
  • 企业级 Go 多版本环境部署指南-Ubuntu CentOS Rocky全兼容实践20250520
  • 利用朴素贝叶斯对UCI 的 mushroom 数据集进行分类
  • CentOS 7上部署BIND9 DNS服务器指南
  • RustDesk CentOS自建中继节点
  • CentOS 7上搭建高可用BIND9集群指南
  • 将 /dev/vdb1 的空间全部合并到 /dev/mapper/centos-root(即扩展 CentOS 的根分区)
  • MyBatis 动态 SQL 标签详解教程:_set_、_trim_、_sql_、_choose_、_when_
  • 数据库外键
  • 夜读丨永不掉电的陪伴
  • 竞彩湃|水晶宫夺冠后乘胜追击,四大皆空曼城人间清醒?
  • 海口警方通报“司机驾车拖行虐猫”:系意外,未发现故意虐猫行为
  • 特朗普与泽连斯基通话
  • 巴基斯坦外长访华是否与印巴局势有关?外交部:此访体现巴方高度重视中巴关系
  • 新华社千笔楼:地方文旅宣传应走出“魔性尬舞”的流量焦虑