(科研实践篇)大模型相关知识

news2024/11/17 7:26:52

1.embedding

1.介绍:

  1. embedding就是用一个低纬的向量表示一个物品。而这个embedding向量的实质就是使距离相似的向量所对应的物品具有相似的含义参考皮尔逊算法和cos余弦式子:计算相似度
  2. 简单来说,就是用空间去表示物体,解释了物品之间的潜在关系;

2.如何优化GPT或者其他语言模型的回答:
Embedding在大模型中的价值, 比如说,我们想要问一个 pre: 问题“A产品的生产日期是多少?”base: 然后基于A产品的使用说明书进行问答,那么再此之间就会涉及两个embedding,并再向量数据库中进行存储,比如PostgreSQL等等,然后我们会拿问题的embeddingA产品说明书的embedding进行搜索,搜索到与之最相似的embedding返回,然后给到下游的LLM进行回答。
这样的目的就是保证了回答的底线,在一定程度上减少了我们LLM的幻觉现象,从而针对性的回答问题。

2.ollama的介绍

ollama相当于一个用于管理和运行大模型的框架

3 ollama的安装:

  1. ollama在window下的安装
  2. docker安装ollama (有两种模式,一种在CPU上可以运行,一种在GPU)
  3. docker安装ollama2(租用显卡)
    https://www.autodl.com/
3.1运行模型qwen
ollama run qwen:7b
3.2嵌入Embedding

嵌入(Embedding)是将数据向量化的一个过程,可以理解为将人类语言转换为大语言模型所需要的计算机语言的一个过程。在我们第二轮测试开始前,首先下载一个嵌入模型:nomic-embed-text 。它可以使我们的Ollama具备将文档向量化的能力。

ollama run nomic-embed-text
3.3LangChain

**1.介绍 :**想象一下,如果你能让聊天机器人不仅仅回答通用问题,还能从你自己的数据库或文件中提取信息,并根据这些信息执行具体操作,比如发邮件,那会是什么情况?Langchain 正是为了实现这一目标而诞生的。

Langchain 是一个开源框架,它允许开发人员将像 GPT-4 这样的大型语言模型外部的计算和数据源结合起来。目前,它提供了PythonJavaScript(确切地说是 TypeScript)的软件包。

2.总的来说: 用于提升大型语言模型(LLMs)功能的框架

补:核心组件:

  1. 首先是 Compents“组件”,为LLMs提供接口封装、模板提示和信息检索索引;
  2. 其次是 Chains“链”,它将不同的组件组合起来解决特定的任务,比如在大量文本中查找信息
  3. 最后是 Agents“代理”,它们使得LLMs能够与外部环境进行交互,例如通过API请求执行操作。

3.工作流程:

  1. 提问:用户提出问题。
  2. 向语言模型查询:问题被转换成向量表示,用于在向量数据库中进行相似性搜索
  3. 获取相关信息:从向量数据库中提取相关信息块,并将其输入给语言模型。
  4. 生成答案或执行操作:语言模型现在拥有了初始问题和相关信息,能够提供答案或执行操作。
    在这里插入图片描述
    4.langChain文档:
    https://python.langchain.com/docs/get_started/quickstart
    http://docs.autoinfra.cn/docs/integrations/llms/ollama
3.5 实战测试RAG
  1. 先将文本文件进行提取
# 从 langchain_community 包中导入 TextLoader 类
from langchain_community.document_loaders import TextLoader

# 创建 TextLoader 类的实例,指定要加载的文本文件路径为 "./index.md"
loader = TextLoader("./index.md")

# load() 方法可能会将指定的文本文件加载到内存中,以便后续进行处理或分析。
loader.load()

  1. 接下来需要一个分词器Text Splitter
    langchain分词器文档
# 1.从 langchain_text_splitters 包中导入 CharacterTextSplitter 类
from langchain_text_splitters import CharacterTextSplitter

# 2.使用 CharacterTextSplitter 类创建一个文本分割器实例,指定参数 chunk_size 和 chunk_overlap
# chunk_size: 它表示每个分割后的文本块(chunk)的大小
# chunk_overlap=0 表示相邻文本块之间没有重叠,它们是相互独立的。
text_splitter = CharacterTextSplitter.from_tiktoken_encoder(
    chunk_size=100, chunk_overlap=0
)

