给rwkv_pytorch增加rag

2024-04-27 11:20
文章标签 pytorch 增加 rag rwkv

本文主要是介绍给rwkv_pytorch增加rag,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RAG

  • 参考地址
  • 语义模型地址
  • 选择该模型
  • 使用方法
  • 方法二
  • 安装方法
  • 下载模型到本地
  • 材料
  • 材料处理
  • 语义分割
    • 计算得分
    • 根据得分 分割文本
  • 构建向量数据库
  • 问答匹配
  • 问答整合

参考地址

RAG简单教程
分割策略

语义模型地址

hf
在这里插入图片描述

选择该模型

gte

使用方法

import torch.nn.functional as F
from torch import Tensor
from transformers import AutoTokenizer, AutoModelinput_texts = ["中国的首都是哪里","你喜欢去哪里旅游","北京","今天中午吃什么"
]tokenizer = AutoTokenizer.from_pretrained("thenlper/gte-large-zh")
model = AutoModel.from_pretrained("thenlper/gte-large-zh")# Tokenize the input texts
batch_dict = tokenizer(input_texts, max_length=512, padding=True, truncation=True, return_tensors='pt')outputs = model(**batch_dict)
embeddings = outputs.last_hidden_state[:, 0]# (Optionally) normalize embeddings
embeddings = F.normalize(embeddings, p=2, dim=1)
scores = (embeddings[:1] @ embeddings[1:].T) * 100
print(scores.tolist())

方法二

from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_simsentences = ['That is a happy person', 'That is a very happy person']model = SentenceTransformer('thenlper/gte-large-zh')
embeddings = model.encode(sentences)
print(cos_sim(embeddings[0], embeddings[1]))

安装方法

Sentence Transformers 是一个基于 PyTorch 的开源库,用于计算句子、段落或文档之间的语义相似度。它提供了多种预训练模型,可以用于各种自然语言处理任务,如文本分类、信息检索、文本聚类等。
以下是安装 Sentence Transformers 的基本步骤:

  1. 安装Python环境:首先确保你的系统中安装了Python。Sentence Transformers 要求Python 3.6或更高版本。
  2. 安装PyTorch:Sentence Transformers 依赖于PyTorch。你可以通过访问PyTorch的官方网站获取适合你系统的安装命令。PyTorch官网会根据你的系统和CUDA版本(如果你使用GPU)提供相应的安装指令。
  3. 使用pip安装Sentence Transformers:在安装了PyTorch之后,你可以使用pip来安装Sentence Transformers。打开命令行(终端)并输入以下命令:
   pip install -U sentence-transformers

-U参数确保pip更新到最新版本。
4. 验证安装:安装完成后,你可以通过运行一个简单的示例脚本来验证安装是否成功。例如,使用预训练的模型来计算两个句子之间的相似度:

   from sentence_transformers import SentenceTransformermodel = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')sentence1 = 'The cat sits on the mat'sentence2 = 'The cat is sitting on the carpet'embedding1 = model.encode(sentence1)embedding2 = model.encode(sentence2)cos_sim = util.pytorch_cos_sim(embedding1, embedding2)print("Cosine-Similarity:", cos_sim)

这段代码会下载预训练的模型并计算两个句子之间的余弦相似度。
6. 额外的依赖:Sentence Transformers 库可能还需要其他依赖,如scikit-learnnumpy等。如果运行示例代码时出现错误,提示缺少某个库,可以使用pip来安装它们。
7. 更新pip、setuptools和wheel:在安装新的Python包之前,最好更新pip、setuptools和wheel,以确保你安装的是最新版本的库。

   pip install --upgrade pip setuptools wheel

请根据你的操作系统和Python环境调整上述步骤。如果在安装过程中遇到任何问题,可以查看Sentence Transformers的官方文档或GitHub页面以获取帮助。

下载模型到本地

下载方法参考
当然可以直接点击多次下载
在这里插入图片描述
可以从这里下载模型文件

