大模型系列:OpenAI使用技巧_在文本向量化的交易数据做多标签分类

news2024/11/22 9:24:07

本笔记本涵盖了数据未标记但具有可用于将其聚类为有意义的类别的特征的用例。聚类的挑战在于使那些使得这些聚类突出的特征可读,这就是我们将使用GPT-3生成有意义的聚类描述的地方。然后,我们可以使用这些描述来为以前未标记的数据集应用标签。

为了向模型提供数据,我们使用了在笔记本Multiclass classification for transactions Notebook中展示的方法创建的嵌入,应用于数据集中的全部359个交易,以便为我们提供更大的学习资源池。

设置

# 导入dotenv模块中的load_dotenv函数
# dotenv模块用于从.env文件中加载环境变量
from dotenv import load_dotenv

# 调用load_dotenv函数,加载.env文件中的环境变量
load_dotenv()
True
# 导入所需的库
from openai import OpenAI  # 导入OpenAI库
import pandas as pd  # 导入pandas库,用于数据处理
import numpy as np  # 导入numpy库,用于数值计算
from sklearn.cluster import KMeans  # 导入KMeans算法,用于聚类分析
from sklearn.manifold import TSNE  # 导入TSNE算法,用于降维可视化
import matplotlib  # 导入matplotlib库,用于数据可视化
import matplotlib.pyplot as plt  # 导入matplotlib的pyplot模块,用于绘图
import os  # 导入os库,用于操作系统相关功能
from ast import literal_eval  # 导入ast库的literal_eval函数,用于将字符串转换为字面值

# 设置OpenAI的API密钥
# openai.api_key = os.getenv("OPENAI_API_KEY")

# 创建OpenAI客户端
client = OpenAI()

# 定义使用的模型
COMPLETIONS_MODEL = "gpt-3.5-turbo"

# 指定数据和预计算嵌入的文件路径
embedding_path = "data/library_transactions_with_embeddings_359.csv"

聚类

我们将重复聚类笔记本中的方法,使用K-Means对我们之前创建的特征嵌入进行聚类。然后,我们将使用Completions端点为我们生成聚类描述,并判断它们的有效性。

# 导入pandas库
import pandas as pd

# 从embedding_path路径读取csv文件,并将其存储在df变量中
df = pd.read_csv(embedding_path)

