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

打印 上一主题 下一主题

主题 852|帖子 852|积分 2556

Weaviate-use

由于官网的教程写得比力复杂,所以笔者写一个简单的例子,留意:本教程只作简单使用(这个例子只是举个例子,并未寻求好的检索结果)。github地址
可以看jupyter文件,里面有具体的注释
安装

Docker

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

这里的安装是使用docker进行安装,所以请务必先安装好docker。
官网安装方法:
打开官网后,会看到这个界面,自己选择需要安装的版本、模块等。在选择完成后,可以在下面看到给你天生的一个串命令。

我这里的安装是选择了最简单的(全默认),天生了下列命令,并在命令行中输入
  1. 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"
复制代码
在下载该文件后,在命令行中输入以下命令
  1. docker-compose up -d
复制代码
等待安装完成后,可运行下述命令检查是否安装完成
  1. docker ps -a
复制代码
如果成功安装,是有weaviate的镜像会表现的

安装Weaviate的python库

  1. pip install weaviate-client
复制代码
怎样在Python上使用Weaviate

这里使用了一个自己随便构建的数据集,是一个有20条
先导包
  1. import weaviate
  2. from langchain.document_loaders import DirectoryLoader, WebBaseLoader
  3. import pandas as pd
复制代码
界说下Weaviate的参数等
  1. # 定义client
  2. client = weaviate.Client(url='http://localhost:8080')
  3. class_name = 'Stephen_Chow'  # class的名字
  4. class_obj = {
  5.     'class': class_name,         # class的名字
  6.     'vectorIndexConfig':{
  7.         'distance': 'l2-squared',   # 这里的distance是选择向量检索方式,这里选择的是欧式距离
  8.     },
  9. }
复制代码
创建class
  1. client.schema.create_class(class_obj)
复制代码
数据导入,我这里使用的是自己构建的一个关于周星驰台词的数据,长度为20,格式为csv
  1. # 导入数据
  2. df = pd.read_csv('data.csv', encoding='GB18030')
  3. # 转成list形式
  4. sentence_data = df.sentence.tolist()
  5. df
复制代码

在整理好数据后,我们就要把数据转成向量情势,我们先界说embeddings模子
  1. # 定义embeddings模型
  2. from sentence_transformers import SentenceTransformer
  3. model = SentenceTransformer('emb_model/text2vec-large-chinese')   # embeddings模型路径
复制代码
将数据进行向量化
  1. # 句子向量化
  2. sentence_embeddings = model.encode(sentence_data)
  3. # sentence_embeddings = model.encode(sentence_data)
  4. sentence_embeddings
复制代码

为了方便,我们再将sentence_data和sentence_embeddings整合到同一个DataFrame中
  1. # 将句子和embeddings后的数据整合到DataFrame里面
  2. data = {'sentence':sentence_data,
  3.         'embeddings':sentence_embeddings.tolist()}
  4. df = pd.DataFrame(data)
  5. df
复制代码

在处理好数据后,我们就可以开始将数据导入Weaviate中了
  1. with client.batch(
  2.     batch_size=100
  3. ) as batch:
  4.     for i in range(df.shape[0]):
  5. #         if i%20 == 0:
  6.         print('importing data: {}'.format(i+1))
  7.         # 定义properties
  8.         properties = {
  9.             'sentence_id': i+1,          # 这里是句子id, [1, 2, 3, ...]
  10.             'sentence': df.sentence[i],  # 这里是句子内容
  11. #             'embeddings': df.embeddings[i],
  12.         }
  13.         custom_vector = df.embeddings[i] # 这里是句子向量化后的数据
  14.         # 导入数据
  15.         client.batch.add_data_object(
  16.             properties,
  17.             class_name=class_name,
  18.             vector=custom_vector
  19.         )
  20. print('import completed')
复制代码
在导入数据后,就可以开始进行相似度搜索了,这里先将我们要查询的句子/词进行向量化,然后给到weaviate中,并选择返回top5个。
  1. query = model.encode(['除暴安良'])[0].tolist()   # 这里将问题进行embeddings
  2. nearVector = {
  3.     'vector': query
  4. }
  5. response = (
  6.     client.query
  7.     .get(class_name, ['sentence_id', 'sentence']) # 第一个参数为class名字,第二个参数为需要显示的信息
  8.     .with_near_vector(nearVector)             # 使用向量检索,nearVector为输入问题的向量形式
  9.     .with_limit(5)                            # 返回个数(TopK),这里选择返回5个
  10.     .with_additional(['distance'])            # 选择是否输出距离
  11.     .do()
  12. )
复制代码
在运行代码后,我们可以看下搜索结果:
  1. print(json.dumps(response, indent=2))  # 看下输出
复制代码

整理一下并输出,可以看到,第一句话确实有吊民伐罪这几个字
  1. # 输出结果
  2. for i in response['data']['Get'][class_name]:
  3.     print('='*20)
  4.     print(i['sentence'])
复制代码

总结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表