成为新会员获取本项目完整报告、代码和数据资料

加入会员群

传统机器学习流水线中,非结构化文本通常被当作“鸡肋”——要么直接丢弃,要么用 TF‑IDF 或词嵌入转换为高维稀疏向量,不仅增加计算负担,还难以对齐业务语义。而本文的创新之处在于:将预训练大语言模型(LLM)作为特征提取器,通过精心设计的提示词,强制模型输出符合预定义 JSON Schema 的结构化字段。这种方式不仅保留了文本的深层语义,还将输出维度压缩到业务可直接解读的 2~3 个特征(例如紧急度评分、是否挫败),使得后续的随机森林等传统模型既能享受结构化数据的简洁,又能捕捉到语言中隐含的关键信号。

在一项金融服务客户体验优化项目中,我们面临一个典型挑战:海量客户服务工单既包含非结构化的文本描述,又附带账户年龄、历史工单数等结构化字段。传统方法要么丢弃文本信息,要么用词袋模型粗暴转换,导致预测模型难以捕捉语义层面的紧急程度、用户情绪等关键信号。如今,大语言模型(LLM)的涌现让我们有了更优雅的解法——将其作为特征工程引擎,从文本中精准提取业务可理解的结构化字段,再与数值特征融合,送入传统分类器。

本文内容改编自过往客户咨询项目的技术沉淀并且已通过实际业务校验,该项目完整代码与数据已分享至交流社群。阅读原文进群获取完整代码数据及更多最新AI见解、行业洞察,与900+行业人士交流成长;还提供人工答疑,拆解核心原理、代码逻辑与业务适配思路,帮大家既懂怎么做,也懂为什么这么做;遇代码运行问题,更能享24小时调试支持。

我们将沿着“数据构建—LLM特征抽取—模型训练”的主线,完整演示如何利用 Groq 托管的 LLaMA 模型,从客户工单文本中提取“紧急程度”与“挫败感”两类结构化特征,并基于这些新特征训练随机森林分类器,实现对工单类别的精准预测。全文脉络可概括为以下流程:

数据准备  
   ↓  
文本特征提取 ← LLaMA(Groq API)  
   ↓  
特征合并(文本特征+数值特征)  
   ↓  
标准化 + 随机森林训练  
   ↓  
模型评估  

从文本到表格:利用大语言模型进行特征工程


背景与创新

传统机器学习流水线中,非结构化文本通常被当作“鸡肋”——要么直接丢弃,要么用 TF‑IDF 或词嵌入转换为高维稀疏向量,不仅增加计算负担,还难以对齐业务语义。而本文的创新之处在于:将预训练大语言模型(LLM)作为特征提取器,通过精心设计的提示词,强制模型输出符合预定义 JSON Schema 的结构化字段。这种方式不仅保留了文本的深层语义,还将输出维度压缩到业务可直接解读的 2~3 个特征(例如紧急度评分、是否挫败),使得后续的随机森林等传统模型既能享受结构化数据的简洁,又能捕捉到语言中隐含的关键信号。


本项目完整报告、代码和数据资料

下载资料(17页)

准备工作与依赖库 首先导入必要的库。为了适配 Groq 的 API,我们使用 OpenAI 的客户端库。代码说明:我们使用 OpenAI 类来统一调用 Groq 托管的 LLaMA 模型,因为 Groq 的 API 接口与 OpenAI 兼容。实际部署时需在环境变量或 Colab Secrets 中安全存储 API 密钥。

构建模拟客户工单数据集 为演示流程,我们随机生成 100 条客户服务工单记录。每条记录包含文本描述、两个数值型字段(账户年龄、历史工单数)以及一个类别标签(工单类型)。

import random
random.seed(42)

# 定义工单类别
tkt_categories = ["access", "inquiry", "software", "billing", "hardware"]

# 每个类别对应的文本模板
msg_templates = {
    "access": [
        "账户已锁定 {days} 天,急需解锁!",
        "无法登录,一直提示密码错误。",
        "立即重置我的访问权限。",
        "两步验证失效,请协助登录。"
    ],
    "inquiry": [
        "新信用卡何时能寄到?",
        "查询近期订单状态。",
        "周末营业时间是几点?",
        "能否升级到高级套餐?"
    ],
    "software": [
        "查看交易历史时应用频繁闪退。",
        "软件 bug:提交按钮呈灰色不可用。",
        "自上次更新后页面加载极慢。",
        "仪表盘报 500 内部服务器错误。"
    ],
    "billing": [
        "账单上有笔超额扣款,需要退款。",
        "本月为何被扣款两次?",
        "请更新支付方式,旧卡已过期。",
        "我未授权这笔 49.99 美元交易。"
    ],
    "hardware": [
        "硬件令牌损坏,无法登录。",
        "设备的屏幕碎裂了。",
        "读卡器现在无法正常扫描。",
        "电池十分钟耗尽,需更换设备。"
    ]
}

records = []
for _ in range(100):
    cat = random.choice(tkt_categories)
    # 部分模板中包含 {days},随机生成 1~14 天
    text = random.choice(msg_templates[cat]).format(days=random.randint(1, 14))
    records.append({
        "text": text,
        "account_age_days": random.randint(1, 2000),
        "prior_tickets": random.choices([0,1,2,3,4,5], weights=[40,30,15,10,3,2])[0],
        "label": cat
    })

df_raw = pd.DataFrame(records)