# 显示df的前几行数据
df.head()
DateSupplierDescriptionTransaction value (£)combinedn_tokensembedding
021/04/2016M & J Ballantyne LtdGeorge IV Bridge Work35098.0Supplier: M & J Ballantyne Ltd; Description: G...118[-0.013169967569410801, -0.004833734128624201,...
126/04/2016Private SaleLiterary & Archival Items30000.0Supplier: Private Sale; Description: Literary ...114[-0.019571533426642418, -0.010801066644489765,...
230/04/2016City Of Edinburgh CouncilNon Domestic Rates40800.0Supplier: City Of Edinburgh Council; Descripti...114[-0.0054041435942053795, -6.548957026097924e-0...
309/05/2016Computacenter UkKelvin Hall72835.0Supplier: Computacenter Uk; Description: Kelvi...113[-0.004776035435497761, -0.005533686839044094,...
409/05/2016John Graham Construction LtdCausewayside Refurbishment64361.0Supplier: John Graham Construction Ltd; Descri...117[0.003290407592430711, -0.0073441751301288605,...
# 读取嵌入文件
embedding_df = pd.read_csv(embedding_path)
# 将嵌入列中的字符串转换为Python对象,并将其转换为NumPy数组
embedding_df["embedding"] = embedding_df.embedding.apply(literal_eval).apply(np.array)
# 将所有嵌入向量垂直堆叠成一个矩阵
matrix = np.vstack(embedding_df.embedding.values)
# 输出矩阵的形状
matrix.shape
(359, 1536)
# 设置聚类数目为5
n_clusters = 5

# 初始化KMeans模型,设置聚类数目、初始化方法、随机种子和最大迭代次数
kmeans = KMeans(n_clusters=n_clusters, init="k-means++", random_state=42, n_init=10)

# 使用KMeans模型拟合数据
kmeans.fit(matrix)

# 获取每个数据点所属的聚类标签
labels = kmeans.labels_

# 将聚类标签添加到embedding_df数据框中
embedding_df["Cluster"] = labels
# 创建TSNE对象,设置参数
tsne = TSNE(n_components=2, perplexity=15, random_state=42, init="random", learning_rate=200)

# 使用TSNE对矩阵进行降维
vis_dims2 = tsne.fit_transform(matrix)

# 提取降维后的x和y坐标
x = [x for x, y in vis_dims2]
y = [y for x, y in vis_dims2]

# 遍历每个类别并绘制散点图
for category, color in enumerate(["purple", "green", "red", "blue","yellow"]):
    # 提取属于当前类别的x和y坐标
    xs = np.array(x)[embedding_df.Cluster == category]
    ys = np.array(y)[embedding_df.Cluster == category]
    
    # 绘制散点图
    plt.scatter(xs, ys, color=color, alpha=0.3)
    
    # 计算当前类别的平均x和y坐标
    avg_x = xs.mean()
    avg_y = ys.mean()
    
    # 在平均坐标处绘制一个十字形标记
    plt.scatter(avg_x, avg_y, marker="x", color=color, s=100)

# 设置图表标题
plt.title("Clusters identified visualized in language 2d using t-SNE")
Text(0.5, 1.0, 'Clusters identified visualized in language 2d using t-SNE')

# 设置每个簇的交易数量为10,因为我们预计会有一些变化

transactions_per_cluster = 10

# 对于每个簇进行循环
for i in range(n_clusters):
    print(f"Cluster {i} Theme:\n")

    # 从embedding_df中选择簇为i的交易,并进行一系列的字符串替换和抽样操作
    transactions = "\n".join(
        embedding_df[embedding_df.Cluster == i]
        .combined.str.replace("Supplier: ", "")
        .str.replace("Description: ", ":  ")
        .str.replace("Value: ", ":  ")
        .sample(transactions_per_cluster, random_state=42)
        .values
    )
    
    # 创建一个聊天模型的completion,用于生成对交易的描述
    completion = client.chat.completions.create(
        model=COMPLETIONS_MODEL,
        # 我们将包含一个提示,以指示模型我们正在寻找什么样的描述
        messages=[
            {"role": "user",
             "content": f'''我们想将这些交易分组成有意义的簇,以便我们可以针对我们花费最多的领域进行目标定位。
                以下交易有什么共同之处?\n\n交易:\n"""\n{transactions}\n"""\n\n主题:'''}
        ],
        temperature=0,
        max_tokens=100,
        top_p=1,
        frequency_penalty=0,
        presence_penalty=0,
    )
    
    # 打印生成的描述
    print(completion.choices[0].message.content.replace("\n", ""))
    print("\n")

    # 从embedding_df中选择簇为i的交易,并进行抽样操作,打印供应商和描述
    sample_cluster_rows = embedding_df[embedding_df.Cluster == i].sample(transactions_per_cluster, random_state=42)
    for j in range(transactions_per_cluster):
        print(sample_cluster_rows.Supplier.values[j], end=", ")
        print(sample_cluster_rows.Description.values[j], end="\n")

    print("-" * 100)
    print("\n")
Cluster 0 Theme:

The common theme among these transactions is that they all involve spending money on various expenses such as electricity, non-domestic rates, IT equipment, computer equipment, and the purchase of an electric van.


EDF ENERGY, Electricity Oct 2019 3 buildings
City Of Edinburgh Council, Non Domestic Rates 
EDF, Electricity
EX LIBRIS, IT equipment
City Of Edinburgh Council, Non Domestic Rates 
CITY OF EDINBURGH COUNCIL, Rates for 33 Salisbury Place
EDF Energy, Electricity
XMA Scotland Ltd, IT equipment
Computer Centre UK Ltd, Computer equipment
ARNOLD CLARK, Purchase of an electric van
----------------------------------------------------------------------------------------------------


Cluster 1 Theme:

The common theme among these transactions is that they all involve payments for various goods and services. Some specific examples include student bursary costs, collection of papers, architectural works, legal deposit services, papers related to Alisdair Gray, resources on slavery abolition and social justice, collection items, online/print subscriptions, ALDL charges, and literary/archival items.


Institute of Conservation, This payment covers 2 invoices for student bursary costs
PRIVATE SALE, Collection of papers of an individual
LEE BOYD LIMITED, Architectural Works
ALDL, Legal Deposit Services
RICK GEKOSKI, Papers 1970's to 2019 Alisdair Gray
ADAM MATTHEW DIGITAL LTD, Resource -  slavery abolution and social justice
PROQUEST INFORMATION AND LEARN, This payment covers multiple invoices for collection items
LM Information Delivery UK LTD, Payment of 18 separate invoice for Online/Print subscriptions Jan 20-Dec 20
ALDL, ALDL Charges
Private Sale, Literary & Archival Items
----------------------------------------------------------------------------------------------------


Cluster 2 Theme:

The common theme among these transactions is that they all involve spending money at Kelvin Hall.


CBRE, Kelvin Hall
GLASGOW CITY COUNCIL, Kelvin Hall
University Of Glasgow, Kelvin Hall
GLASGOW LIFE, Oct 20 to Dec 20 service charge - Kelvin Hall
Computacenter Uk, Kelvin Hall
XMA Scotland Ltd, Kelvin Hall
GLASGOW LIFE, Service Charges Kelvin Hall 01/07/19-30/09/19
Glasgow Life, Kelvin Hall Service Charges
Glasgow City Council, Kelvin Hall
GLASGOW LIFE, Quarterly service charge KH
----------------------------------------------------------------------------------------------------


Cluster 3 Theme:

The common theme among these transactions is that they all involve payments for facility management fees and services provided by ECG Facilities Service.


ECG FACILITIES SERVICE, This payment covers multiple invoices for facility management fees
ECG FACILITIES SERVICE, Facilities Management Charge
ECG FACILITIES SERVICE, Inspection and Maintenance of all Library properties
ECG Facilities Service, Facilities Management Charge
ECG FACILITIES SERVICE, Maintenance contract - October
ECG FACILITIES SERVICE, Electrical and mechanical works
ECG FACILITIES SERVICE, This payment covers multiple invoices for facility management fees
ECG FACILITIES SERVICE, CB Bolier Replacement (1),USP Batteries,Gutter Works & Cleaning of pigeon fouling
ECG Facilities Service, Facilities Management Charge
ECG Facilities Service, Facilities Management Charge
----------------------------------------------------------------------------------------------------


Cluster 4 Theme:

The common theme among these transactions is that they all involve construction or refurbishment work.


M & J Ballantyne Ltd, George IV Bridge Work
John Graham Construction Ltd, Causewayside Refurbishment
John Graham Construction Ltd, Causewayside Refurbishment
John Graham Construction Ltd, Causewayside Refurbishment
John Graham Construction Ltd, Causewayside Refurbishment
ARTHUR MCKAY BUILDING SERVICES, Causewayside Work
John Graham Construction Ltd, Causewayside Refurbishment
Morris & Spottiswood Ltd, George IV Bridge Work
ECG FACILITIES SERVICE, Causewayside IT Work
John Graham Construction Ltd, Causewayside Refurbishment
----------------------------------------------------------------------------------------------------

结论

现在我们有五个新的聚类,我们可以用它们来描述我们的数据。从可视化结果来看,我们的一些聚类存在一些重叠,我们需要进行一些调整才能达到正确的位置,但我们已经可以看到GPT-3已经做出了一些有效的推理。特别是,它发现包括法定存款的项目与文学档案有关,这是正确的,但模型没有给出任何线索。非常酷,通过一些调整,我们可以创建一个基本的聚类集合,然后使用多类分类器将其推广到我们可能使用的其他交易数据集。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1343955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据技术16:数据湖和湖仓一体

前言:近几年大数据概念很多,数据库和数据仓库还没搞清楚,就又出了数据湖,现在又开始流行湖仓一体。互联网公司拼命造高大上概念来忽略小白买单的能力还是可以的。 1、数据库 数据库是结构化信息或数据的有序集合,一般以…

分享一款超强大的抖音数据采集工具

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。 如果我的分享对你有帮助,请关注我,一起向上进击。 创作不易,希望大家给一点鼓励,把公众号设置为…

轮廓检测与处理

轮廓检测 先将图像转换成二值 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度图 ret, thresh cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) # 变为二值,大于127置为255,小于100置为0.使用cv2.findContours(thresh, cv2.RETR_TREE, cv2.…

【Unity入门】热更新框架之xLua

目录 一、xLua概述1.1xLua简介1.2xLua安装 二、Lua文件加载2.1执行字符串2.2加载Lua文件2.3自定义loader 三、xLua文件配置3.1打标签3.2静态列表3.3动态列表 四、Lua与C#交互4.1 C#访问Lua4.1.1 获取一个全局基本数据类型4.1.2 访问一个全局的table4.1.3 访问一个全局的functio…

【Unity美术】Unity工程师对3D模型需要达到的了解【一】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

机器学习之K-means聚类

概念 K-means是一种常用的机器学习算法,用于聚类分析。聚类是一种无监督学习方法,它试图将数据集中的样本划分为具有相似特征的组(簇)。K-means算法的目标是将数据集划分为K个簇,其中每个样本属于与其最近的簇中心。 以下是K-means算法的基本步骤: 选择簇的数量(K值)…

算法分析与设计基础

一、绪论 1.算法的概念及特征 1.1 定义: 算法是指求解某个问题或是某类问题的一系列无歧义的指令,也就是说,对于符合一定规范的输入,能够在有限时间内获得所要求的输出。 1.2 特征: 输入:算法中的各种运…

Prometheus通过consul实现自动服务发现

环境,软件准备 本次演示环境,我是在虚拟机上安装 Linux 系统来执行操作,以下是安装的软件及版本: System: CentOS Linux release 7.6Docker: 24.0.5Prometheus: v2.37.6Consul: 1.6.1 注意:这里为了方便启动 Prometheus、Consul服…

电容器50ZLH56MEFC6.3X11

电容器 常用电子元器件类型 50ZLH56MEFC6.3X11 文章目录 电容器前言一、电容器二、50ZLH56MEFC6.3X11总结前言 电容器在电子电路中有许多重要的应用,如滤波、耦合、储能、定时等。不同类型的电容器具有不同的性能特点,例如电容量、工作电压、频率响应等。在选择和使用电容…

const变量真的不能修改吗?

文章目录 1 在Linux系统下1.1 系统参数1.2 通过指针修改(编译器有警告) 2 在Windows下2.1 系统参数2.2 直接修改2.3 指针间接修改2.4 指针间间接修改 3 总结: 1 在Linux系统下 1.1 系统参数 内核:Linux version 3.2.0-24-generi…

Glary Utilities Pro - 电脑系统优化全面指南:详尽使用教程

软件简介: Glary Utilities Pro 是一款全面的电脑优化工具,它旨在帮助用户提升计算机的性能和稳定性。这款软件提供了多种功能,包括系统清理、优化、修复以及保护。通过一键扫描,它可以识别并清除无用文件、临时数据、注册表错误等…

关于“Python”的核心知识点整理大全50

目录 python_repos.py 17.1.6 概述最受欢迎的仓库 python_repos.py 17.1.7 监视 API 的速率限制 注意 17.2 使用 Pygal 可视化仓库 python_repos.py 17.2.1 改进 Pygal 图表 python_repos.py 往期快速传送门👆(在文章最后)&#xf…

SAP问题 OPEN SQL 取不到值

关键:数据库中有数据,但是open sql取不到数据 背景: 标准程序在测试环境正常执行,在生产环境报错。 解决过程: 第一步:分析执行结果不一致可能的原因: 1.测试数据问题,可能性小&…

openGauss学习笔记-178 openGauss 数据库运维-逻辑复制-逻辑解码-使用SQL函数接口进行逻辑解码

文章目录 openGauss学习笔记-178 openGauss 数据库运维-逻辑复制-逻辑解码-使用SQL函数接口进行逻辑解码178.1 前提条件178.2 操作步骤 openGauss学习笔记-178 openGauss 数据库运维-逻辑复制-逻辑解码-使用SQL函数接口进行逻辑解码 openGauss可以通过调用SQL函数,…

传奇私服教程,新手小白速速下载!

传奇私服教程,新手小白速速下载! 第二十课-封玩家账号登陆-封玩家机器码登陆.zip 第十九课-快速搭建FTP服务器教程配套工具.zip 第十八课-绿盟GOM1108引擎登陆器配置防劫持列表教... 第十七课-最新访问网站自动弹出加群教程.zip 修复沙城捐献不了或者捐献…

Mybatis行为配置之Ⅳ—日志

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL Mybatis配置入门 Mybatis行为配置之Ⅰ—缓存 Mybatis行为配置…

Python FastApi连接oracle进行查询

这边技术选型是cx_oracle进行连接查询,cx_oracle的使用首先要有官方的客户端才能连接到数据库,python并不自带客户端。我用是Python3.9 安装客户端 可以到官网在选择最新版进行下载。 Instant Client for Microsoft Windows (x64) 64-bit 或者直接从我…

uniapp多级动态表单规则

最近有个新的业务、主要涉及多层级的动态表单提交,其中又涉及很多类型,踩了很多坑之后,终于研发完毕。 传来的数据格式处理 传来的数据格式涉及比较多的内容,以下举例一个,涉及到规则的填写 规则写法有两种&#xff…

【Maven】下载及配置

文章目录 1. 下载2. 解压3. 配置环境变量4. 验证 Maven 是一个跨平台的项目管理工具。作为 Apache 组织的一个颇为成功的开源项目,其主要服务于基于 Java 平台的项目创建,依赖管理和项目信息管理,是一个自动化构建工具,本文将介绍…

Activemq存储KahaDb详解

引言 ActiveMQ在不提供持久化的情况下,数据保存在内存中,一旦应用崩溃或者重启之后,数据都将会丢失,这显然在大部分情况下是我们所不希望的。对此ActiveMQ提供了两种持久化方式以供选择。 kahaDB kahaDB是一个基于文件&#xf…