Python 数据智能实战 (3):特征工程进化论 - 从文本到向量,LLM Embeddings 实战

写在前面

—— 解锁文本深层语义,将用户评论、商品描述转化为模型可用的“智慧特征”

在上一篇博客中,我们成功搭建了 Python 与大语言模型 (LLM) 交互的桥梁,并初步掌握了通过 Prompt Engineering 让 LLM 理解和执行我们指令的艺术。我们甚至小试牛刀,利用 LLM 对电商评论进行了初步的情感分类。

这仅仅是冰山一角!LLM 的真正威力远不止于此。要将 LLM 的“智慧”更深度地融入我们的数据挖掘流程,尤其是赋能传统的机器学习模型,我们需要解决一个核心问题:如何让主要处理数值和类别数据的机器学习模型,“理解”非结构化的文本信息?

电商痛点再聚焦:文本数据的“次元壁”

想象一下这些场景:

  • 用户评论分析: 我们想基于用户评论来预测他们是否会复购。评论中“质量好”、“物流快”和“客服耐心”显然是积极信号,而“描述不符”、“有瑕疵”、“服务差”则是消极信号。但如何将这些 文字描述 转化为可供逻辑回归或随机森林模型使用的 数值特征?简单的词频统计会丢失太多语义信息(例如,“不推荐”和“非常推荐”可能都包含“推荐”二字)。
  • 商品相似度计算: 我们希望为用户推荐与其购买过或浏览过的商品相似的其他商品。如何判断两件商品(例如两款不同描述的“羊毛衫”)在 功能、风格、材质、适用场景 等方面是相似的?仅仅比较商品标题或标签显然不够。
  • 用户兴趣建模: 我们想根据用户浏览过的商品描述、搜索的关键词来理解其潜在兴趣。如何将这些 零散的文本片段 凝聚成能够代表用户兴趣方向的 量化表达

这些问题的核心都在于如何跨越 文本数据数值模型 之间的“次元壁”。而 LLM 提供了一把强大的钥匙——文本嵌入 (Text Embeddings)

本篇博客,我们将深入探讨:

  1. 什么是文本嵌入 (Embeddings)? 用通俗的语言和类比揭开它的神秘面纱。
  2. 为什么 LLM 生成的 Embeddings 更强大? 对比传统文本表示方法的优势。
  3. 如何获取 Embeddings? 实操演示通过 OpenAI API 和 Hugging Face 开源模型获取文本向量。
  4. 如何在 Pandas 中存储和使用 Embeddings?
  5. 电商实战:Embeddings 的应用场景与初步代码示例 (语义搜索、相似商品发现、评论聚类思路)。

掌握 Embeddings,你就掌握了将 LLM 的语义理解能力注入数据分析流程的关键技术,为特征工程带来了革命性的提升!

一、文本嵌入 (Embeddings)?

想象一下,我们想让计算机理解词语或句子的含义。传统方法可能会给每个词一个编号(像字典一样),但这无法表达词语之间的关系(例如,“国王”和“王后”的关系,“走”和“跑”的相似性)。

文本嵌入 (Embeddings) 则提供了一种更聪明的方式:它将 文本(单词、句子、段落甚至整篇文档)映射到一个高维的、连续的数值向量空间中。在这个空间里:

  • 语义相似的文本,其对应的向量在空间中的距离也更近。 例如,“很棒的手机”和“性能出色的设备”对应的向量会比较接近,而它们与“糟糕的体验”对应的向量则会相距较远。
  • 向量之间的关系可能反映文本之间的语义关系。 例如,著名的例子是 vector('国王') - vector('男人') + vector('女人') 在向量空间中非常接近 vector('王后')

