一、背景
RAG(Retrieval-Augmented Generation)是一种先进的人工智能技术,由Facebook AI Research(FAIR)团队在2020年提出。它结合了检索(Retrieval)和生成(Generation)两个步骤,通过从大量数据中检索相关信息来辅助语言模型生成更准确、更丰富的文本。
RAG技术的优势在于:
- 能够利用外部知识库,提供更准确、深入的回答。
- 实现知识的即时更新,无需重新训练模型。
- 生成的回答具有较高的可解释性,因为它们直接引用了检索到的来源。
RAG技术可以应用于多种自然语言处理任务,如问答系统、文档生成、智能助手、信息检索和知识图谱填充等。通过这种方式,RAG能够显著提升大型语言模型在知识密集型任务中的性能。
RAG的优化主要可以从知识库的处理、词向量模型、检索算法、重排算法、推理生成等几个方向展开进行。本文主要是介绍基于知识库解析细分方向的优化工作。
二、解析方法
2.1 txt文档解析
文档链接:
https://python.langchain.com/en/latest/modules/indexes/document_loaders/examples/unstructured_file.html
参考代码块:
from langchain.document_loaders import UnstructuredFileLoader
loader = UnstructuredFileLoader("./test/test_file1.txt")
docs = loader.load()
docs[0].page_content[:400]
2.2 word文档解析
参考文档:
https://python.langchain.com/en/latest/modules/indexes/document_loaders/examples/word_document.html
核心代码块:
from langchain.document_loaders import UnstructuredWordDocumentLoader
loader = UnstructuredWordDocumentLoader("example_data/fake.docx")
data = loader.load()
data LangChain 0.0.148from langchain.document_loaders import UnstructuredWordDocumentLoader
loader = UnstructuredWordDocumentLoader("example_data/fake.docx")
data = loader.load()
data
2.3 PDF文档解析
2.3.1 基于unstructured库
参考文档:
https://python.langchain.com/en/latest/modules/indexes/document_loaders/examples/unstructured_file.html
参考代码块:
首先,解析PDF需要用到OCR技术,需要安装一下OCR相关的函数库。
# # Install package
!pip install "unstructured[local-inference]"
!pip install "detectron2@git+https://github.com/facebookresearch/detectron2.git@v0.6#egg=detectron2"
!pip install layoutparser[layoutmodels,tesseract]
解析代码块:
!wget https://raw.githubusercontent.com/Unstructured-IO/unstructured/main/example-docs/layout-parser-paper.pdf -P "../../"
loader = UnstructuredFileLoader("./example_data/layout-parser-paper.pdf", mode="elements")
docs = loader.load()
docs[:5]
参考文献:
2.3.2 PyPDF工具
安装工具:
pip install pypdf
核心代码块:
from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader("example_data/layout-parser-paper.pdf")
pages = loader.load_and_split()
按页码对文档进行检索:
from langchain.vectorstores import FAISS
from langchain.embeddings.openai import OpenAIEmbeddings
faiss_index = FAISS.from_documents(pages, OpenAIEmbeddings())
docs = faiss_index.similarity_search("How will the community be engaged?", k=2)
for doc in docs:
print(str(doc.metadata["page"]) + ":", doc.page_content)
2.3.3 在线读取工具
from langchain.document_loaders import OnlinePDFLoader
loader = OnlinePDFLoader("https://arxiv.org/pdf/2302.03803.pdf")
data = loader.load()
print(data)
2.3.4 PDFMiner
from langchain.document_loaders import PDFMinerLoader
loader = PDFMinerLoader("example_data/layout-parser-paper.pdf")
data = loader.load()
2.4 Email邮寄解析
from langchain.document_loaders import UnstructuredEmailLoader
loader = UnstructuredEmailLoader('example_data/fake-email.eml')
data = loader.load()
2.5 图片内容解析
主要处理jpg、png等类型的图片数据为可以在RAG下游任务使用的文档数据格式。在langchain的官方文档中提供了相关的API。
from langchain.document_loaders.image import UnstructuredImageLoader
loader = UnstructuredImageLoader("layout-parser-paper-fast.jpg")
data = loader.load()
2.6 Markdown内容解析
loader = document_loaders.UnstructuredFileLoader(filepath,mode="elements",autodetect_encoding=True)
docs = loader.load()
Markdown的解析和TextLoader是存在区别的,主要是需要设置mode和autodetect_encoding参数,以区分文件中不同块的信息。另外,对Markdown中标题的处理,使用MarkdownHeaderTextSplitter需要配置一个额外的参数strip_headers = False。
markdown_splitter = MarkdownHeaderTextSplitter(
headers_to_split_on=headers_to_split_on, strip_headers=False
)
md_header_splits = markdown_splitter.split_text(markdown_document)
md_header_splits
2.7 PPT内容解析
from langchain.document_loaders import UnstructuredPowerPointLoader
loader = UnstructuredPowerPointLoader("example_data/fake-power-point.pptx")
data = loader.load()
2.8 DeepDoc解析
deepdoc是RAGFlow框架中提出的一个支持多种文本切片的解析模版,包括:Q&A、ReSume、Paper、Manual、Table、Book、Law等等。以更好地结合业务场景,确保结果的可控性和可解释性。
RAGFlow链接:
https://github.com/infiniflow/ragflow/blob/main/README_zh.md
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。