揭开ChatGPT面纱(3):使用OpenAI进行文本情感分析(embeddings接口)

news2024/12/22 16:14:09

文章目录

  • 一、embeddings接口解析
  • 二、代码实现
    • 1.数据集dataset.csv
    • 2.代码
    • 3.运行结果

openai版本==1.6.1
本系列博客源码仓库:gitlab,本博客对应文件夹03

在这一篇博客中我将使用OpenAI的embeddings接口判断21条服装评价是否是好评。

  • 首先来看实现思路:

在这里插入图片描述

一、embeddings接口解析

在上一篇博客中说过了,OpenAI主要有11个接口,其中embeddings接口用于生成文本嵌入。下面通过解读参数来学习下这个接口的用法。

  • 在这个接口中,最主要使用的就是这个create()方法:

在这里插入图片描述

  • 参数解析:

input: 要嵌入的输入文本,可以是字符串、字符串列表、整数列表或整数数组列表。输入必须不超过模型的最大输入令牌数。
model: 要使用的模型ID。
encoding_format: 返回嵌入的格式,可以是float或base64。
user: 代表终端用户的唯一标识符,可以帮助OpenAI监控和检测滥用行为。
extra_headers: 发送额外的HTTP头。
extra_query: 在请求中添加额外的查询参数。
extra_body: 在请求中添加额外的JSON属性。
timeout: 覆盖客户端级别的默认超时时间,单位为秒。

二、代码实现

1.数据集dataset.csv

评价,标签
这件衣服的面料非常舒适,穿上去感觉很好,好评
款式时尚,颜色也很正,非常满意的一次购物体验,好评
衣服质量超出预期,非常满意,好评
穿上这件衣服,感觉整个人都精神了,好评,好评
质量很好,做工精细,好评,好评
颜色很鲜亮,非常喜欢,好评
尺码很准,穿上很合身,好评
衣服的版型很好,穿上很有型,好评
面料柔软,手感很好,好评
非常满意的一次购物,衣服质量非常好,好评
穿上很显瘦,非常喜欢,好评
颜色和图片一样,没有色差,好评
衣服的质感很好,穿上很有档次,好评
款式新颖,穿上很有气质,好评
衣服有质量问题,线头多,不满意,差评
颜色和图片有色差,感觉被欺骗了,差评
尺码不准确,穿上不合身,差评
面料很硬,穿上不舒服,差评
衣服做工粗糙,有很多线头,差评
款式一般,没有图片上看起来好看,差评
衣服有异味,洗了好几次还是有味道,差评

2.代码

from openai import OpenAI
import json
import httpx
import numpy as np

# 读取配置,在上传gitlab时配置文件ignore了
with open('../config/openai.json') as config_file:
    config = json.load(config_file)

client = OpenAI(
    base_url=config['base_url'],
    api_key=config['key'],
    http_client=httpx.Client(
        base_url=config['base_url'],
        follow_redirects=True,
    ),
)

# 指定模型
MODEL = "text-embedding-ada-002"

# 读取数据集,忽略表头行
dataset = open('dataset.csv', 'r', encoding='utf-8').readlines()[1:]
reviews = []
labels = []
for row in dataset:
    items = row.split(',')
    reviews.append(items[0])
    labels.append(items[1])


# 实现文本转embedding方法
def get_embedding(text, model=MODEL):
    return client.embeddings.create(input=[text], model=model).data[0].embedding


# 将”好评“和”差评“转换为embedding
positive = get_embedding("好评")
negative = get_embedding("差评")

# 把数据集的评论转为embedding
review_embeddings = []
for review in reviews:
    review_embeddings.append(get_embedding(review))


# 实现余弦相似度算法
def cosine_similarity(vec_a, vec_b):
    # 计算两个向量的点积
    dot_product = np.dot(vec_a, vec_b)
    # 计算两个向量的欧几里得范数(即长度)
    norm_a = np.linalg.norm(vec_a)
    norm_b = np.linalg.norm(vec_b)
    # 计算余弦相似度
    cos_similarity = dot_product / (norm_a * norm_b)
    return cos_similarity


