当前位置:首页>python>干货|如何运用「大模型及Python」进行非结构化文本分析

干货|如何运用「大模型及Python」进行非结构化文本分析

  • 2026-09-10 04:09:32
干货|如何运用「大模型及Python」进行非结构化文本分析

【前言】笔者是一名互联网用户研究员,近期运用「大模型及Python」进行了超长用户对话文本的分析,本文将分享一套经过实战验证的‘Python+大模型’组合方法论,教你如何快速高效处理大规模文本数据。(说明:本次所涉及案例均进行了脱敏处理,只展示部分思路,实操时需根据项目情况灵活调整)

本文结构:

一、运用大模型及Python开展分析的【两种场景说明】

二、【纯Python代码场景】分析:

(一)案例1:合并用户与客服的对话记录

(二)案例2:针对数据处理结果进行描述性统计分析

(三)案例3:裁切AI生成的组合图

三、【Python代码中调用大模型场景】分析**:

(一)完整分析步骤说明:

(二)如何评估大模型打标结果:


一、运用大模型及Python开展分析的【两种场景说明】

  • 我目前在Python代码平台(如使用Jupyter,通常通过 Anaconda 安装)进行数据处理主要包括两种场景,两种场景的核心差异是「是否需要调用大模型进行数据处理,以及是否要花钱」,这两种场景的具体差异如下:

维度
🟢 场景一:纯 Python 代码处理
🔵 场景二:调用大模型分析
核心定义
不需要调用大模型,通过纯代码处理
需要调用大模型接口(API)进行处理,Python代码中需要嵌入「系统提示词」
是否付费
免费(本地运行代码)
付费(消耗 Token 费用)
数据形态
结构化调整想要的数据“本身已经有了”,只是格式不对。
非结构化转结构化想要的数据“本身没有”,需要模型理解并生成。
适用案例
• 合并用户与客服的多行对话记录• 批量裁切/处理图片• 问卷数据的交叉统计
• 给大段文本打标(如不满原因)• 判断打标结果置信度• 提取关键信息如关键原文
处理流程
简单线性(代码可能也需调试):明确需求 → 大模型生成Python代码 → 运行 → 核验
复杂迭代:运用大模型写系统提示词及代码→大模型初步分析→对比小样本人工打标结果进行「系统提示词调试 」→ 全量跑数
核心逻辑
把需求发给大模型,让它写 Python 代码帮你干活。
写好System Prompt,用 Python 批量把数据喂给大模型。

二、【纯Python代码场景】分析:

  • 核心逻辑: 明确需求,将需求发给大模型,让其生成 Python 代码(说明:针对复杂需求,在大模型生成代码前,可提供原始表格的「示例」给大模型,以让大模型更好了解你的需求及原始数据的结构)。

(一)案例1:合并用户与客服的对话记录

1、【步骤一】明确需求,将需求转化为清晰指令词

  • 撰写提示词前,首先要明确:

    • 1)你想要什么:最终数据结果展示成什么样(有什么要求、最终数据的字段/行数等),以及明确「需要生成完成所需任务的Python代码」,例如

    • 【合并对话内容要求说明】

      1、一个用户的所有对话记录需要汇总到一起,对话内容要求按时间先后排序,且区分是谁说的

      2、原始数据共XX个UID,所以最后要生成XX行数据(加上标题),总共应该生成XX行数据

      3、最后生成数据包括两个字段,用户UID、对话内容

      请生成完成上述任务的Python代码

    • 2)提供数据处理的「基本业务逻辑(尤其是一些复杂的表格间逻辑关系,如通过哪个字段区分谁说的话)、背景信息(如角色背景)」,帮助大模型更好理解及完成任务

你是XX用户研究员,你要使用大模型做【XX调研】,用户通过XX方式会与XX产生对话记录,一个用户会产生多行聊天记录,本次目标需要把一个用户的所有对话记录汇总到一起

表格字段【XX发送人】包括「A、B」两种人,如果【XX发送人】是A,表示字段【消息内容】是A说的;如果【消息发送人】是B,表示字段【消息内容】是B说的

2、【步骤二】大模型根据需求生成代码

  • 大模型可能会给出代码解读,生成代码范例

  • 代码解读范例:

 

3、【步骤三】运行代码

  • 打开 Python 代码编辑器(推荐使用 Jupyter ,安装 Anaconda 后自带),将代码复制进去(注意将“输入文件路径”修改为实际文件路径),点击运行。

