oceanGPT科研

"Reaserch on OceanGPT"

Posted by QingfengQ on September 29, 2025

基于OceanGPT·沧渊微调定制知识增强问答引擎

今年暑假在张宁豫老师实验室实习,为实验室的oceangpt海洋大模型设计知识增强问答引擎

研究背景

  • 几百页的船只操作手册,翻阅耗时又枯燥,关键细节常被遗漏;

  • 碰到海洋新政策、新法规、新装备,信息分散、更新滞后,不知道去哪儿找;

  • 现有大模型“盲区多”,本地部署难、行业知识少,无法满足企业级安全与隐私需求。

实现流程

  • 模型获取
    • HuggingFace下载预训练OceanGPT模型

    image-20250818170734025

    *OceanGPT-basic 在 Qwen3 基础上,使用海洋专业的中英文数据集进行领域适配训练

  • EasyDataset 开源工具使用

image-20250818174521562

​ 流程:上传PDF文件处理为文本块–>生成QA对–>导出数据集(sharegpt/alpaca格式)

  • Llama Factory 进行领域微调

    LLaMA Factory 是一个开源的低代码微调框架,通过Web UI界面支持无需代码即可对大型模型进行微调。

    image-20250721220254950-1753532373851-7

    用生成的数据集对模型使用lora进行微调

    TODO 学一下lora原理、微调参数影响

  • 使用LangChain+Streamlit 搭建Web应用

    image-20250818203655777

    • 将本地量化大模型 (OceanGPT-LoRA) 与 LangChain 框架深度结合

    • 使用了 4bit 量化(BitsAndBytes + LoRA)方法,在本地 GPU 上部署大模型,兼顾性能和资源消耗。

    • 通过 LangChain 的 retrieval_chain 构建端到端的 RAG 管道,让用户问题先经过向量检索,再由大模型结合检索到的上下文生成答案。

    • 基于 Streamlit 开发对话式 Web UI,支持上传文档、清空历史、展示答案溯源(参考来源)。

    • 向量化检索:采用 HuggingFace 的 all-mpnet-base-v2 嵌入模型,结合 FAISS 搭建向量数据库,实现高效相似度检索。

    get_pdf_text函数:提取文字,PyPDF2的PdfReader

    get_text_chunks函数:分割成带元信息的文本块,text_splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=64)递归分割,分割字符列表[“\n\n”, “\n”, “ “, “”]

    get_vectorstore函数:加载embedding模型all-mpnet-base-v2,vectorstore = FAISS.from_documents(docs_chunks, embedding=embeddings)存储为向量

    load_cached_model函数:加载oceangpt模型,从transformers库导入 AutoTokenizer(分词器), AutoModelForCausalLM(识别模型本地参数,加载模型), BitsAndBytesConfig(用于量化)

效果验证

  • 在 GPU 显存有限的环境下,利用 4bit 量化方案,实现了大模型的流畅推理。显存使用:16GB->8GB
  • 通过典型案例进行微调前后、有无RAG效果对比测试:实现了较高的回答准确性,并显著降低了“大模型幻觉”现象