# 3.使用创建的文本分割器实例对 state_of_the_union 中的文本进行分割
texts = text_splitter.split_text(state_of_the_union)

  1. 然后需要一个向量数据库来存储使用nomic-embed-text模型项量化的数据。既然是测试,我们就使用内存型的DocArray InMemorySearch
embeddings = OllamaEmbeddings(model='nomic-embed-text')
vectorstore = DocArrayInMemorySearch.from_documents(doc_splits, embeddings)

总代码:

from langchain_community.document_loaders import TextLoader
from langchain_community import embeddings
from langchain_community.chat_models import ChatOllama
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain.text_splitter import CharacterTextSplitter
from langchain_community.vectorstores import DocArrayInMemorySearch
from langchain_community.embeddings import OllamaEmbeddings

model_local = ChatOllama(model="qwen:7b")

# 1. 读取文件并分词
documents = TextLoader("../../data/三国演义.txt").load()
text_splitter = CharacterTextSplitter.from_tiktoken_encoder(chunk_size=7500, chunk_overlap=100)
doc_splits = text_splitter.split_documents(documents)

# 2. 嵌入并存储
embeddings = OllamaEmbeddings(model='nomic-embed-text')
vectorstore = DocArrayInMemorySearch.from_documents(doc_splits, embeddings)
retriever = vectorstore.as_retriever()

