本文档涵盖了使用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 聚类在没有标签数据的情况下将相似的嵌入进行分组,这对于发现文本数据中的隐藏模式很有用。
该实现从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")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-small的max_tokens = 8000限制,并通过OpenAI API高效处理数据集。
来源: examples/Get_embeddings_from_dataset.ipynb45-47
高维嵌入(1536维)使用t-SNE和PCA算法降维到2D或3D进行可视化。
t-SNE参数包括perplexity=15、random_state=42和learning_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