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

南漳做网站软件技术专业主要学什么

南漳做网站,软件技术专业主要学什么,1万元可以注册公司吗,wordpress模板安装步骤一 RAG回顾 RAG(Retrieval-Augmented Generation)的改进方案的提纲。RAG是一种结合了检索和生成的技术,用于提高问答系统的性能。以下是对提纲内容的简单分析: RAG回顾以及有可能存在的问题: 文档的读取的准确性&…

一 RAG回顾

RAG(Retrieval-Augmented Generation)的改进方案的提纲。RAG是一种结合了检索和生成的技术,用于提高问答系统的性能。以下是对提纲内容的简单分析:

  1. RAG回顾以及有可能存在的问题:

    • 文档的读取的准确性,及数据清洗的逻辑。

    • 拆分文档也比较麻烦,拆分为chunk

    • query 的不完整性,提问问题的处理

    • 搜索相似的文档,比较 向量的相似度,搜索结果是否能满足回复问题的背景信息。

    • 是否对搜索文档做排序,怎么排序

    • 是否需要 对模型回复的结果做 post-process? 

  2. RAG的改进方案

    • 这一部分详细列出了四个改进方案:

      • Query的改造:可能涉及对查询语句的优化,使其更有效地检索相关信息。

      • Retriever的改造:可能指的是对检索器的改进,以提高检索结果的相关性和准确性。

      • Ranking的改造:可能涉及对检索结果进行重新排序,以确保最相关的信息排在前面。

      • RAGAS:RAG评估:可能是指对RAG系统进行评估的方法或工具,以衡量其性能和改进效果。

  3. Advanced RAG + 实战项目讲解

    • 这一部分可能会介绍更高级的RAG技术,以及如何在实际项目中应用这些技术。这可能包括具体的案例分析和最佳实践。


二 RAG优化

2.1 Self-querying retrieval

是RAG优化中的一种技术,它涉及到自我查询检索的过程。以下是对这一概念的简单解读:

  • Self-querying:自我查询是一种策略,其中 模型会生成自己的查询来检索信息。这意味着模型不仅仅是被动地接收输入查询,而是能够主动地生成查询以获取更相关的信息。

  • Retrieval检索是指从大量数据中找到与查询最相关的信息的过程。在RAG模型中,检索器负责从文档集合中找到与输入查询最相关的文档片段。

  • Self-querying retrieval in RAG:在RAG模型中,自我查询检索可能涉及到模型在生成答案的过程中,根据当前的上下文和已检索到的信息,动态地生成新的查询来进一步检索更精确的信息。这种方法可以帮助模型更深入地理解问题,并从文档中检索到更相关的内容,从而提高生成答案的质量。

2.1.1 写入数据库
from langchain_community.vectorstores import Chroma
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddingsdocs = [Document(page_content="A bunch of scientists bring back dinosaurs and mayhem breaks loose",metadata={"year": 1993, "rating": 7.7, "genre": "science fiction"},),Document(page_content="Leo DiCaprio gets lost in a dream within a dream within a dream within a ...",metadata={"year": 2010, "director": "Christopher Nolan", "rating": 8.2},),Document(page_content="A psychologist / detective gets lost in a series of dreams within dreams within dreams and Inception reused the idea",metadata={"year": 2006, "director": "Satoshi Kon", "rating": 8.6},),Document(page_content="A bunch of normal-sized women are supremely wholesome and some men pine after them",metadata={"year": 2019, "director": "Greta Gerwig", "rating": 8.3},),Document(page_content="Toys come alive and have a blast doing so",metadata={"year": 1995, "genre": "animated"},),Document(page_content="Three men walk into the Zone, three men walk out of the Zone",metadata={"year": 1979,"director": "Andrei Tarkovsky","genre": "thriller","rating": 9.9,},),
]
vectorstore = Chroma.from_documents(docs, OpenAIEmbeddings())
2.1.2 自查询
from langchain.chains.query_constructor.base import AttributeInfo
from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain_openai import ChatOpenAImetadata_field_info = [AttributeInfo(name="genre",description="The genre of the movie. One of ['science fiction', 'comedy', 'drama', 'thriller', 'romance', 'action', 'animated']",type="string",),AttributeInfo(name="year",description="The year the movie was released",type="integer",),AttributeInfo(name="director",description="The name of the movie director",type="string",),AttributeInfo(name="rating", description="A 1-10 rating for the movie", type="float"),
]
document_content_description = "Brief summary of a movie"
#llm = ChatOpenAI(temperature=0)
retriever = SelfQueryRetriever.from_llm(llm,vectorstore,document_content_description,metadata_field_info,
)# This example only specifies a filter
retriever.invoke("I want to watch a movie rated higher than 8.5")

