菜单

使用嵌入进行分类和聚类

相关源文件

本文档涵盖了使用OpenAI嵌入实现分类和聚类算法。这些示例展示了如何将文本数据转换为高维向量表示,并应用机器学习技术来完成各种任务,包括情感分析、交易分类和无监督分组。

有关基于嵌入的问答和搜索的信息,请参阅基于嵌入的问答。有关向量数据库集成模式,请参阅向量数据库集成

使用嵌入进行分类

零样本分类

零样本分类允许通过使用余弦相似度比较输入嵌入与类别描述嵌入来预测标签,而无需训练示例。

该实现嵌入了“积极情绪”和“消极情绪”等类别描述,然后使用cosine_similarity()将输入文本嵌入与这些类别嵌入进行比较,该函数来自examples/utils/embeddings_utils.py64-65 相似度最高的类别即为预测结果。

来源: examples/Zero-shot_classification_with_embeddings.ipynb1-176 examples/utils/embeddings_utils.py64-65

监督分类

传统的监督分类使用嵌入作为输入特征来训练机器学习模型,例如RandomForestClassifier

该过程涉及使用literal_eval()将嵌入字符串转换为numpy数组,使用train_test_split()分割数据,并对嵌入向量训练RandomForestClassifier

来源: examples/Classification_using_embeddings.ipynb40-66 examples/Multiclass_classification_for_transactions.ipynb953-1012

多类别交易分类

对于交易分类,工作流程结合了多种方法:零样本分类、基于嵌入的分类和微调模型。

方法实现性能指标
零样本带有提示工程的classify_transaction()无训练数据的初始标注
基于嵌入交易嵌入上的RandomForestClassifier精确度/召回率评估
微调模型自定义模型训练比较基线

交易分类使用通过将供应商、描述和价值字段连接成单个文本字符串来生成嵌入,从而创建组合特征表示。

来源: examples/Multiclass_classification_for_transactions.ipynb119-151 examples/Multiclass_classification_for_transactions.ipynb953-1012

使用嵌入进行聚类

K-Means 聚类

K-means 聚类在没有标签数据的情况下将相似的嵌入进行分组,这对于发现文本数据中的隐藏模式很有用。

该实现从CSV文件中加载预计算的嵌入,将其转换为numpy数组,并应用KMeans聚类。结果使用t-SNE降维进行可视化。

来源: examples/Clustering.ipynb89-100 examples/Clustering.ipynb30-42

用于无标签分类的聚类

处理无标签交易数据时,聚类有助于识别有意义的类别,这些类别可以由人类专家或语言模型进行标注。

该方法使用COMPLETIONS_MODEL = "gpt-3.5-turbo"为发现的聚类生成人类可读的描述,从而使无监督聚类结果更具可解释性。

来源: examples/Clustering_for_transaction_classification.ipynb228-235 examples/Clustering_for_transaction_classification.ipynb61-62

嵌入生成与实用工具

核心嵌入函数

嵌入实用工具为OpenAI的嵌入API提供了标准化的接口,并具备批量处理能力。

主要实用函数包括

  • 用于单个文本嵌入的get_embedding(text, model="text-embedding-3-small")
  • 用于批量处理多达2048个文本的get_embeddings(list_of_text, model="text-embedding-3-small")
  • 用于测量向量相似度的cosine_similarity(a, b)

来源: examples/utils/embeddings_utils.py18-24 examples/utils/embeddings_utils.py38-47 examples/utils/embeddings_utils.py64-65

数据集处理流程

大型数据集需要预处理,以有效处理令牌限制和批量API调用。

处理步骤实现文件引用
文本组合连接标题和内容字段examples/Get_embeddings_from_dataset.ipynb1-72
Token 计数tiktoken.encoding_for_model()examples/Get_embeddings_from_dataset.ipynb45-47
批量嵌入带有速率限制的get_embedding()examples/Get_embeddings_from_dataset.ipynb36

该流程处理text-embedding-3-smallmax_tokens = 8000限制,并通过OpenAI API高效处理数据集。

来源: examples/Get_embeddings_from_dataset.ipynb45-47

可视化技术

降维

高维嵌入(1536维)使用t-SNE和PCA算法降维到2D或3D进行可视化。

t-SNE参数包括perplexity=15random_state=42learning_rate=200,以实现一致的2D投影。PCA提供线性降维,用于交互式3D绘图。

来源: examples/Visualizing_embeddings_in_2D.ipynb53 examples/Visualizing_embeddings_in_3D.ipynb160-161

性能评估

分类指标

分类性能使用scikit-learn的classification_report()中的标准指标和自定义评估函数进行评估。

指标类型实现用例
精确度/召回率classification_report(y_test, preds)多类别评估
F1 分数包含在分类报告中平衡指标
余弦相似度自定义cosine_similarity()函数零样本评估

评估过程通常涉及使用train_test_split(test_size=0.2, random_state=42),以确保示例之间数据分割的一致性。

来源: examples/Classification_using_embeddings.ipynb64-65 examples/Zero-shot_classification_with_embeddings.ipynb27

聚类验证

聚类质量通过可视化和轮廓分析进行评估,并在可行时根据已知类别验证聚类分配。

验证过程通过统计测量和对降维图的目视检查来检验聚类的同质性和分离性。

来源: examples/Clustering.ipynb99 examples/Clustering_for_transaction_classification.ipynb252-311