# 计算每条评论是好评还是差评
for i in range(len(reviews)):
    print("第" + str(i) + "条评论为:" + reviews[i])
    pos_score = cosine_similarity(review_embeddings[i], positive)
    neg_score = cosine_similarity(review_embeddings[i], negative)
    print("该评论与好评的相似度为:" + str(pos_score))
    print("该评论与差评的相似度为:" + str(neg_score))
    print("判断结果为:" + ("好评" if pos_score>neg_score else "差评"))
    print("实际标签为:"+labels[i])

3.运行结果

21条评论,只计算错误3条,正确率高达85.7%。

D:\setup\tensorflow\envs\openaidemo\python.exe "D:/0 project/openaidemo/03/sentiment_analysis.py"0条评论为:这件衣服的面料非常舒适,穿上去感觉很好
该评论与好评的相似度为:0.7866600025796906
该评论与差评的相似度为:0.7340914289400244
判断结果为:好评
实际标签为:好评

第1条评论为:款式时尚,颜色也很正,非常满意的一次购物体验
该评论与好评的相似度为:0.8116062681356471
该评论与差评的相似度为:0.7592264307269887
判断结果为:好评
实际标签为:好评

第2条评论为:衣服质量超出预期,非常满意
该评论与好评的相似度为:0.835177254990754
该评论与差评的相似度为:0.7910031400363514
判断结果为:好评
实际标签为:好评

第3条评论为:穿上这件衣服,感觉整个人都精神了,好评
该评论与好评的相似度为:0.8479253083790808
该评论与差评的相似度为:0.7992275199715745
判断结果为:好评
实际标签为:好评

第4条评论为:质量很好,做工精细,好评
该评论与好评的相似度为:0.8804815052105072
该评论与差评的相似度为:0.8202060552575923
判断结果为:好评
实际标签为:好评

第5条评论为:颜色很鲜亮,非常喜欢
该评论与好评的相似度为:0.8122908056959066
该评论与差评的相似度为:0.7453758474352993
判断结果为:好评
实际标签为:好评

第6条评论为:尺码很准,穿上很合身
该评论与好评的相似度为:0.8095639635935163
该评论与差评的相似度为:0.7542509575575985
判断结果为:好评
实际标签为:好评

第7条评论为:衣服的版型很好,穿上很有型
该评论与好评的相似度为:0.8029880472359789
该评论与差评的相似度为:0.752721443961377
判断结果为:好评
实际标签为:好评

第8条评论为:面料柔软,手感很好
该评论与好评的相似度为:0.8202393074180623
该评论与差评的相似度为:0.7715710993474748
判断结果为:好评
实际标签为:好评

第9条评论为:非常满意的一次购物,衣服质量非常好
该评论与好评的相似度为:0.8304340790084418
该评论与差评的相似度为:0.7686974883325032
判断结果为:好评
实际标签为:好评

第10条评论为:穿上很显瘦,非常喜欢
该评论与好评的相似度为:0.7845954204223071
该评论与差评的相似度为:0.7344546937738867
判断结果为:好评
实际标签为:好评

第11条评论为:颜色和图片一样,没有色差
该评论与好评的相似度为:0.7889487515789574
该评论与差评的相似度为:0.7629094836325928
判断结果为:好评
实际标签为:好评

第12条评论为:衣服的质感很好,穿上很有档次
该评论与好评的相似度为:0.8103547992920661
该评论与差评的相似度为:0.7626423966774464
判断结果为:好评
实际标签为:好评

第13条评论为:款式新颖,穿上很有气质
该评论与好评的相似度为:0.7940717784875954
该评论与差评的相似度为:0.7563715210341154
判断结果为:好评
实际标签为:好评

第14条评论为:衣服有质量问题,线头多,不满意
该评论与好评的相似度为:0.7944173838386458
该评论与差评的相似度为:0.800127661438339
判断结果为:差评
实际标签为:差评