# 3. 向模型提问
template = """Answer the question based only on the following context:
{context}
Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | model_local
    | StrOutputParser()
)
print(chain.invoke("身长七尺,细眼长髯的是谁?"))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1567946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.Docker简介和安装

1 Docker 简介 1.1 Docker 是什么? docker是一个开源的应用容器引擎。 1.2 容器是什么? 容器是一种轻量级的虚拟化技术 ,它是一个由应用运行环境、容器基础镜像组成的集合。 以 Web 服务 Nginx 为例,如下图所示:Ngin…

【并发编程】CountDownLatch

📝个人主页:五敷有你 🔥系列专栏:并发编程 ⛺️稳中求进,晒太阳 CountDownLatch 概念 CountDownLatch可以使一个获多个线程等待其他线程各自执行完毕后再执行。 CountDownLatch 定义了一个计数器,…

贝锐蒲公英企业路由器双机热备,保障异地组网可靠、不中断

对于关键业务,比如:在线支付系统、远程医疗监控系统、重要数据中心等,一旦网络发生故障,可能导致巨大的损失或影响,因此需确保网络拥有极高的可靠性、稳定性和容错能力。 面对此类场景和需求,贝锐蒲公英异…

优秀网站收藏——持续更新

1、Uiverse.io 官网:Open-Source UI elements for any project Uiverse.io是一个开源免费的UI组件库,直接使用HTML和CSS组成,可以方便的使用在任何前端框架上。它包含了丰富的UI组件类型,如按钮、复选框、开关、卡片、加载动画、…

在s390x架构机器上构建frps/frpc镜像 —— 筑梦之路

源码:GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet. # 克隆代码git clone https://github.com/fatedier/frp.git# 切换目录cd frp# 构建frps服务端docker build -t frps:s390x -f …

ALPHA开发板上的PHY芯片驱动:LAN8720驱动

一. 简介 前面文章了解到,Linux内核是有提供 PHY通用驱动的。 本文来简单了解一下ALPHA开发板上的 PHY网络芯片LAN8720的驱动。是 LAN8720芯片的公司提供的 PHY驱动。 二. ALPHA开发板上的PHY芯片驱动:LAN8720驱动 我 们 来 看 一 下 LAN8720A 的 …

【算法每日一练]-数论(保姆级教程 篇1 埃氏筛,欧拉筛)

目录 保证给你讲透讲懂 第一种:埃氏筛法 第二种:欧拉筛法 题目:质数率 题目:不喜欢的数 思路: 问题:1~n 中筛选出所有素数(质数) 有两种经典的时间复杂度较低的筛法&#xff0…

LeetCode-98. 验证二叉搜索树【树 深度优先搜索 二叉搜索树 二叉树】

LeetCode-98. 验证二叉搜索树【树 深度优先搜索 二叉搜索树 二叉树】 题目描述:解题思路一:中序遍历解题思路二:0解题思路三:0 题目描述: 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树…

Exchanger 怎么用J.U.C

Exchanger简介 Exchanger通常用来解决以下类似场景的问题,如下:两个线程间需要交换数据的问题,在多线程编程中,经常会有这样的场景:两个线程各自持有一些数据,并且需要在某个点上交换这些数据,…

不借助三方工具,修改Windows的CapsLock键为其他功能键

0. 背景交代 在我的Deepin上实现了CapsLock键切换输入法后,再用Windows会有点别扭,于是在一番查找资料和自行摸索后,找到了不借助第三方工具来实现修改CapsLock键的方法。 1. 修改CapsLock键为F15 1.1 Win R呼出运行窗口 1.2 输入Regedi…

Spring Boot 学习(2)——HelloWorld

HelloWorld!全宇宙码农的第一个(行)程序(代码)。 1、创建项目 打开idea,新建一个maven项目。 1)选择项目sdk(本例是1.8) 2)输入GroupId(co…

TCP的十个重要的机制

注:TCP不是只有十个机制 TCP 可靠传输是tcp最为重要的核心(初心) 可靠传输,并不是发送方把数据能够100%的传输给接收方 而是退而求其次 让发送方发送出去数据之后,能够知道接收方是否收到数据。 一但发现对方没有…

智慧公厕:提升城市公卫管理效率与环境舒适度的利器

公厕作为城市基础设施的重要组成部分,一直以来备受市民们的关注与诟病。然而,随着科技的发展和城市智慧化进程的推进,智慧公厕作为一种集成了物联网等技术的创新型公厕逐渐走入人们的视野。智慧公厕不仅实现了信息化、数字化和智慧化&#xf…

基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示自定义字符应用

基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864显示自定义字符应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD12864简单介绍一、LCD…

WordPress 6.5 “里贾纳”已经发布

WordPress 6.5 “里贾纳”已经发布,其灵感来自著名爵士小提琴家Regina Carter的多才多艺。雷吉娜是一位屡获殊荣的艺术家和著名的爵士乐教育家,以超越流派而闻名,她在古典音乐方面的技术基础和对爵士乐的深刻理解为她赢得了大胆超越小提琴所能…

备战蓝桥杯--数论与搜索刷题2

话不多说,直接看题: 1.辗转相减法 我们不妨假设原等比数列a,a*(q/p),a*(q/p)^2.... 那么x1,,,,xn就是其中的n项,xi/x1(q/p)^b,假设最大比例为(q/p)^k,,那么一定有(q/p)^(k*s)(q/p)^b,即k是b的…

通用分布式锁组件

通用分布式锁组件 1 Redisson1.1介绍1.2 快速了解1.3 项目集成 2 定义通用分布式锁组件2.1 实现思路分析2.2 定义注解2.3 定义切面2.4 使用锁2.5.工厂模式切换锁类型2.5.1 锁类型枚举2.5.2 锁对象工厂2.5.3 改造切面代码 2.6 锁失败策略2.6.1 策略分析2.6.2 策略实现 2.7 基于S…

程序员们应注意的行业特有的法律问题

大家好,我是不会魔法的兔子,是一枚执业律师,持续分享技术类行业项目风险及预防的问题。 一直以来兔子都在以大家做项目时候会遇到的风险问题做分享,最近有个念头一直挥之不去,就是要不要给我们广大的程序员们也分享一…

从头开发一个RISC-V的操作系统(二)RISC-V 指令集架构介绍

文章目录 前提ISA的基本介绍ISA是什么CISC vs RISCISA的宽度 RISC-V指令集RISC-V ISA的命名规范模块化的ISA通用寄存器Hart特权级别内存管理与保护异常和中断 目标:通过这一个系列课程的学习,开发出一个简易的在RISC-V指令集架构上运行的操作系统。 前提…

探索设计模式的魅力:揭秘B/S模式在AI大模型时代的蜕变与进化

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自热榜文章:探索设计模式的魅力:揭秘B/S…