2.2  parent-child splitting and retrieval

Parent-Child Splitting and Retrieval 是一种文档检索技术,它通过将文档分割成多级结构的文本块来提高检索精度和效率。这种方法特别适用于处理大规模和复杂的信息,如电子商务、知识管理、法律和医疗文献检索等领域。

具体来说,该技术包含以下几个步骤:

  1. 文档分割:首先,将文档分割成较大的文本块,称为Parent Chunks,每个Parent Chunk代表文档中的一个较大部分,通常包含多个段落或章节。然后,每个Parent Chunk进一步细分为更小的块,称为Child Chunks,每个Child Chunk通常包含一个段落或几句话。

  2. 向量嵌入:使用预训练的模型(例如BERT、GPT等)将每个Child Chunk转换为向量,这些向量代表了文本块的语义信息,可以通过向量检索算法来进行比对和匹配。

  3. 保持关联关系:Child Chunks与其对应的Parent Chunk保持关联,在后续的检索过程中可以对Parent Chunk进行合并,确保用户获取的信息上下文连贯。

from langchain.retrievers import ParentDocumentRetrieverfrom langchain.storage import InMemoryStore
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddingsloaders = [TextLoader("example_data/FDR_State_of_Union_1944.txt"),TextLoader("example_data/Lincoln_State_of_Union_1862.txt"),
]
docs = []
for loader in loaders:docs.extend(loader.load())# This text splitter is used to create the parent documents
parent_splitter = RecursiveCharacterTextSplitter(chunk_size=2000)
# This text splitter is used to create the child documents
# It should create documents smaller than the parent
child_splitter = RecursiveCharacterTextSplitter(chunk_size=400)
# The vectorstore to use to index the child chunks
vectorstore = Chroma(collection_name="split_parents", embedding_function=OpenAIEmbeddings()
)
# The storage layer for the parent documents
store = InMemoryStore()retriever = ParentDocumentRetriever(vectorstore=vectorstore,docstore=store,child_splitter=child_splitter,parent_splitter=parent_splitter,
)retriever.add_documents(docs)sub_docs = vectorstore.similarity_search("justice breyer")print(sub_docs[0].page_content)retrieved_docs = retriever.get_relevant_documents("justice breyer")
len(retrieved_docs[0].page_content)

2.3 Multiquery Retriever

MultiQueryRetriever是一种检索技术,它通过使用大型语言模型(LLM)从不同角度为给定的用户输入查询生成多个查询,从而自动化提示调优的过程。对于每个查询,它检索一组相关文档,并在所有查询中取唯一的并集,以获取更大的一组潜在相关文档。通过对同一问题生成多个视角,MultiQueryRetriever可以减轻基于距离的检索的一些局限性,并获得更丰富的结果集。

具体来说,MultiQueryRetriever的工作原理如下:

  1. 接收用户输入的查询。

  2. 使用LLM生成多个相关但不同的查询。

  3. 对每个生成的查询进行向量数据库检索。

  4. 合并所有检索结果,去重后返回。

# Build a sample vectorDB
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings# Load blog post
loader = WebBaseLoader("https://lilianweng.github.io/posts/2023-06-23-agent/")
data = loader.load()# Split
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
splits = text_splitter.split_documents(data)# VectorDB
embedding = OpenAIEmbeddings()
vectordb = Chroma.from_documents(documents=splits, embedding=embedding)from langchain.retrievers.multi_query import MultiQueryRetriever
from langchain_openai import ChatOpenAIquestion = "What are the approaches to Task Decomposition?"
llm = ChatOpenAI(temperature=0)
retriever_from_llm = MultiQueryRetriever.from_llm(retriever=vectordb.as_retriever(), llm=llm
)unique_docs = retriever_from_llm.get_relevant_documents(query=question)
len(unique_docs)   # 5

2.4 Ensemble Retriever

Ensemble Retriever是一种检索工具,它能够集成多个基础检索器(Base Retriever)的结果,通过结合每个检索器的输出来提升整体的检索效果。这种方法利用了不同检索算法的优势,例如将稀疏检索器(如BM25)与密集检索器(如基于向量嵌入的检索)结合起来,因为它们的优势互补,这也被称为"混合搜索"。稀疏检索器擅长通过关键字找到相关文档,而密集检索器则擅长通过语义相似性找到相关文档。