材料

随便下一个压缩包例子

材料处理

from glob import globimport pandas as pd
from  tqdm import tqdm
texts_path=glob("F:/rag/novel5/*.txt")total_dict=[]
for one in tqdm(texts_path[:10]):with open(one,'r',encoding='utf-8') as f:one_data=f.read()new_data=[]for i in one_data.split():if i.count("。")>1:new_data+=i.split("。")else:new_data.append(i)total_dict.append({one:new_data})pd.to_pickle(total_dict,"total_data.pkl")

语义分割

计算得分

import pandas as pd
from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_sim
from tqdm import tqdm
import torch
# sentences = ['That is a happy person', 'That is a very happy person']model = SentenceTransformer('F:/rag/gte_large_zh')
model.to("cuda")data = pd.read_pickle("total_data.pkl")batch_size = 3
total_list= []
for one in tqdm(data):for name, texts in one.items():texts=[i for i in texts if len(i)>1]one_dict = {name: {"data": [], "score": []}}score_list=[]for i in tqdm(range(0, len(texts) - 1, batch_size)):j = i + batch_sizesentences = texts[i:j +1]embeddings0 = model.encode(["。".join(sentences[:-1])])embeddings1 = model.encode(["。".join(sentences[1:])])out=cos_sim(embeddings0,embeddings1)score=out.tolist()[0]del outdel embeddings0del embeddings1del sentencestorch.cuda.empty_cache()score_list+=scoreone_dict[name]["score"]=score_listone_dict[name]["data"]=textstotal_list.append(one_dict)
pd.to_pickle( total_list,"total_score_one_data.pkl")

根据得分 分割文本

import pandas as pd
import numpy as np
from tqdm import tqdmbatch_size = 3
data = pd.read_pickle("total_score_one_data.pkl")
total_list=[]
for one in data:data_list = []for name, two in one.items():score = two["score"]text = two["data"]for ii,i in tqdm(enumerate(range(0, len(text) - 1, batch_size))):j = i + batch_sizeif ii==0:sentences = text[i:j+1 ]else:sentences = text[i+1:j + 1]data_list+=sentencesif score[ii] > 0.9:data_list += ["#chunk#"]total_list.append(data_list)
pd.to_pickle(total_list,"total_list.pkl")

构建向量数据库

import pandas as pd
from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_sim
from tqdm import tqdmmodel = SentenceTransformer('F:/rag/gte_large_zh')
model.to("cuda")
batch_size=1000
data=pd.read_pickle("total_list.pkl")
total_list=[]
for one in tqdm(data):for name,two in one.items():data_list=[]total="。".join(two).split("#chunk#")for t in tqdm(range(0,len(total),batch_size)):batch=total[t:t+batch_size]embeddings = model.encode(batch)data_list+=embeddings.tolist()total_list.append({name:{"em":data_list,"data":total}})
pd.to_pickle(total_list,"embedding.pkl")

问答匹配

import pandas as pd
from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_sim
import numpy as np
# from tqdm import tqdmmodel = SentenceTransformer('F:/rag/gte_large_zh')
model.to("cuda")
batch_size=1000
data=pd.read_pickle("embedding.pkl")
text="修仙小说"
text_em=model.encode(text)
total_list=[]
for one in data:for name,data_em in one.items():sim=cos_sim(text_em,data_em["em"])score,ids=sim[0].topk(5)top_text=np.array(data_em["data"])[ids.numpy()]res=pd.DataFrame({"name":[name]*top_text.size,"score":score.numpy().tolist(),"text":top_text.tolist(),"ids":ids.numpy().tolist()})total_list.append(res)
result=pd.concat(total_list)
result=result.sort_values("score",ascending=False)
result=str(result[["name","score","text"]].values[:3])
prompt="问题:{},参考:{} 答案:".format(text,result)

问答整合

rwkv 使用参考

