领域LLM九讲——第3讲 从多模态数据分析chunk方法——多模态数据分类
文章目录
1.1 技术背景
在多模态场景下,Chunk 技术不仅对文本处理至关重要,还需要针对图像、音频和视频等非文本信息进行专门设计,以便让 LLM 更好地理解和检索不同模态的数据。概览如下:多模态分块可以分为文本导向分块(对 ASR/文档文本进行常规分块)、图像区域分块(对大幅图像或图表进行区域化处理)、视频语义分块(基于场景或镜头检测进行切片)、音频时段分块(基于 ASR+VAD 分段或固定时间窗口)、以及混合模态分块(保证图像/文本/表格等信息在同一 Chunk 中)。这些方法既能保留局部语义一致性,又能提高检索召回与推理效率。下面按不同模态依次展开讨论,并在最后以表格形式汇总各策略的特点、典型工具与应用场景。
1.2 多模态数据分类
- PDF/Word/Excel/PowerPoint等办公文档:常见于企业报告、合同、技术手册等,需要从中提取文本及表格信息用于自动问答或摘要。
- 图片(JPEG/PNG/TIFF等):通常出现于产品说明、发票扫描件、科研论文中的图表与示意图等,需要先做 OCR,再将文字与图像特征结合。
- 音频(MP3/WAV等):如会议录音、访谈或在线课程音轨,需通过 ASR(自动语音识别)将音频转为文本后,再进一步处理。
- 视频(MP4/AVI等):常见于会议视频、产品演示、安防监控录像等,需要抽取音频转写与关键帧图像,并结合字幕或图像内容进行理解。
- CSV/JSON/XML/HTML 等结构化文本:如日志文件、数据报表、网页抓取内容,用于快速加载表格数据或半结构化信息。
6