EnsembleRetriever通过初始化一个包含多个BaseRetriever对象的列表,并使用Reciprocal Rank Fusion算法对这些检索器的结果进行重排序。最常见的模式是结合稀疏检索器和密集检索器,因为它们在不同场景下表现出不同的优势。

# !pip install rank_bm25
from langchain.retrievers import BM25Retriever, EnsembleRetriever
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddingsdoc_list_1 = ["I like apples","I like oranges","Apples and oranges are fruits",
]# initialize the bm25 retriever and faiss retriever
bm25_retriever = BM25Retriever.from_texts(doc_list_1, metadatas=[{"source": 1}] * len(doc_list_1)
)
bm25_retriever.k = 2doc_list_2 = ["You like apples","You like oranges",
]embedding = OpenAIEmbeddings()
faiss_vectorstore = FAISS.from_texts(doc_list_2, embedding, metadatas=[{"source": 2}] * len(doc_list_2)
)
faiss_retriever = faiss_vectorstore.as_retriever(search_kwargs={"k": 2})# initialize the ensemble retriever
ensemble_retriever = EnsembleRetriever(retrievers=[bm25_retriever, faiss_retriever], weights=[0.5, 0.5]
)docs = ensemble_retriever.invoke("apples")
docs


文章转载自:

http://iOldLTQr.kybpj.cn
http://w52V3rY9.kybpj.cn
http://xLjoPcpW.kybpj.cn
http://XzPbi4C1.kybpj.cn
http://xxmEnBtU.kybpj.cn
http://Tpvfgra2.kybpj.cn
http://b1gPxclW.kybpj.cn
http://o5CuX2wF.kybpj.cn
http://h4mpirv0.kybpj.cn
http://XB8BSNQj.kybpj.cn
http://iPebVpO7.kybpj.cn
http://NugMHUnU.kybpj.cn
http://QZCQ2Fzs.kybpj.cn
http://13zxK62O.kybpj.cn
http://3TrCISGI.kybpj.cn
http://6sP53fMU.kybpj.cn
http://3aNNlDti.kybpj.cn
http://WcWV0MhY.kybpj.cn
http://KsMBTjt2.kybpj.cn
http://CiVyKSzq.kybpj.cn
http://0eLyktvw.kybpj.cn
http://juRGDBO2.kybpj.cn
http://xvVIp8KT.kybpj.cn
http://D1oxHxUz.kybpj.cn
http://JxVSAnkl.kybpj.cn
http://2lbl1gcA.kybpj.cn
http://O2gIUUgZ.kybpj.cn
http://VuL80sWm.kybpj.cn
http://QwPDBy1i.kybpj.cn
http://mJBR4tqg.kybpj.cn
http://www.dtcms.com/wzjs/714353.html

相关文章:

  • 做设计网站的工作怎么样网站建设调研文档
  • 莆田哪里有网站开发国外有哪些设计网站有哪些问题
  • 邢台做网站费用wordpress 文章回收站
  • 网站建设管理规范iis的网站登录没反应
  • 设计网站免费下载网站设计网站机构
  • 双鸭山网站建设公司怎么把网站放到百度
  • 网站建设合同印花税税率wordpress段子主题
  • 长春网站网站推广公司设计广东手机网站制作价格
  • 膳食管理东莞网站建设wordpress修改后台
  • 做网站哪些软件解除网站开发合同 首付款是否退
  • 网站开发工具有组合东莞专业网络营销公司
  • 网站后台管理系统下载网站生成手机站
  • 重要的网站建设做测评的网站
  • 网站镜像 动态acg的wordpress主题
  • 上海网站建设公司页溪网络滁州项目建设公示在哪个网站
  • 做好公众号 网站建设山东知名网络传媒有限公司
  • 服装网站设计自己怎么做百度网站空间
  • 网站查询服务器2023网络舆情案例分析
  • 免费视频网站制作网站的建设背景图片
  • 网上做网站兼职启东 网站开发
  • 郑州营销型网站制作运营网站后台管理进入
  • 新干网站新干今年有哪些重大建设做水晶接单在哪个网站接
  • 网站在哪里建立wordpress二维码活码
  • 网站开发研发合同行业网站建设公司推荐
  • 安溪人做的网站网页制作培训教程
  • 手机做网站知乎网页设计如何引入模板
  • 揭阳智能模板建站开发app定制
  • 学做快餐的视频网站爱企业查询
  • 便捷的大连网站建设网站推广的主要方法有哪些
  • 中国机械加工网站企业网站最重要的访问对象是