在大模型实际落地的时候,存在一些问题,主要集中在以下方面:
-
缺少垂直领域知识:虽然大模型压缩了大量的人类知识,但在垂直场景上明显存在短板,需要专业化的服务去解决特定问题。
-
存在幻觉、应用有一定门槛:在大模型使用上有一些幻觉、合规问题,没有办法很好地落地,配套工作不足,缺乏现成的方案来管理非结构化文本、进行测试、运营和管理等。
-
存在重复建设:各业务孤立摸索,资产无法沉淀,存在低水平重复建设,对公司来说ROI低,不够高效。
站在应用的角度,需要一种能够有效解决大模型在垂直领域知识短板、降低应用门槛、提高效率并发挥规模优势的技术方案。
在经过一段时间对RAG整个流程的了解和优化,感受到数据的清洗和拆分对于知识库的检索有很重要的影响,这个环节对于一个完善的rag来说是至关重要的
一、数据的提取
对于上传的一些文件来说也是各式各样的,有PDF,WORD,EXCEL,TXT等等 甚至还有图片
首先要做的第一步就是把文本提取出来
由于pdf的解析效果比较好,所以在这我将全部文件转换成pdf再用pymupdf进行解析获取内容
安装pymupdf库!这个库主要是干文本提取用!
pip install --upgrade pymupdf
安装pandas库!用它生成CSV表格信息!
pip install --upgrade pandas
def extract_text_and_tables(pdf_path):
"""
从PDF文件中提取文本和表格。
:param pdf_path: PDF文件的路径。
:return: 提取的文本字符串和表格列表。
"""
text = ""
tables = []
with fitz.open(pdf_path) as doc:
for page in doc:
text += page.get_text()
with pdfplumber.open(pdf_path) as doc:
for page in doc.pages:
for table in page.extract_tables():
tables.append(table)
然后处理路径中的所有PDF文档,如果找不到文档的话,返回找不到!
def process_pdf_folder(folder_path):
"""
处理给定文件夹中的所有PDF文件,提取文本和表格。
:param folder_path: 包含PDF文件的文件夹的路径。
"""
if not os.path.exists(folder_path):
print(f"未找到文件夹: {folder_path}")
return
对于一些图片可以采用ocr的方式进行提取
import numpy as np # 导入numpy库
# 初始化OCR模型,可以指定使用不同的模型,例如:chineseocr_mobile_v2.0,或者使用默认的
ocr = PaddleOCR(use_angle_cls=True, lang='ch') # lang参数指定识别语言,'ch'代表中英文
# 读取图片
img_path = '测试.jpg'
img = Image.open(img_path).convert('RGB')
# 将PIL图像转换为numpy数组
img = np.array(img)
# 进行OCR识别
result = ocr.ocr(img, cls=True)
# 打印识别结果
for line in result[0]:
print(line[1])
二、数据清洗
与任何数据科学管道一样,数据的质量严重影响RAG管道的结果。在继续执行以下任何步骤之前,请确保您的数据符合以下标准:
1)数据干净:可以应用一些自然语言处理中常用的基本数据清理技术,例如确保所有特殊字符都正确编码;
2)数据准确:确保信息一致且事实准确,以避免信息冲突误导LLM
一方面我们可以把pdf的像页眉页脚等进行删除 还有一些像电子邮件URL等都可以删除
另一方面可以交给大模型进行数据的清洗和拆解,保证语义的完整性