这篇关于给rwkv_pytorch增加rag的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940370

相关文章

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,

Nn criterions don’t compute the gradient w.r.t. targets error「pytorch」 (debug笔记)

Nn criterions don’t compute the gradient w.r.t. targets error「pytorch」 ##一、 缘由及解决方法 把这个pytorch-ddpg|github搬到jupyter notebook上运行时,出现错误Nn criterions don’t compute the gradient w.r.t. targets error。注:我用

【超级干货】2天速成PyTorch深度学习入门教程,缓解研究生焦虑

3、cnn基础 卷积神经网络 输入层 —输入图片矩阵 输入层一般是 RGB 图像或单通道的灰度图像,图片像素值在[0,255],可以用矩阵表示图片 卷积层 —特征提取 人通过特征进行图像识别,根据左图直的笔画判断X,右图曲的笔画判断圆 卷积操作 激活层 —加强特征 池化层 —压缩数据 全连接层 —进行分类 输出层 —输出分类概率 4、基于LeNet

pytorch torch.nn.functional.one_hot函数介绍

torch.nn.functional.one_hot 是 PyTorch 中用于生成独热编码(one-hot encoding)张量的函数。独热编码是一种常用的编码方式,特别适用于分类任务或对离散的类别标签进行处理。该函数将整数张量的每个元素转换为一个独热向量。 函数签名 torch.nn.functional.one_hot(tensor, num_classes=-1) 参数 t

pytorch计算网络参数量和Flops

from torchsummary import summarysummary(net, input_size=(3, 256, 256), batch_size=-1) 输出的参数是除以一百万(/1000000)M, from fvcore.nn import FlopCountAnalysisinputs = torch.randn(1, 3, 256, 256).cuda()fl

黑神话:悟空》增加草地绘制距离MOD使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验

《黑神话:悟空》增加草地绘制距离MOD为玩家提供了一种全新的视觉体验,通过扩展游戏中草地的绘制距离,增加了场景的深度和真实感。该MOD通过增加草地的绘制距离,使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验。 增加草地绘制距离MOD安装 1、在%userprofile%AppDataLocalb1SavedConfigWindows目录下找到Engine.ini文件。 2、使用记事本编辑

我的第2个AI项目-RAG with Gemma hosted on HuggingFace and Weaviate in DSPy

目录 项目简介概述时间kaggle地址主要工作和收获技术栈数据集模型表现 未来项目说明思路和原则为什么不把现在的项目做深一点?博客风格转变 bug修复版本兼容问题 项目简介 概述 本项目简要介绍了如何使用 DSPy 构建一个简单的 RAG 管道,且利用了托管在 Hugging Face 上的 Gemma LLM模型 和 Weaviate 向量数据库。 时间 2024.09

Python(TensorFlow和PyTorch)两种显微镜成像重建算法模型(显微镜学)

🎯要点 🎯受激发射损耗显微镜算法模型:🖊恢复嘈杂二维和三维图像 | 🖊模型架构:恢复上下文信息和超分辨率图像 | 🖊使用嘈杂和高信噪比的图像训练模型 | 🖊准备半合成训练集 | 🖊优化沙邦尼尔损失和边缘损失 | 🖊使用峰值信噪比、归一化均方误差和多尺度结构相似性指数量化结果 | 🎯训练荧光显微镜模型和对抗网络图形转换模型 🍪语言内容分比 🍇Python图像归一化

STM32F103调试DMA+PWM 实现占空比逐渐增加的软启效果

实现效果:DMA+PWM 实现PWM输出时,从低电平到输出占空比逐渐增加再到保持高电平的效果,达到控制 MOS 功率开关软启的效果。 1.配置时钟 2.TIM 的 PWM 功能配置 选择、配置 TIM 注意:选择 TIM 支持 DMA 控制输出 PWM 功能的通道,有的TIM通道支持PWM 但不支持PWM注意选择。 PWM参数设置 Counter Period :