数据分割与特征提取
2026/7/14 12:00:48 网站建设 项目流程

多模态AIAgent开发实践 邓立国、周驰岷、邓淇等 清华大学出版社【行情 报价 价格 评测】-京东

《多模态AI Agent开发实践》1~6章试读-CSDN博客

加载后的多模态数据往往存在格式不统一、数据量过大、特征不明显等问题,需通过数据分割与特征提取,提炼核心信息、降低数据维度,适配后续向量存储与检索需求。本节将结合多模态场景,讲解数据分割的核心方法、特征提取的实操技巧,结合qwen-vl-plus大模型,实现多模态数据的标准化处理,为集成向量数据库奠定基础。

5.2.1 多模态数据分割(核心方法)

数据分割的核心目的是将大尺寸、大容量的多模态数据拆分为小的、可处理的单元,同时保留核心信息,适配LangChain组件与向量存储需求。针对不同类型多模态数据,采用差异化分割方法。

1. 文本数据分割

采用LangChain内置的RecursiveCharacterTextSplitter,按字符长度分割文本,避免分割破坏语义,代码示例:

#文本数据分割

from langchain.text_splitter import RecursiveCharacterTextSplitter

#加载文本数据(承接5.1.2.4PDF加载结果)

pdf_docs = PyPDFLoader("industrial_manual.pdf").load()

#合并所有PDF页面文本

full_text = "\n".join([doc.page_content for doc in pdf_docs])

#初始化文本分割器(设置分割长度与重叠度)

text_splitter = RecursiveCharacterTextSplitter(

chunk_size=500, #每个分割单元的字符长度

chunk_overlap=50, #相邻分割单元的重叠长度(确保语义连贯)

length_function=len

)

#执行分割

text_chunks = text_splitter.split_text(full_text)

print(f"文本分割完成,共分割为{len(text_chunks)}个单元")

print("第一个分割单元:", text_chunks[0])

2. 图片/视频帧数据分割

图片分割采用OpenCV的裁剪功能,按场景需求分割为子区域(如工业巡检图像的管道区域、设备区域);视频帧分割已在5.1.2.3中完成(按帧间隔提取),此处补充图片区域分割示例:

#图片区域分割(工业巡检图像为例)

import cv2

#加载图片

img = cv2.imread("industrial_test.jpg")

#定义分割区域(以管道区域为例,坐标需根据实际图片调整)

x1, y1, x2, y2 = 100, 100, 400, 300 #左上角与右下角坐标

#裁剪分割区域

img_chunk = img[y1:y2, x1:x2]

#保存分割后的子图片

cv2.imwrite("industrial_pipe_chunk.jpg", img_chunk)

print("图片区域分割完成,分割区域尺寸:", img_chunk.shape)

3. 音频数据分割

音频数据分割采用whisper的分段转写功能,按时间间隔分割音频,再转写为文本片段,代码示例:

#音频数据分割与转写

import whisper

import wave

#加载音频文件

audio_path = "industrial_voice.mp3"

model = whisper.load_model("base")

#读取音频信息,获取时长

with wave.open(audio_path, "rb") as wf:

duration = wf.getnframes() / wf.getframerate()

#30秒为一个单元分割音频(适配转写与后续处理)

segment_duration = 30

num_segments = int(duration // segment_duration) + 1

audio_chunks = []

for i in range(num_segments):

start = i * segment_duration

end = min((i+1)*segment_duration, duration)

#分段转写

result = model.transcribe(audio_path, language="zh", fp16=False, no_speech_threshold=0.5, start=start, end=end)

audio_chunks.append(result["text"].strip())

print(f"音频分割完成,共分割为{len(audio_chunks)}个单元")

print("第一个音频分割单元转写文本:", audio_chunks[0])

5.2.2 多模态数据特征提取(适配向量存储)

特征提取是将多模态数据(文本、图片、音频)转换为可量化的特征向量,核心是保留数据的核心信息,降低数据维度,适配向量数据库的存储与检索需求。本节将结合qwen-vl-plus大模型与LangChain内置嵌入工具,实现多模态特征提取。

1. 文本特征提取

采用langchain-community的QwenEmbeddings,结合qwen-vl-plus大模型,将文本片段转换为特征向量,代码示例:

#文本特征提取

from langchain_community.embeddings import QwenEmbeddings

#初始化嵌入模型(适配qwen-vl-plus,读取.env中的API密钥)

embeddings = QwenEmbeddings(api_key=os.getenv("QWen_API_KEY"))

#承接5.2.1.1的文本分割结果,提取特征向量

text_chunks = text_splitter.split_text(full_text)

text_embeddings = embeddings.embed_documents(text_chunks)

print(f"文本特征提取完成,共{len(text_embeddings)}个特征向量,每个向量维度:{len(text_embeddings[0])}")

#查看第一个文本片段的特征向量(简化输出)

print("第一个文本片段特征向量(前10位):", text_embeddings[0][:10])

2. 图片/视频帧特征提取

结合qwen-vl-plus的图像理解能力,将图片/视频帧转换为特征向量,代码示例:

#图片特征提取(适配qwen-vl-plus

from langchain_community.embeddings import QwenEmbeddings

from langchain.document_loaders import ImageLoader

#初始化嵌入模型

embeddings = QwenEmbeddings(api_key=os.getenv("QWen_API_KEY"))

#加载图片并提取特征

img_loader = ImageLoader("industrial_test.jpg")

img_doc = img_loader.load()[0]

#将图片Document转换为特征向量(通过图片描述间接提取特征)

#第一步:调用qwen-vl-plus生成图片描述

img_description = llm.invoke(f"请简洁描述这幅图片的核心内容,用于特征提取:{img_doc.page_content}")

#第二步:对图片描述提取特征向量

img_embedding = embeddings.embed_query(img_description)

print(f"图片特征提取完成,特征向量维度:{len(img_embedding)}")

print("图片特征向量(前10位):", img_embedding[:10])

3. 音频特征提取

先将音频转写为文本,再对文本提取特征向量(承接5.2.1节的音频分割转写结果),代码示例:

#音频特征提取(基于转写文本)

from langchain_community.embeddings import QwenEmbeddings

#初始化嵌入模型

embeddings = QwenEmbeddings(api_key=os.getenv("QWen_API_KEY"))

#承接5.2.1.3的音频分割转写结果,提取特征向量

audio_embeddings = embeddings.embed_documents(audio_chunks)

print(f"音频特征提取完成,共{len(audio_embeddings)}个特征向量,每个向量维度:{len(audio_embeddings[0])}")

5.2.3 数据分割与特征提取注意事项

(1)语义/特征保留:分割时需避免破坏数据的核心语义(文本)、核心特征(图片/音频)。例如,文本分割重叠度不宜过低,图片分割需保留关键区域。

(2)维度统一:确保所有多模态数据的特征向量维度一致(如均为768维),适配后续向量数据库存储。

(3)效率优化:大量多模态数据(如海量图片、长视频)可采用批量处理脚本,结合GPU加速(如OpenCV GPU版本),提升处理效率。

(4)特征验证:提取特征后,可通过qwen-vl-plus验证特征的有效性(如通过特征向量检索相似数据),确保特征能够准确反映数据核心信息。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询