简单类比:

  • 地图上的坐标: 就像每个城市在地图上都有经纬度坐标一样,每个词或句子在“语义空间”中也有一个向量坐标。北京和上海的坐标相对较近(都是中国大城市),而北京和纽约的坐标则较远。
  • 颜色空间中的 RGB 值: 每种颜色可以用红®、绿(G)、蓝(B)三个数值表示,相似的颜色(如深红和浅红)其 RGB 值也相近。Embeddings 类似,但维度通常高得多(几百甚至上千维)。

Embeddings 的核心价值在于: 它将 离散的、非结构化的文本 转换为了 连续的、包含语义信息的数值向量,从而使得计算机能够:

  1. 量化语义相似度: 通过计算向量之间的距离(如余弦相似度、欧氏距离)来判断文本的相似程度。
  2. 作为机器学习模型的输入: 这些数值向量可以直接作为特征输入给各种机器学习模型(分类、回归、聚类等)。

二、为何选择 LLM Embeddings?VS 传统方法

在 LLM 出现之前,也有很多经典的文本嵌入方法,例如:

  • One-Hot Encoding: 每个词表示为一个超长向量,只有一个位置是 1,其他都是 0。维度灾难,无法表示语义相似性。
  • TF-IDF (Term Frequency-Inverse Document Frequency): 基于词频和逆文档频率计算词的权重,能体现词的重要性,但仍基于词袋模型,忽略语序和深层语义。
  • Word2Vec, GloVe: 基于神经网络的浅层词嵌入模型,能够捕捉词与词之间的关系(如类比),但对上下文的理解能力有限,且通常只处理单词级别。

相比之下,基于现代 Transformer 架构的 LLM(如 BERT, GPT, Llama 等)生成的 Embeddings 具有显著优势:

  1. 深度上下文理解 (Deep Contextual Understanding): LLM 在生成 Embedding 时会考虑词语所在的 完整上下文。同一个词在不同语境下会有不同的向量表示,能够更好地捕捉词语的多义性和细微差别。例如,“apple”在“I ate an apple”和“I bought an Apple laptop”中的 Embedding 会不同。
  2. 强大的语义捕捉能力 (Strong Semantic Capture): LLM 通过在海量数据上的预训练,学习到了丰富的语言知识和世界知识,其生成的 Embedding 能够更准确地捕捉文本的 深层语义、主题、情感甚至风格
  3. 适用于不同粒度的文本 (Flexible Granularity): LLM 不仅可以生成单词的 Embedding,也可以直接生成 句子、段落甚至整个文档 的高质量 Embedding,方便应用于各种任务。
  4. 预训练模型的便捷性 (Pre-trained Model Availability): 我们可以直接使用大型科技公司或开源社区 预训练好的 LLM Embedding 模型 (通过 API 或库),无需自己从头训练,极大地降低了使用门槛。

因此,在当前的电商数据挖掘场景下,利用 LLM 获取高质量的文本嵌入向量,已经成为一种高效且强大的特征工程手段。

三、获取 Embeddings:API 与开源库实操

获取 Embeddings 主要有两种途径:调用云服务 API 或使用本地开源模型库。

1. 使用 OpenAI API 获取 Embeddings

OpenAI 提供了专门用于生成 Embeddings 的模型,例如 text-embedding-ada-002 (截至撰写时较常用且性价比高,请关注 OpenAI 最新推荐模型)。

import os
from openai import OpenAI
import pandas as pd
import numpy as np # 确保导入 numpy

# --- 安全地获取 API Key ---
# (同上一篇博客,推荐使用环境变量或文件读取)
api_key = "sk-YOUR_API_KEY_HERE" # !!! 务必替换 !!!

if not api_key or not api_key.startswith("sk-"):
    print("错误:请设置有效 OpenAI API Key。")
else:
    client = OpenAI(api_key=api_key)
    embedding_model = "text-embedding-ada-002" # 指定嵌入模型

    texts_to_embed = [
        "这款手机拍照效果真好!",
        

你可能感兴趣的:((LLM),重塑,python,开发语言,AIGC,LLM,embedding)