代码说明: 通过模板加随机参数的方式生成多样化的文本内容,同时保留类别标签。prior_tickets 使用加权随机,模拟实际中低工单量用户占多数的分布。


利用 LLaMA 提取结构化特征 我们定义两个待提取的特征:urgency_score(1~5 的紧急程度)和 is_frustrated(是否包含挫败情绪)。使用 Pydantic 定义 JSON Schema,确保 LLM 输出格式严格匹配。

class TicketFeatures(BaseModel):
    urgency_score: int = Field(description="紧急程度,1 最低,5 最高")
    is_frustrated: int = Field(description="用户是否表现出挫败感,1 表示是,0 表示否")

def extract_ticket_features(text_input: str) -> dict:
    # 为遵守免费版 30 RPM 限制,每次调用前等待 2.5 秒
    time.sleep(2.5)
    
    schema_json = json.dumps(TicketFeatures.model_json_schema())
    response = client.chat.completions.create(
        model="llama-3.3-70b-versatile",
        messages=[
            {
                "role": "system",
                "content": f"你是一个特征提取助手。请仅输出符合以下 JSON Schema 的有效 JSON:{schema_json}"
            },
            {"role": "user", "content": text_input}
        ],
        response_format={"type": "json_object"},
        temperature=0.0
    )
    return json.loads(response.choices[0].message.content)

# 批量提取特征(此处省略了批量处理的优化代码,实际可并行调用)
print("1. 正在使用 LLaMA 提取结构化特征...")
extracted = df_raw["text"].apply(extract_ticket_features)
feat_df = pd.DataFrame(extracted.tolist())

# 合并原始数值特征与 LLM 提取的特征
X_engineered = pd.concat([df_raw.drop(columns=["text", "label"]), feat_df], axis=1)
y_target = df_raw["label"]

print("\n2. 最终构建的特征表格:")
print(X_engineered.head())

代码说明: extract_ticket_features 函数将文本发送给 LLaMA,并要求返回符合 TicketFeatures 模式的 JSON。实际生产环境中应实现批处理、缓存与重试机制以提升效率。阅读原文进群获取完整内容及更多AI见解、行业洞察,与900+行业人士交流成长。

模型训练与评估 将构建好的特征进行标准化,然后划分训练集和测试集,训练随机森林分类器。输出示例:

模型输出

结果分析: 由于数据集较小(仅 100 条),且标签分布不均,模型整体准确率约 45%,但 inquiry 类别表现优异(精准率与召回率均为 1.0)。这验证了 LLaMA 提取的特征确实为分类器提供了有效信号,尤其是文本中蕴含的语义信息被转化为数值特征后,显著提升了易混淆类别的区分度。在实际业务中,只需扩充数据规模并优化特征设计,即可获得更可靠的模型。阅读原文进群获取完整内容及更多AI见解、行业洞察,与900+行业人士交流成长。


总结 本文展示了一条新颖的混合建模路径:将大语言模型作为“特征工程即服务”的工具,从非结构化文本中提取结构化特征,再与传统数值特征结合,训练可解释的树模型。该方法既发挥了 LLM 的语义理解能力,又保留了传统模型的高效与稳定,尤其适合对特征可解释性有要求的业务场景(如金融风控、客户服务分析)。未来,我们可进一步扩展特征集(如提取产品名称、问题类型),并引入批处理与缓存机制,将单条处理的延迟优化为批量吞吐,使该方案能够支撑生产级数据流。

相关文章封面

DeepSeek、LangGraph 和 Python 融合 LSTM、RF、XGBoost、LR 多模型预测 NFLX 股票涨跌 | 附完整代码数据

融合多种机器学习模型预测股票涨跌,附完整代码数据。点击链接查看完整报告。

探索观点

航天技术的溢出效应正渗透到日常生活的方方面面。智能手机摄像头的防抖技术源自航天器的姿态控制系统;婴儿配方奶粉中添加的DHA成分,最初是为宇航员开发的太空营养补充剂;甚至超市里的真空包装食品,其技术也可追溯至阿波罗计划的食物保存研究。据测算,每1美元的航天投资可产生7-10美元的经济回报,这种乘数效应使航天产业成为全球经济增长的重要引擎。

当然,航天产业的快速发展也面临挑战。太空垃圾问题日益严峻——地球轨道上目前有约3.4万块直径超10厘米的太空碎片,碰撞风险每五年增加一倍;太空资源开发的法律框架仍不明确,各国在月球采矿权等问题上存在分歧;而技术标准的不统一则导致不同卫星系统间的兼容性问题。解决这些挑战需要全球协作:2024年生效的《阿尔忒弥斯协定》已得到33个国家签署,为月球资源利用确立了基本原则;欧洲太空局的”太空清扫者”任务计划在2026年捕获并移除一块大型太空碎片,开创主动清理轨道的先河。

当然,航天产业的快速发展也面临挑战。太空垃圾问题日益严峻——地球轨道上目前有约3.4万块直径超10厘米的太空碎片,碰撞风险每五年增加一倍;太空资源开发的法律框架仍不明确,各国在月球采矿权等问题上存在分歧;而技术标准的不统一则导致不同卫星系统间的兼容性问题。解决这些挑战需要全球协作:2024年生效的《阿尔忒弥斯协定》已得到33个国家签署,为月球资源利用确立了基本原则;欧洲太空局的”太空清扫者”任务计划在2026年捕获并移除一块大型太空碎片,开创主动清理轨道的先河。

封面