数据分割与特征提取
多模态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.4的PDF加载结果pdf_docs PyPDFLoader(industrial_manual.pdf).load()#合并所有PDF页面文本full_text \n.join([doc.page_content for doc in pdf_docs])#初始化文本分割器设置分割长度与重叠度text_splitter RecursiveCharacterTextSplitter(chunk_size500, #每个分割单元的字符长度chunk_overlap50, #相邻分割单元的重叠长度确保语义连贯length_functionlen)#执行分割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 whisperimport wave#加载音频文件audio_path industrial_voice.mp3model whisper.load_model(base)#读取音频信息获取时长with wave.open(audio_path, rb) as wf:duration wf.getnframes() / wf.getframerate()#按30秒为一个单元分割音频适配转写与后续处理segment_duration 30num_segments int(duration // segment_duration) 1audio_chunks []for i in range(num_segments):start i * segment_durationend min((i1)*segment_duration, duration)#分段转写result model.transcribe(audio_path, languagezh, fp16False, no_speech_threshold0.5, startstart, endend)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_keyos.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-plusfrom langchain_community.embeddings import QwenEmbeddingsfrom langchain.document_loaders import ImageLoader#初始化嵌入模型embeddings QwenEmbeddings(api_keyos.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_keyos.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验证特征的有效性如通过特征向量检索相似数据确保特征能够准确反映数据核心信息。