1.2.1 PDF
场景示例:
- 企业合同与报告自动化:法律团队需要对合同条款进行问答,或财务团队需要从年报 PDF 中提取财务指标。
- 科研论文全文索引与检索:研究人员将大量 PDF 格式的论文导入知识库,对其进行全文检索与摘要。
- 发票/凭证 OCR 后归档:财务系统从扫描的发票 PDF 中提取表格与文字,实现自动化归档。
API:
1.2.1.1 PyPDF2
- 用途:加载 PDF,按页提取纯文本。
- 示例:
from PyPDF2 import PdfReader reader = PdfReader("example.pdf") for page in reader.pages: text = page.extract_text() # 执行后续文本处理
1.2.1.2 pdfplumber
- 用途:在 PyPDF2 基础上可精细提取文字、表格与图像位置信息,适合需要解析表格时使用。
- 示例:
import pdfplumber with pdfplumber.open("example.pdf") as pdf: for page in pdf.pages: text = page.extract_text() tables = page.extract_tables() # 处理 text 与 tables
1.2.2 DOC(Word)
场景示例:
- 企业报告与会议纪要:从 Word 格式的项目报告或开会纪要中提取要点,供 LLM 做后续摘要和问答。
- 法律文书自动化审查:法务团队需要分析 Word 文档中的条款、提取关键段落做自动合规检查。 模板化合同批量生成与解析:从已生成的
- Word 合同模板中提取变量并填充、校验。
API:
1.2.2.1 python-docx
- 用途:读取/写入 .docx 文档,可按段落或表格单元格提取文字。
- 示例:
from docx import Document doc = Document("example.docx") for para in doc.paragraphs: text = para.text # 进一步处理 for table in doc.tables: for row in table.rows: row_texts = [cell.text for cell in row.cells]
1.2.2.2 docx-parser
- 用途:基于 python-docx,提供带样式/图片的更细粒度内容解析。
- 示例:
from docx_parser import DocumentParser doc = DocumentParser("example.docx") for _type, item in doc.parse(): # _type 可能为 'paragraph', 'multipart', 'table' # item 为对应内容
1.2.3 PPTX
场景示例:
- 演示文稿内容自动摘要与问答:市场部将 pptx 演示文稿传给 LLM,自动生成会议要点或答疑。
- 幻灯片批量文本/图片提取:教育平台从教与学 PPT 中抽取文字与配图制成教材或索引。
- 品牌素材/封面图片识别:视觉团队需要从 PPT 中提取产品图片或品牌 logo 做后续分析。
API:
1.2.3.1 pptx
- 用途:官方库,可读取/创建 .pptx,按幻灯片、形状级别访问文字与图片。
- 示例:
from pptx import Presentation prs = Presentation("example.pptx") for slide in prs.slides: for shape in slide.shapes: if hasattr(shape, "text"): text = shape.text if shape.shape_type == 13: # 13 对应图片类型(MSO_SHAPE.PICTURE) img = shape.image # img.blob 可获取二进制数据
1.2.3.2 pptx2txt2
- 用途:快速提取每张幻灯片的文字与备注,支持图片导出。
- 示例:
import pptx2txt2 text_all = pptx2txt2.extract_text("example.pptx") text_per_slide = pptx2txt2.extract_text_per_slide("example.pptx") image_paths = pptx2txt2.extract_images("example.pptx", "./images_out")
1.2.4 xlsx/csv
场景示例:
- 财务报表自动化分析:财务团队将季度报表以 Excel 上传,LLM 从中提取“营业收入”“净利润”等关键数值后生成自然语言分析报告。
- 用户行为日志/CSV 数据处理:运营/数据团队把导出的用户行为 CSV 文件上传,LLM 读取表格后提供数据摘要或可视化建议。
- 机器翻译前的平行文本表:翻译项目组提供 CSV 格式的平行语料,LLM 读取后做自动翻译或句对齐。
API:
1.2.4.1 pandas
- 用途:读取 CSV/Excel,支持 read_csv()、read_excel(),提供 DataFrame 进行后续清洗与分析。
- 示例:
import pandas as pd # 读取 CSV df_csv = pd.read_csv("example.csv") # 读取 Excel(支持 .xls/.xlsx) df_xlsx = pd.read_excel("example.xlsx", sheet_name="Sheet1")
1.2.4.2 csv
- 用途:基于 python-docx,提供带样式/图片的更细粒度内容解析。
- 示例:
import csv with open("example.csv", newline="", encoding="utf-8") as f: reader = csv.reader(f) for row in reader: # row 为列表形式
1.2.4.3 openpyxl
- 用途:直接读取/写入 .xlsx 文件,支持复杂操作(样式、图表)。
- 示例:
from openpyxl import load_workbook wb = load_workbook("example.xlsx") ws = wb["Sheet1"] for row in ws.iter_rows(values_only=True): # row 为元组形式
1.2.5 图像(JPEG/PNG/TIFF 等)
场景示例:
- 扫描文档 OCR 输入:系统将发票或合同扫描为图片,LLM 需要结合图像 OCR 结果与整体文档结构做解析。
- 产品照片与 SKU 对应:电商平台上传商品图片,LLM 自动识别图中文字(如标签、品牌),并将其与 SKU 信息关联。
- 科研图片分析:自动化科研平台上传显微镜图,LLM 调用图像处理后结合文字分析生成报告。
API:
1.2.5.1 Pillow
- 用途:读取/写入主流图像格式,进行基本图像操作(裁剪、缩放、格式转换)。
- 示例:
from PIL import Image img = Image.open("example.jpg") # 自动根据文件头识别格式 width, height = img.size img_resized = img.resize((width//2, height//2)) img_resized.save("resized.png")
1.2.5.2 OpenCV (cv2)
- 用途:功能全面的计算机视觉库,支持读取图像/视频、图像滤波、特征检测、目标识别、相机标定等。
- 示例:
import cv2 img = cv2.imread("example.png") # BGR 格式 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imwrite("gray_example.png", gray)
1.2.5.3 scikit-image
- 用途:科学图像处理库,基于 NumPy/SciPy,提供分割、变换、滤波、特征提取等算法。
- 示例:
from skimage import io, filters img = io.imread("example.tiff", as_gray=True) edges = filters.sobel(img) io.imsave("edges.png", edges)
1.2.6 音频(MP3/WAV 等)
场景示例:
-
会议/访谈录音转写:客服或研发团队将 Zoom/Teams 录音上传,LLM 先通过 ASR 转写,再结合上下文生成会议纪要或问答。
-
播客/音频日志分析:内容运营团队将播客音频文件提供给 LLM,做自动要点生成与情感分析。
-
音频质量检测与特征提取:音乐平台将音频文件传给 LLM,提取 MFCC、音高、节奏等特征用于推荐系统。
API:
1.2.6.1 librosa
- 用途:音频与音乐信号分析,支持读取音频、时频分析、特征提取(MFCC、谱图、色度等)。
- 示例:
import librosa y, sr = librosa.load("example.wav", sr=None) # sr=None 保持原采样率 mel_spec = librosa.feature.melspectrogram(y=y, sr=sr)
1.2.6.2 SpeechRecognition
- 用途:统一接口调用多种 ASR 引擎(Google Web Speech API、CMU Sphinx、Whisper 等)进行语音转文本。
- 示例:
import speech_recognition as sr
r = sr.Recognizer()
with sr.AudioFile("example.wav") as source:
audio_data = r.record(source)
text = r.recognize_google(audio_data, language="zh-CN")
1.2.6.3 PyDub
- 用途:基于 FFmpeg,便捷地进行音频剪辑、拼接、淡入淡出、格式转换等操作。
- 示例:
from pydub import AudioSegment sound = AudioSegment.from_file("example.mp3", format="mp3") sound.export("example.wav", format="wav")
1.2.6.4 PyAudio
- 用途:PortAudio 的 Python 绑定,支持实时录音与播放,适用于实时 ASR 或声卡输入场景。
- 示例:
import pyaudio import wave CHUNK = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 16000 RECORD_SECONDS = 5 WAVE_OUTPUT_FILENAME = "output.wav" p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) frames = [] for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) frames.append(data) stream.stop_stream() stream.close() p.terminate() wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(frames)) wf.close()
1.2.7 视频(MP4/AVI 等)
场景示例:
-
会议录像自动分段与纪要:研发团队将公司全员会议视频提交,LLM 抽取逐字转写(ASR)+ 关键帧图像,自动生成会议纪要与 PPT 要点。
-
产品演示视频内容理解:市场团队上传产品 Demo 视频,LLM 从视频中抽帧并提取字幕/语音信息,生成要点文字稿。
-
安防监控整体事件检索:安全系统将监控原始视频送入 LLM,先抽取音轨转写与关键帧图像,配合图像目标检测,实现视频内容检索。
API:
1.2.7.1 OpenCV
- 用途:读取摄像头或视频文件,按帧处理、编解码,支持图像处理与目标跟踪。
- 示例:
import cv2 cap = cv2.VideoCapture("example.mp4") while cap.isOpened(): ret, frame = cap.read() if not ret: break # 对 frame 进行图像处理 cv2.imshow("Frame", frame) if cv2.waitKey(1) & 0xFF == ord("q"): break cap.release() cv2.destroyAllWindows()
1.2.7.2 ffmpeg + ffmpeg-python
- 用途:底层多媒体处理框架,支持转码、分段、抽帧、抽取音轨、格式转换等。
- 示例:
import ffmpeg ( ffmpeg .input("example.mp4") .output("frame_%04d.jpg", vf="fps=1") .run() )
1.2.7.3 MoviePy
- 用途:基于 FFmpeg 的 Pythonic API,可剪辑视频、合并片段、添加字幕与特效。
- 示例:
from moviepy.editor import VideoFileClip clip = VideoFileClip("example.mp4").subclip(10, 20) clip.write_videofile("subclip.mp4", codec="libx264")
1.2.7.4 PyAudio
- 用途:FFmpeg 的 Python 绑定,支持更底层的封装格式和解码控制,适合对帧率、码率敏感的场景。
- 示例:
import av container = av.open("example.mp4") for frame in container.decode(video=0): img = frame.to_ndarray(format="rgb24") # 进一步图像处理
1.2.8 HTML/JSON/XML 等半/结构化文本
场景示例:
-
网页抓取与对话机器人:客服系统从 HTML 页面抓取产品常见问题列表,LLM 将其转化为对话知识库。
-
API 返回的 JSON 数据摘要:技术文档系统中,调用某服务 API 返回 JSON,LLM 需要对其字段进行解读与自然语言说明。
-
XML 配置文件解析:工程师将设备配置导出为 XML,LLM 自动解析并生成配置说明文档。
API:
1.2.8.1 BeautifulSoup(bs4)
- 用途:解析 HTML/XML,支持 CSS 选择器、XPath 方式提取标签与属性。
- 示例:
from bs4 import BeautifulSoup with open("example.html", encoding="utf-8") as f: soup = BeautifulSoup(f, "html.parser") title = soup.title.string items = soup.select("div.product > h2")
1.2.8.2 lxml
- 用途:基于 C 语言 libxml2/libxslt,解析 HTML/XML 性能更高,还支持 XSLT 转换。
- 示例:
from lxml import etree parser = etree.HTMLParser() tree = etree.parse("example.html", parser) titles = tree.xpath("//div[@class='product']/h2/text()")
1.2.8.3 xml.etree.ElementTree
- 用途:Python 标准库,解析简单 XML,支持获取标签、属性与文本。
- 示例:
import xml.etree.ElementTree as ET tree = ET.parse("example.xml") root = tree.getroot() for elem in root.findall(".//item"): text = elem.text
1.2.8.4 PyAudio
- 用途:FFmpeg 的 Python 绑定,支持更底层的封装格式和解码控制,适合对帧率、码率敏感的场景。
- 示例:
import av container = av.open("example.mp4") for frame in container.decode(video=0): img = frame.to_ndarray(format="rgb24") # 进一步图像处理
1.3 多模态数据类型与解析对比表
| 数据类型 | 简要应用场景示例 | Python 解析库/API |
|---|---|---|
| - 企业合同/报告自动化问答 - 科研论文全文索引与摘要 - 发票 OCR 后归档 | - PyPDF2: PdfReader("file.pdf")... (hassanagmir.com)- pdfplumber: pdfplumber.open("file.pdf")... (GitHub, PyPI)- PyMuPDF: fitz.open("file.pdf")... (hassanagmir.com)- pdfminer.six: extract_text("file.pdf") (hassanagmir.com) | |
| DOCX | - 企业报告/会议纪要自动摘要 - 法务文书条款解析 - 模板化合同批量生成与解析 | - python-docx: Document("file.docx")... (Python-docx文档)- officeparserpy: parse_office("file.docx") (GitHub, GitHub)- docx-parser: DocumentParser("file.docx") (PyPI, PyPI) |
| PPTX | - 演示文稿内容自动摘要与问答 - 幻灯片批量文本/图片提取 - 品牌素材/封面图片识别 | - python-pptx: Presentation("file.pptx")... (Aspose Documentation)- pptx2txt2: extract_text("file.pptx") (PyPI, GitHub) |
| XLSX/CSV | - 财务报表自动化分析 - 用户行为日志/CSV 数据处理 - 机器翻译平行文本表处理 | - pandas: pd.read_csv("file.csv"), pd.read_excel("file.xlsx") (GeeksforGeeks, W3Schools)- csv (标准库): csv.reader(open("file.csv")) (Datacamp)- openpyxl: load_workbook("file.xlsx") (shelokuma tech blog)- xlrd/xlwt: xlrd.open_workbook("file.xls") (shelokuma tech blog) |
| 图像 | - 扫描文档 OCR 输入 - 产品照片与 SKU 对应 - 科研图片分析 | - Pillow: Image.open("file.jpg")... (Technical Manuals, Pillow (PIL Fork))- OpenCV: cv2.imread("file.png")... (Technical Manuals)- scikit-image: io.imread("file.tiff") (维基百科)- pytesseract: pytesseract.image_to_string(...) (Technical Manuals, GitHub) |
| 音频 | - 会议/访谈录音转写 - 播客/音频日志分析 - 音频质量检测与特征提取 | - librosa: librosa.load("file.wav") (PyPI, Analytics Vidhya)- SpeechRecognition: r.recognize_google(...) (PyPI, Analytics Vidhya)- PyDub: AudioSegment.from_file("file.mp3") (GitHub, Analytics Vidhya)- PyAudio: 实时录音示例 (PyPI, Analytics Vidhya) |
| 视频 | - 会议录像自动分段与纪要 - 产品演示视频内容理解 - 安防监控事件检索 | - OpenCV: cv2.VideoCapture("file.mp4") - ffmpeg-python: ffmpeg.input("file.mp4").output(...) - MoviePy: VideoFileClip("file.mp4") - PyAV: av.open("file.mp4")... |
| HTML/JSON/XML | - 网页抓取与对话机器人 - API 返回 JSON 数据摘要 - XML 配置文件解析 | - BeautifulSoup: BeautifulSoup(html, "html.parser") (shelokuma tech blog, GeeksforGeeks)- lxml: etree.parse("file.html") (shelokuma tech blog, GeeksforGeeks)- json: json.load(open("file.json")) (GeeksforGeeks, shelokuma tech blog)- xml.etree.ElementTree: ET.parse("file.xml") (shelokuma tech blog, GeeksforGeeks) |
附录
本人github项目地址:https://github.com/oncecoo
欢迎关注!
94

被折叠的 条评论
为什么被折叠?



