向量数据库Weaviate使用教程(安装+使用)

Weaviate-use

由于官网的教程写得比较复杂,所以笔者写一个简单的例子,注意:本教程只作简单使用(这个例子只是举个例子,并未追求好的检索效果)。github地址

可以看jupyter文件,里面有详细的注释

安装

Docker

网上教程较多,这里就不赘述了。

Weaviate安装

这里的安装是使用docker进行安装,所以请务必先安装好docker。

官网安装方法:

打开官网后,会看到这个界面,自己选择需要安装的版本、模块等。在选择完成后,可以在下面看到给你生成的一个串命令。

在这里插入图片描述

我这里的安装是选择了最简单的(全默认),生成了下列命令,并在命令行中输入

curl -o docker-compose.yml "https://configuration.weaviate.io/v2/docker-compose/docker-compose.yml?modules=standalone&runtime=docker-compose&weaviate_version=v1.20.1"

在下载该文件后,在命令行中输入以下命令

docker-compose up -d

等待安装完成后,可运行下述命令检查是否安装完成

docker ps -a

如果成功安装,是有weaviate的镜像会显示的

在这里插入图片描述

安装Weaviate的python库

pip install weaviate-client

如何在Python上使用Weaviate

这里使用了一个自己随便构建的数据集,是一个有20条

先导包

import weaviate
from langchain.document_loaders import DirectoryLoader, WebBaseLoader
import pandas as pd

定义下Weaviate的参数等

# 定义client
client = weaviate.Client(url='http://localhost:8080')
class_name = 'Stephen_Chow'  # class的名字

class_obj = {
    'class': class_name,         # class的名字
    'vectorIndexConfig':{
        'distance': 'l2-squared',   # 这里的distance是选择向量检索方式,这里选择的是欧式距离
    },
}

创建class

client.schema.create_class(class_obj)

数据导入,我这里使用的是自己构建的一个关于周星驰台词的数据,长度为20,格式为csv

# 导入数据
df = pd.read_csv('data.csv', encoding='GB18030')
# 转成list形式
sentence_data = df.sentence.tolist()
df

原始数据

在整理好数据后,我们就要把数据转成向量形式,我们先定义embeddings模型

# 定义embeddings模型
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('emb_model/text2vec-large-chinese')   # embeddings模型路径

将数据进行向量化

# 句子向量化
sentence_embeddings = model.encode(sentence_data)
# sentence_embeddings = model.encode(sentence_data)
sentence_embeddings

embeddings后数据

为了方便,我们再将sentence_datasentence_embeddings整合到同一个DataFrame中

# 将句子和embeddings后的数据整合到DataFrame里面
data = {'sentence':sentence_data,
        'embeddings':sentence_embeddings.tolist()}
df = pd.DataFrame(data)
df

在这里插入图片描述

在处理好数据后,我们就可以开始将数据导入Weaviate中了

with client.batch(
    batch_size=100
) as batch:
    for i in range(df.shape[0]):
#         if i%20 == 0:
        print('importing data: {}'.format(i+1))
        # 定义properties
        properties = {
            'sentence_id': i+1,          # 这里是句子id, [1, 2, 3, ...]
            'sentence': df.sentence[i],  # 这里是句子内容
#             'embeddings': df.embeddings[i],
        }
        custom_vector = df.embeddings[i] # 这里是句子向量化后的数据
        # 导入数据
        client.batch.add_data_object(
            properties,
            class_name=class_name,
            vector=custom_vector
        )
print('import completed')

在导入数据后,就可以开始进行相似度搜索了,这里先将我们要查询的句子/词进行向量化,然后给到weaviate中,并选择返回top5个。

query = model.encode(['除暴安良'])[0].tolist()   # 这里将问题进行embeddings
nearVector = {
    'vector': query
}

response = (
    client.query
    .get(class_name, ['sentence_id', 'sentence']) # 第一个参数为class名字,第二个参数为需要显示的信息
    .with_near_vector(nearVector)             # 使用向量检索,nearVector为输入问题的向量形式
    .with_limit(5)                            # 返回个数(TopK),这里选择返回5个
    .with_additional(['distance'])            # 选择是否输出距离
    .do()
)

在运行代码后,我们可以看下搜索结果:

print(json.dumps(response, indent=2))  # 看下输出

在这里插入图片描述

整理一下并输出,可以看到,第一句话确实有除暴安良这几个字

# 输出结果
for i in response['data']['Get'][class_name]:
    print('='*20)
    print(i['sentence'])

最中输出

总结

本教程只作简单使用,如果有帮到您,麻烦点个赞,谢谢!

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值