4、【步骤四】代码初步调试

  • 如果代码运行有问题,将「运行错误反馈复制给大模型,让大模型分析原因并给出解决方案」

  • 举例1:输出路径有问题

    • 提示词(可以完整复制所有运行错误反馈结果):

    • OSError: Cannot save file into a non-existent directory: 'Users/caoruixue/Desktop'

      Click to add a cell.

      运行时显示以上,是什么意思

    • 大模型解答

5、【步骤五】核验数据
  • 说明:代码运行完成后,打开输出的 Excel 文件,可以找一些极端数据,人工检查一下数据是否符合预期(例如:合并后的对话是否完整、顺序是否正确)。

6、【步骤六】若数据不符合需求,继续调试代码

  • 将问题发给大模型,让大模型分析问题原因及如何优化


(二)案例2:针对数据处理结果进行描述性统计分析

1、【步骤一】给大模型输入清晰需求指令词

  • 提示词举例如下:

重新运行出结果了,我怎样写代码可以给出以下统计数据

一、两次XX原因

二、不同维度的原因差异

2、【步骤二】大模型根据需求生成代码

  • 我该步骤使用的Google Gemini,不仅给出代码,也会给出「功能说明、注意事项(如检查关键字段与代码所用字段是否一致)」

      

    3、【步骤三】运行代码

    • 打开 Python 代码编辑器(推荐使用 Jupyter ,安装 Anaconda 后自带),将代码复制进去(注意将“输入文件路径”修改为实际文件路径),点击运行。

    4、【步骤四】可进行数据检验


    (三)案例3:裁切AI生成的组合图

    背景:我让AI生成一个《太阳公公》主题的10页绘本图片,AI会直接生成10张组合图,调试代码后逐步生图也不稳定,我就萌生了让AI裁切图片的想法

    1、【步骤一】给大模型输入清晰需求指令词

    这个图片用Python拆分成10个独立图形,代码怎么写

    2、【步骤二】大模型根据需求生成代码

    import osfrom PIL import Imagedef split_image(image_path, output_folder, rows=2, cols=5):"""    将图片拆分成 rows * cols 个网格,并保存为独立文件    """# 1. 打开图片if not os.path.exists(image_path):        print(f"错误:找不到文件 {image_path}")        return    img = Image.open(image_path)    img_width, img_height = img.size    # 2. 计算每个小图的宽度和高度# 注意:这里假设图片是完美对齐的网格。# 如果图片四周有不想要的白边,可以先用 img.crop() 裁剪掉外围    item_width = img_width // cols    item_height = img_height // rows    # 3. 创建输出文件夹if not os.path.exists(output_folder):        os.makedirs(output_folder)    print(f"图片尺寸: {img_width}x{img_height}")    print(f"单个小图尺寸: {item_width}x{item_height}")    print("开始拆分...")    # 4. 循环切图    count = 1for r in range(rows):        for c in range(cols):            # 计算裁剪区域 (左, 上, 右, 下)            left = c * item_width            upper = r * item_height            right = left + item_width            lower = upper + item_height            # 执行裁剪            box = (left, upper, right, lower)            cropped_img = img.crop(box)            # 5. 保存图片# 文件名例如:sun_01.jpg, sun_02.jpg            file_name = f"sun_{count:02d}.jpg"             save_path = os.path.join(output_folder, file_name)            cropped_img.save(save_path)            print(f"已保存: {save_path}")            count += 1    print("拆分完成!")# --- 使用示例 ---# 请将下面的路径替换为你实际的图片路径current_image = "sun.jpg"  # 你的图片文件名output_dir = "sun_split"   # 拆分后存放的文件夹名split_image(current_image, output_dir, rows=2, cols=5)

    3、【步骤三】运行代码

    • 打开 Python 代码编辑器(推荐使用 Jupyter ,安装 Anaconda 后自带),将代码复制进去,点击运行。

    4、【步骤四】调试代码

    • 告诉大模型【错误:找不到文件 sun.png】

    • 大模型输出如下:

    5、【步骤五】使用调试后代码重新运行,超快就输出了要求结果

    • 代码改动:我把图片路径改为了「绝对路径」,这样大模型就能找到图片了

    • 图片2秒内就会完成裁切,生成文件夹如下


    三、【Python代码中调用大模型场景】分析:

    • 说明:该部分以“根据用户与客服的对话记录,分析不满原因”为案例进行说明

    (一)完整分析步骤说明:

    核心逻辑:整个过程要经历「明确需求→大模型编写代码及系统提示词 → 少量数据测试(调试系统提示词)→ 全量数据跑数 」的复杂过程。

    1、【步骤一】给大模型输入清晰需求指令词

    你是XX用户研究专家,你需要使用大模型做【XX原因调研】,你现在有用户与客服的对话记录数据,总共有XX个用户,每行展示一个用户的信息,包含【内容等】几个字段,现在你需要撰写Python代码,通过运行Python代码,在代码中运行【系统提示词】,让大模型对【每名用户的对话内容进行XX原因打标】,请提供相关代码

    2、【步骤二】大模型输出初版解决思路及对应代码,含系统提示词(System Prompt)

    • 输入以上提示词后,Google Gemini大模型输出了初版结果(详见后文输出参考),它做的非常好的有几点:

      • 它针对我的需求进行了分析,先梳理了分步骤的分析思路,最后再生成代码

      • 给出【代码使用说明】:①告知需要安装 OpenAI 的库;②配置API的方法,并推荐使用 gpt-4o (最智能) 或 deepseek-chat (性价比极高,适合长文本)。③给出运行结果:在原有表格基础上,会添加哪些列

      • 给出【专家建议】:建议拿到打标结果后,进行更深层深挖

    • 编写系统提示词(System Prompt)是决定分析效果最关键的一步,系统提示词一般会包括「它扮演的角色、背景、任务目标、规则、分类以及输出格式」等

      • 说明:系统提示词中「实际原因分类需要根据自己过往调研积累进行调整,大模型直接给的分类不一定合适」

    📝系统提示词(System  Prompt) 编写技巧:

    • Role(角色):你是一名资深用户研究专家...

    • Context(背景):这是一份用户与客服的对话记录...

    • Task(任务):请分析用户不满的最主要原因。

    • Constraints(约束):严格基于事实,不要过度推断等

    • Reason(原因分类):包含哪些分类

    • Format(输出):请输出 JSON 格式,包含字段 Reason(原因分类), Evidence(原话证据)。

    • 大模型完整输出参考如下:

    import pandas as pdimport jsonimport osimport timeimport concurrent.futuresfrom tqdm import tqdmfrom openai import OpenAI  # 需要安装: pip install openai pandas openpyxl# ================= 配置区域 =================# 请替换为你的 API Key 和 Base URL# 例如使用 DeepSeek, 阿里通义, 或是 OpenAI 原生API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" BASE_URL = "https://api.openai.com/v1" # 如果是用DeepSeek,填 https://api.deepseek.comMODEL_NAME = "gpt-4o" # 或 "deepseek-chat", "qwen-max" 等# 输入和输出文件路径INPUT_FILE = "/Users/.xlsx"  # 上一步处理好的文件OUTPUT_FILE = "/Users/.xlsx"# ===========================================# 初始化客户端client = OpenAI(api_key=API_KEY, base_url=BASE_URL)def get_system_prompt():"""    定义系统提示词:这是用户研究专家的核心指令    """return """你是一名XX用户研究专家。你的任务是分析【客服与用户的对话记录】,通过对话内容推断用户的【XX原因】。请仔细阅读用户的对话记录,必须严格按照以下【原因分类】进行打标(只选择最主要的一个原因):【原因分类】:XX【输出格式】:请直接输出一个JSON格式的数据,不要包含Markdown标记(如 ```json),包含以下字段:- "reason_category": "从上述分类中选一个具体的分类名称"- "reason_detail": "用简练的语言概括具体情况(不超过20字)"- "confidence": "高/中/低" (判断你对这个结论的置信度)- "key_quote": "摘录用户表达原因的原话(如果没有原话则留空)"【示例】:用户说:"XX。"输出:{"reason_category": "XX", "reason_detail": "XX", "confidence": "XX", "key_quote": "XX"}"""def analyze_user_reason(text):"""    调用大模型进行分析    """if not text or pd.isna(text) or len(str(text)) < 5:        return {            "reason_category": "数据缺失/无效",            "reason_detail": "对话记录为空或过短",            "confidence": "低",            "key_quote": ""        }    # 截断过长的文本,防止超过Token限制(通常取最后4000字符往往包含了XX原因,也可取全量)# 如果是全量分析,建议保留全部,除非报错    conversation_content = str(text)[-5000:]     messages = [        {"role": "system", "content": get_system_prompt()},        {"role": "user", "content": f"请分析以下对话记录:\n\n{conversation_content}"}    ]    try:        completion = client.chat.completions.create(            model=MODEL_NAME,            messages=messages,            temperature=0.1, # 低温度保证输出稳定            response_format={"type": "json_object"} # 强制JSON模式(如果是OpenAI或支持该参数的模型)        )        result_str = completion.choices[0].message.content        # 清洗可能存在的 markdown 符号        result_str = result_str.replace("```json", "").replace("```", "").strip()        return json.loads(result_str)    except Exception as e:        print(f"Error processing: {e}")        return {            "reason_category": "API调用失败",            "reason_detail": str(e),            "confidence": "低",            "key_quote": ""        }def process_dataframe(df):"""    多线程处理DataFrame    """    results = []    # 只需要处理有对话内容的行    total_rows = len(df)    print(f"开始处理 {total_rows} 条数据,使用模型: {MODEL_NAME}")    # 线程池并发处理with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:        # 提交任务# 假设你的列名是 '对话文本' 或 '对话内容',请根据实际文件调整        content_col = '对话文本' if '对话文本' in df.columns else '对话内容'if content_col not in df.columns:            print(f"错误:找不到对话内容列,你的列名是: {df.columns}")            return df        future_to_index = {            executor.submit(analyze_user_reason, row[content_col]): index             for index, row in df.iterrows()        }        # 进度条for future in tqdm(concurrent.futures.as_completed(future_to_index), total=total_rows, desc="打标进度"):            index = future_to_index[future]            try:                data = future.result()                results.append({                    "index": index,                    "XX一级归因": data.get("reason_category"),                    "XX详情": data.get("reason_detail"),                    "置信度": data.get("confidence"),                    "用户原话": data.get("key_quote")                })            except Exception as exc:                print(f'Row {index} generated an exception: {exc}')    # 将结果合并回原DataFrame    result_df = pd.DataFrame(results).set_index("index")    final_df = df.join(result_df)    return final_dfif __name__ == "__main__":    # 1. 读取数据if os.path.exists(INPUT_FILE):        print("正在读取文件...")        df = pd.read_excel(INPUT_FILE)        # 如果是为了测试,可以先只取前10条# df = df.head(10) # 2. 开始打标        df_tagged = process_dataframe(df)        # 3. 保存结果        df_tagged.to_excel(OUTPUT_FILE, index=False)        print(f"处理完成!结果已保存至: {OUTPUT_FILE}")        # 4. 简单打印一下统计结果if "XX一级归因" in df_tagged.columns:            print("\n=== 初步归因统计 ===")            print(df_tagged["XX一级归因"].value_counts())    else:        print(f"文件不存在: {INPUT_FILE}")

    3、【步骤三】根据大模型回复及代码运行结果「初步调试代码」

    (说明:以下罗列了部分真实调试场景)

    1)【场景一】大模型第一次生成的代码中提示「# 截断过长的文本,防止超过Token限制」,因为这个可能会有影响,所以我让大模型修改代码保留全量数据

    • 提示词:

    # 截断过长的文本,防止超过Token限制(通常取最后4000字符往往包含了XX原因,也可取全量)

    # 如果是全量分析,建议保留全部,除非报错

    conversation_content = str(text)[-5000:] 

    我需要保留全量文本

    • 根据需求,大模型不仅修改了代码,还进行了以下拓展:

      ①优化了「系统提示词」(增加了「重要处理原则)

    • ②做了成本预估,推荐使用模型如下:

            • 大模型优化后部分输出参考:

            def get_system_prompt():"""    针对全量长文本优化的System Prompt    """return """你是一名XX用户研究专家。你的任务是分析【XX】,通过对话内容推断XX。### ⚠️ 重要处理原则:1. **全量扫描**:**XX原因可能出现在对话的任何位置**(早期、中期或晚期)。2. **忽略噪音**:记录中可能包含大量XX。请**忽略**这些单向信息,重点寻找**XX发送的回复**。3. **定位关键点**:重点寻找XX等意图的时刻。### 原因分类(Codebook):1. XXX(此处省略)### 输出格式:请直接输出一个JSON格式的数据,不要包含Markdown标记,包含以下字段:- "reason_category": "从上述分类中选一个"- "reason_detail": "简练概括(20字以内)"- "confidence": "高/中/低"- "key_quote": "摘录XX表达原因的原话(非常重要,必须是原话,不要XX的话)""""def analyze_user_reason(text):"""    调用大模型进行全量分析(无截断)     以下代码省略。。。。。    

            2)【场景二】让大模型生成用DeepSeek v3.2模型处理数据的代码

            • 提示词:

            我计划用DeepSeek v3.2模型,代码应该怎么改

            • 根据需求,大模型不仅修改了代码,还针对使用DeepSeek分析给出了特别提示(很贴心)

            • 大模型优化后部分输出参考:

            # ================= 配置区域 (DeepSeek 版本) =================# 1. API Key: 请前往 https://platform.deepseek.com/api_keys 申请# 格式通常是以 sk- 开头的字符串API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 2. Base URL: DeepSeek 官方兼容接口地址 (注意不要写错)BASE_URL = "https://api.deepseek.com"# 3. 模型名称: # DeepSeek V3 模型的标准 API 名称是 "deepseek-chat"# (DeepSeek 官方目前没有 v3.2 这个特定名称,通常 deepseek-chat 指向的就是最新的 V3)MODEL_NAME = "deepseek-chat" # ==========================================================

            3)【场景三】大模型输出原文太简单,继续调试「系统提示词」

            • 提示词:

            我的代码是这样的,目前有一个问题,生成的用户原话太简单了,生成原话这块是否可以扩展

            • 根据需求,大模型重新优化了代码,系统提示词中增加了「用户原话提取指令」

              • # ⚠️ 关键指令:关于【用户原话提取】的要求 

              • 1. **完整性**:不要只摘录几个字。请摘录包含上下文的完整句子,甚至是连续的2-3句话,以便还原当时的语境。

              •  2. **多点证据**:如果用户在不同时间点多次提到了原因,请将这些原话拼接在一起,中间用“ || ”隔开。

              •  3. **第一人称**:必须是原话,严禁自己总结或改写。

              •  4. **对话还原**:如果原因是基于双方对话产生的(例如A问“是觉得难吗?”,B回“对”),请把A的问题也一并摘录,格式为:[A:...] [B:...]。

            • 大模型优化后部分输出参考:

            # 修改前:# - "key_quote": "摘录XX表达原因的原话"# 修改后(优化版):def get_system_prompt():"""定义系统提示词 - 优化原话提取版"""return """你是一名XX用户研究专家。你的任务是分析XX,通过对话内容推断XX原因。# 背景(省略)# 处理原则:1. **全量扫描**:原因可能出现在对话的任何位置。2. **忽略噪音**:忽略单向通知,重点寻找**XX发送的回复**。3. **推断与证据**:必须基于事实,不要过度猜测。# 原因分类 Codebook:(此处保持你原有的分类列表,此处省略以节省篇幅...)# ⚠️ 关键指令:关于【用户原话提取】的要求1. **完整性**:不要只摘录几个字。请摘录包含上下文的完整句子,甚至是连续的2-3句话,以便还原当时的语境。2. **多点证据**:如果用户在不同时间点多次提到了原因,请将这些原话拼接在一起,中间用“ || ”隔开。3. **第一人称**:必须是原话,严禁自己总结或改写。4. **对话还原**:如果原因是基于双方对话产生的(例如A问“是觉得难吗?”,B回“对”),请把A的问题也一并摘录,格式为:[A:...] [B:...]。# 输出格式:请直接输出一个JSON格式的数据,不要包含Markdown标记,包含以下字段:- "reason_category": "从上述分类中选一个"- "reason_detail": "简练概括(20字以内)"- "confidence": "高/中/低"- "key_quote": "这里放入提取的详细原话,长度不限,越详细越好""""

            4、【步骤四】少量数据测试(Few-Shot Testing),结合人工打标结果,逐步优化直到确认系统提示词(核心是原则、分类)

            • 说明:这个步骤主要目的是「通过优化系统提示词,使输出结果在“准确率、召回率”上达到最优」(“准确率、召回率”的解释详见最后一部分内容),以下是验证大模型打标结果的两种场景及对应方法总结

            1)【场景一】打标涉及分类「没有历史调研积累时」

            • 这种场景我罗列了两种方法,两种方法核心差异是「让人工还是让大模型先打标」,但各方法目的是一致的,即通过不断分析“人工”与“AI”的差异点(Bad Case),将人类的隐性知识显性化,写进 Prompt 里,从而「通过调试提示词以提升整体打标的“准确率、召回率”」

            维度
            ✅ 方法一:人工先打标
            (循序渐进法)
            🔄 方法二:大模型先探索
            (快速迭代法)
            核心逻辑
            先立规矩,再跑模型。
            • 以人工打标结果作为“系统提示词分类”的基础,通过对比人工与大模型的差异,不断优化提示词。
            先跑模型,再立规矩。
            • 让大模型先针对「少量样本探索打标」,人工针对同样数量样本进行打标,根据二者差异反向优化提示词。
            适用场景
            • 有时间采取“小步快跑”策略,分多轮进行迭代,确保每一次优化都有据可依
            • 希望快速把大模型跑起来,看看效果再说
            优点
            准确性高,迭代稳健。
            • 确保了 Prompt 的分类基础是经过人工深思熟虑的。
            启动快,省力。
            • 能发现一些人工可能没想到的边缘分类或新观点。
            注意事项
            覆盖要全。
            • 人工打标的样本要尽量覆盖到每一个分类,确保系统提示词分类的基础完整性。
            Prompt 要宽泛。
            • 初始提示词设置要相对宽泛(如要求输出一级/二级分类),给模型发挥空间。
            实操步骤
            第 1 轮(基础校准):
            • 人工精细打标 30 个样本→大模型跑同样 30 个→对比差异 →调整 Prompt(补充分类/规则/说明/示例)。
            第 2 轮(扩大覆盖):
            • 人工再增加 30 个(共 60 个)→大模型跑同样60 个→对比差异→再次微调 Prompt(补充分类/规则/说明/示例)。
            第 3 轮(最终验证):
            • 人工再增加 40 个(共 100 个)→大模型跑这 100 个→ 计算准确率/召回率 →若达标则全量跑数,若不达标继续优化。
            步骤 ①(AI 探索):
            • 抽选 100 个样本,设置宽泛的系统提示词(例如:“请输出一级和二级分类,不限类别”)→大模型优先打标。
            步骤 ②(人工修正):
            • 人工审查这 100 个样本的 AI 结果(也可以人工单独打标,先不看大模型结果)→发现 AI 的错误或亮点→ 确立最终的编码分类→调整 Prompt(补充分类/规则/说明/示例)。
            步骤 ③(回归测试):
            • 使用优化后的 Prompt,重新跑这 100 个样本 →计算准确率/召回率 →若达标则全量跑数,若不达标继续优化。

            2)【场景二】打标涉及分类「有历史调研积累时」,可直接复用编码分类

            维度
            ♻️ 方法三:历史复用验证法
            核心逻辑
            先跑再验,盲测纠偏。 
            • 直接复用已验证过的“系统提示词”和“编程分类”,让大模型先跑一批数据,人工采用**“盲测”**方式进行验证,重点评估历史标准是否适配新数据。
            适用场景
            • 相似业务迁移:例如业务 A 和业务 B 模式高度相似,可直接复用业务 A 的分类体系。
            • 长期追踪调研:针对同一个项目进行间隔(如月度/季度)分析时,直接沿用上期的分类标准。
            实操步骤详解
            步骤 ①:大模型预跑 (Pre-run) • 使用历史积累的提示词,让大模型针对新数据进行打标。💡 避坑指南:建议先跑 100-200 条样本作为测试集。虽然可以直接跑全量,但在未确定历史提示词是否“水土不服”之前,全量跑数存在浪费 Token 费用的风险。步骤 ②:随机抽样 (Random Sampling) • 人工从大模型的打标结果中,随机抽取 50-100 条数据作为“验证集”。步骤 ③:盲测打标 (Blind Labeling) • 人工在不看大模型打标结果的前提下(避免产生先入为主的偏见),依据业务标准对这 50-100 条数据进行打标。步骤 ④:一致性比对 (Cross-Check) • 将“人工归因”与“大模型归因”进行比对,计算一致性(准确率/召回率)。步骤 ⑤:迭代决策 (Iteration)• 若一致性高:说明历史标准依然适用,可直接全量跑数。• 若一致性低:分析差异原因(是出现了新场景?还是旧规则失效?),据此优化提示词。

            5、【步骤五】全量数据跑数

            • 当步骤四「少量数据测试效果满意」时,就可以调用 API 对全量数据进行批量处理了(注意:这一步通常需要消耗较多 API 额度,建议关注 Token 消耗情况)。

            • 打开 Python 代码编辑器(推荐使用 Jupyter ,安装 Anaconda 后自带),将代码复制进去,点击运行,成功运行会有结果显示。


            (二)如何评估大模型打标结果:

            • 上述步骤四主要目的是「通过优化系统提示词,使输出结果在“准确率、召回率”上达到最优」

            1、准确率&召回率介绍:

            • 在使用大模型进行数据分析(特别是文本分类/打标任务)时,「准确率(通常指精确率 Precision)和召回率(Recall)」是评估其信息提取或分类任务性能的核心指标。二者含义如下:

            维度
            准确率 / 精确率 (Precision)
            召回率 (Recall)
            通俗定义
            “保真度”/“找得准不准” 
            • AI 挑出来的结果里,有多少是真的?
            “覆盖度”/“找得全不全” 
            • 真实存在的问题里,AI 找出了多少?
            灵魂拷问
            “AI 说是这个原因,我能信吗?”
            “AI 有没有漏掉什么重要信息?”
            关注重点
            结果的「可靠性」(宁可漏掉,也不错判)
            结果的「覆盖率」(宁可错判,也不漏掉)
            计算公式
            (判断正确的总人数) / (总抽样人数)
            (正确分析出的目标数量) / (所有实际存在的目标数量)
            场景举例
            模型标记了 100 个用户是“嫌贵”。经人工核查,只有 80 个是真的嫌贵,20 个搞错了。👉 准确率 = 80%
            实际上全量数据里有 100 个用户是“嫌贵”,模型只把其中 60 个标记出来了,漏掉了 40 个。👉 召回率 = 60%
            你抽查了 100 个人,AI 有 80 个人的归因跟你的判断一模一样,👉整体准确率= 80%
            100个抽样数据中,你成功分析原因有60个,AI成功分析原因仅有50个👉整体召回率就是50/60=83%
            低分后果
            “误报”严重
            • 你会看到很多错误的数据,导致决策偏差(例如误以为某问题很严重,其实是模型乱标的)。
            “漏报”严重
            • 你会错过关键问题(例如实际上很多人因为“XX”不满,但模型没识别出来,导致你以为XX没问题)。
            在大模型数据分析场景中的意义
            衡量大模型在根据提示词进行筛选、判断或生成时,其输出结果的精确程度。高准确率意味着模型返回的答案中无关或错误的信息较少,用户对其信任度高。
            衡量大模型在根据提示词进行检索、归纳或提取时,其发现全部相关信息的完备程度。高召回率意味着模型漏掉的关键信息较少,分析结果更全面。
            理想状态
            双高 (F1-Score 高):既不瞎报,也不漏报。
            双高 (F1-Score 高):既不瞎报,也不漏报。

            2、准确率&召回率理想目标:

            • 通过优化系统提示词,最后理想的结果是大模型达到「高精确率,高召回率 (双高)」结果,在文本打标类分析中,为使分析结果可靠可信,可优先确保「高精确率」(如准确率 > 85%/90%),但召回率也不能过低(如至少80%左右),行业内公认的“及格线”和“优秀线”标准如下:

              评估维度
              优秀
               (Excellent)
              良好 
              (Good)
              及格 
              (Acceptable)
              不可用 
              (Unusable)
              准确率 (Precision)
              > 90%
              80% - 90%
              70% - 80%
              < 70%
              召回率 (Recall)
              > 85%
              75% - 85%
              60% - 75%
              < 60%
              F1-Score (综合分)
              > 0.85
              0.75 - 0.85
              0.65 - 0.75
              < 0.65
            • 综合考虑「准确率、召回率」,行业内通用的黄金标准是 F1-Score,它是衡量大模型打标质量的唯一硬指标。

            3、【准确率、召回率】不同数值表现的含义及解法:

            • 【高准确率&低召回率】说明Prompt 太严格了,或者提取规则太保守,导致漏掉一些边缘正确项

            • 【高召回率&低准确率】说明 Prompt 对类别的定义太模糊,容易发生混淆


            【后记】以上是我基于真实实战经验,整理的运用「大模型及Python」进行非结构化文本分析的方法论,若有其他建议或问题,欢迎留言讨论。

            最新文章

            随机文章