第15条评论为:颜色和图片有色差,感觉被欺骗了
该评论与好评的相似度为:0.7822516772149408
该评论与差评的相似度为:0.7907092043951234
判断结果为:差评
实际标签为:差评

第16条评论为:尺码不准确,穿上不合身
该评论与好评的相似度为:0.7697819579113206
该评论与差评的相似度为:0.7768264577324818
判断结果为:差评
实际标签为:差评

第17条评论为:面料很硬,穿上不舒服
该评论与好评的相似度为:0.7652704470138616
该评论与差评的相似度为:0.7608743799318946
判断结果为:好评
实际标签为:差评

第18条评论为:衣服做工粗糙,有很多线头
该评论与好评的相似度为:0.748231684611617
该评论与差评的相似度为:0.7604407281022945
判断结果为:差评
实际标签为:差评

第19条评论为:款式一般,没有图片上看起来好看
该评论与好评的相似度为:0.7825934944171562
该评论与差评的相似度为:0.7738324828014607
判断结果为:好评
实际标签为:差评

第20条评论为:衣服有异味,洗了好几次还是有味道
该评论与好评的相似度为:0.7546261044756783
该评论与差评的相似度为:0.7442435431393303
判断结果为:好评
实际标签为:差评

Process finished with exit code 0

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

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

相关文章

TPG原理以及verilog实现

文章目录 一、前言二、verilog代码实现三、仿真以及结果分析 一、前言 TPG(video_test_pattern generator) 视频测试模式发生器用于产生测试数据,对视频数据通路测试。根据视频输出时序产生相应的图像数据 二、verilog代码实现 timescale 1ns / 1nsmodule tpg ( i…

超星图书转成PDF格式

转为pdf 为避免浪费您的时间,本篇转载文章不值得花费您的宝贵时间阅读 方法一 感谢医学插画动画杜鹏 Roison An两位提供的方法,经试验后简化了一下,得出以下方法:1、使用超星打开你想要转换的图书2、依次打开本书的所有页面,不要…

Vue3+TS版本Uniapp:项目前置操作

作者:前端小王hs 阿里云社区博客专家/清华大学出版社签约作者✍/CSDN百万访问博主/B站千粉前端up主 环境:使用vscode进行开发 如果一开始是使用的HbuilderX,请看hbuilderX创建的uniapp项目转移到vscode 为什么选择vscode?有更好…

SpringCloud-搭建XXL-JOB任务调度平台教程

一、XXL-JOB任务调度平台介绍 XXL-JOB是一个轻量级分布式任务调度框架,旨在解决分布式系统中的任务调度问题,提高系统的处理效率和任务管理的便捷性。 1. XXL-JOB任务调度概念 XXL-JOB任务调度平台通过中心化管理方式,使得任务的调度更加高…

【Linux】小知识点温习---命令

许多常见命令会用,但是很少注意他们的区别;亦或在学习中使用较少,容易忘记,今天做一个回顾。 ls系列 -a:显示所有文件(包括隐藏文件) -l:将文件以竖列形式显示 -i:显示文件的inode编号 pwd 显…

基础SQL DDL语句

MySQL的DDL(Data Definition Language)语句用于定义或修改数据库结构。 DDL数据库操作 查看所有的数据库 show databases; 红色圈起来的是系统数据库,是系统自带的 mysql:包含存储MySQL服务器运行时所需信息的表。这包括数据字典…

HttpServlet,ServletContext,Listener它仨的故事

1.HttpServlet。 听起来是不是感觉像是个上古词汇,是不是没有阅读下去的兴趣了?Tomcat知道吧,它就是一个servlet容器,当用户向服务器发送一个HTTP请求时,Servlet容器(如Tomcat)会根据其配置找到…

【力扣 Hot100 | 第七天】4.22(移动零)

文章目录 1.移动零1.1题目1.2解法:双指针1.2.1双指针思路1.2.2代码实现 1.移动零 1.1题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数…

IDEA快速入门

目录 1. 概述 2. 安装 3. 激活 4. 关闭自动更新 5. 创建Java项目 5.1 配置JRE 5.2 创建项目 6. 配置设置 6.1 主题 6.2 设置字体默认大小 6.3 鼠标滚轮改变字体大小 6.4 设置自动导入 6.5 项目选择 7. lombok插件 7.1 安装插件 7.2 启用注解 8. 安装包及插件…

Redis 内存策略

目录 1. key到期的情况 Redis的内存结构redisDb Redis怎么知道哪个key过期的 Redis对过期key的删除策略 惰性删除 周期删除 2. key未到期,但内存使用已达上限的情况 Redis检查内存阈值的时刻 达到内存上限,Redis淘汰key的策略 结构体redisObj…

基于IIoT的设备预测性维护设计

基于IIoT的设备预测性维护设计 一、引言 在工业物联网(IIoT)的背景下,设备预测性维护成为了一种关键的战略,能够帮助企业提前发现并解决设备故障,从而提高生产效率、减少停机时间,并降低总体维护成本。为了…

springdoc-openapi使用

springdoc-openapi使用 一、引入pom二、新增配置类OpenApiConfig四、Controller层示例五、配置文件新增内容六、验证 一、引入pom <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1…

微服务两种方式登录

目录 1.restTemplate方式 1.1页面 1.2消费者 1.3生产者 1.4效果 2.Feign方式 2.1Service 2.2生产者 三个生产者 一个消费者&#xff0c;三个生产者需要用mysqlmybatis 三个不同的数据库。 页面输入用户名和密码&#xff0c;提交到后端消费者&#xff0c;消费者传到生产…

Character Auras

15种惊人的角色光环效果! 该包包含15种惊人的光环效果: 水灵气 白色光环 肥皂ayra 烟雾光环 睡眠光环 闪耀光环 流星光环 闪电光环 治愈光环 金色光环 冻结光环 火灾ayra 黑暗光环 血灵气 酸性光环 所有预制件都已准备好,只需将它们放入游戏中即可!! 所有平台支持! 下载…

Redis学习-Redis的九种数据结构

String &#xff08;字符串&#xff09; 虽然redis是用C语言编写&#xff0c;但是redis中的string是redis自己实现的字符串结构&#xff0c;叫Simple Dynamic String简称&#xff08;SDS&#xff09;&#xff0c;因为redis做为中间件会接受不同语言编写的程序传过来的字符串&a…

链表最大孪生和

题目链接 链表最大孪生和 题目描述 注意点 链表的节点数目是 [2, 100000] 中的 偶数1 < Node.val < 100000第 i 个节点&#xff08;下标从 0 开始&#xff09;的孪生节点为第 (n-1-i) 个节点 解答思路 首先想到的是使用双端队列按顺序存储链表中每个节点的值&#x…

【leetcode面试经典150题】66. 分隔链表(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

html、css、京东移动端静态页面,资源免费分享,可作为参考,提供InsCode在线运行演示

CSDN将我上传的免费资源私自变成VIP专享资源&#xff0c;且作为作者的我不可修改为免费资源&#xff0c;不可删除&#xff0c;寻找客服无果&#xff0c;很愤怒&#xff0c;&#xff08;我发布免费资源就是希望大家能免费一起用、一起学习&#xff09;&#xff0c;接下来继续寻找…

温湿度LCD显示并上传服务器

项目需求 通过温湿度传感器将值传到LCD1602&#xff0c;并实时通过蓝牙透传到手机。 硬件介绍 温湿度传感器 DHT11温湿度传感器 DHT11_温湿度传感器数据格式-CSDN博客 LCD1602LCD1602-CSDN博客 HC-01 继电器模块 硬件接线 LCD1602 D0~D7 --> A0~A7VDD, A --> 5v…

Java基础教程(3)-Java变量和数组

变量&#xff1a; 变量是Java程序的一个基本存储单元。变量由一个标识符&#xff0c;类型及一个可选初始值的组合定义。此外&#xff0c;所有的变量都有一个作用域&#xff0c;定义变量的可见性&#xff0c;生存期。 定义一个变量 定义一个整型变量num: int num 10; num是标…