创建一个程序来记录每天的工作日常—6。与chatgpt结合 找一些集 来训练 ,它能自动分类到 其中一个,例如 “打扫卫生” 它会自动分类到 “家务”

改进步骤

  1. 数据增强:使用GPT模型生成更多的训练数据。
  2. 使用更高级的模型:使用BERT或其他预训练的语言模型进行文本分类。
  3. 经验条和经验值显示:在网页端显示当前的经验值,并添加一个经验条。

数据增强和训练数据集

我们可以通过OpenAI的GPT模型来生成更多的训练数据。这里假设我们已经有一定数量的基础训练数据,并使用GPT模型生成更多样化的数据。

initial_data = {'工作': ['完成工作任务','解决问题','编写代码','参加会议'],'生活': ['锻炼身体','学习新知识','看电影','休息'],'家务': ['打扫卫生','洗衣服','做饭','整理房间']
}

使用GPT生成更多数据

我们将使用OpenAI的API生成更多数据。请确保您已设置OpenAI API密钥:

import openaiopenai.api_key = 'your_openai_api_key'def generate_data(prompt, max_tokens=50):response = openai.Completion.create(engine="text-davinci-003",prompt=prompt,max_tokens=max_tokens,n=5,stop=None,temperature=0.7)return [choice['text'].strip() for choice in response['choices']]def augment_data(data):augmented_data = {}for category, examples in data.items():augmented_data[category] = examples.copy()for example in examples:prompt = f"给出一些类似于'{example}'的{category}活动。"new_examples = generate_data(prompt)augmented_data[category].extend(new_examples)return augmented_data# 增强数据
augmented_data = augment_data(initial_data)

使用BERT进行文本分类

我们将使用transformers库中的BERT模型进行分类。以下是完整的app.py代码:

import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
from transformers import BertTokenizer, BertForSequenceClassification
from transformers import Trainer, TrainingArguments
from sklearn.model_selection import train_test_split
from torch.utils.data import Dataset, DataLoader
from flask import Flask, render_template, request, jsonify
import torch
import os
import pandas as pd
from datetime import datetime
import openai# 初始化nltk
nltk.download('punkt')
nltk.download('stopwords')
nltk.download('wordnet')# 初始化分类器和评分模型
classifier = None
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')# 初始化分类和评分标准
categories = ['工作', '生活', '家务']
score_criteria = {'工作': {'完成任务': 10,'解决问题': 5,'编程': 8,'参加会议': 4,'其他': 1},'生活': {'锻炼': 5,'学习': 3,'休息': 2,'看电影': 2,'其他': 1},'家务': {'打扫卫生': 5,'洗衣服': 3,'做饭': 4,'整理房间': 3,'其他': 1}
}# 初始化基础分数和等级
base_score = 0
level = '初级'# 初始化日志文件和评分记录
daily_log = []
scores = []# 初始化词形还原器
lemmatizer = WordNetLemmatizer()# 设置OpenAI API密钥
openai.api_key = 'your_openai_api_key'# 检查并创建示例数据文件
def create_example_files():example_data = {'工作': ['完成工作任务\n','解决问题\n','编写代码\n','参加会议\n','其他工作相关活动\n'],'生活': ['锻炼身体\n','学习新知识\n','看电影\n','休息\n','其他生活相关活动\n'],'家务': ['打扫卫生\n','洗衣服\n','做饭\n','整理房间\n','其他家务相关活动\n']}for category, data in example_data.items():filename = f'{category}_log.txt'if not os.path.exists(filename):with open(filename, 'w', encoding='utf-8') as file:file.writelines(data)# 使用GPT生成更多数据
def generate_data(prompt, max_tokens=50):response = openai.Completion.create(engine="text-davinci-003",prompt=prompt,max_tokens=max_tokens,n=5,stop=None,temperature=0.7)return [choice['text'].strip() for choice in response['choices']]# 增强数据
def augment_data(data):augmented_data = {}for category, examples in data.items():augmented_data[category] = examples.copy()for example in examples:prompt = f"给出一些类似于'{example}'的{category}活动。"new_examples = generate_data(prompt)augmented_data[category].extend(new_examples)return augmented_data# 读取和增强数据
def load_and_augment_data():create_example_files()initial_data = {'工作': [],'生活': [],'家务': []}for category in categories:with open(f'{category}_log.txt', 'r', encoding='utf-8') as file:initial_data[category] = file.read().splitlines()return augment_data(initial_data)# 自定义数据集类
class ActivityDataset(Dataset):def __init__(self, texts, labels, tokenizer, max_len):self.texts = textsself.labels = labelsself.tokenizer = tokenizerself.max_len = max_lendef __len__(self):return len(self.texts)def __getitem__(self, item):text = self.texts[item]label = self.labels[item]encoding = self.tokenizer.encode_plus(text,add_special_tokens=True,max_length=self.max_len,return_token_type_ids=False,padding='max_length',return_attention_mask=True,return_tensors='pt',truncation=True)return {'text': text,'input_ids': encoding['input_ids'].flatten(),'attention_mask': encoding['attention_mask'].flatten(),'labels': torch.tensor(label, dtype=torch.long)}# 训练分类器
def train_classifier():global classifierdata = load_and_augment_data()texts = []labels = []for category, examples in data.items():texts.extend(examples)labels.extend([categories.index(category)] * len(examples))train_texts, val_texts, train_labels, val_labels = train_test_split(texts, labels, test_size=0.1, random_state=42)train_dataset = ActivityDataset(train_texts, train_labels, tokenizer, max_len=128)val_dataset = ActivityDataset(val_texts, val_labels, tokenizer, max_len=128)training_args = TrainingArguments(output_dir='./results',num_train_epochs=3,per_device_train_batch_size=16,per_device_eval_batch_size=16,warmup_steps=500,weight_decay=0.01,logging_dir='./logs',logging_steps=10,evaluation_strategy='epoch')model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=len(categories))trainer = Trainer(model=model,args=training_args,train_dataset=train_dataset,eval_dataset=val_dataset,)trainer.train()classifier = model# 预处理文本数据
def preprocess_text(data):processed_data = []for text in data:# 分词tokens = word_tokenize(text.lower())# 去除停用词和标点符号stop_words = set(stopwords.words('english'))filtered_tokens = [token for token in tokens if token.isalnum() and token not in stop_words]# 词形还原lemmatized_tokens = [lemmatizer.lemmatize(token) for token in filtered_tokens]# 重新组合为文本processed_text = ' '.join(lemmatized_tokens)processed_data.append(processed_text)return processed_data# 智能分类工作日常
def classify_activity(activity):inputs = tokenizer(activity, return_tensors='pt', truncation=True, padding=True, max_length=128)outputs = classifier(**inputs)predictions = torch.argmax(outputs.logits, dim=1)return categories[predictions.item()]# 根据分类和评分标准计算活动得分
def score_activity(activity, category):score = 0for word, points in score_criteria[category].items():if word in activity:score += pointsreturn score# 记录每天的工作日常到Excel
def log_daily_activity(activity):global base_score, level# 智能分类category = classify_activity(activity)# 计算得分score = score_activity(activity, category)# 更新基础分数和等级base_score += scoreif base_score >= 100:level = '高级'elif base_score >= 50:level = '中级'# 记录日志daily_log.append((activity, category, score))# 更新评分记录scores.append(score)# 获取当前时间timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')# 记录到Excellog_to_excel(timestamp, activity, category, score)# 记录数据到Excel文件
def log_to_excel(timestamp, activity, category, score):filename = 'activity_log.xlsx'if os.path.exists(filename):df = pd.read_excel(filename)else:df = pd.DataFrame(columns=['Timestamp', 'Activity', 'Category', 'Score'])new_entry = pd.DataFrame([[timestamp, activity, category, score]], columns=['Timestamp', 'Activity', 'Category', 'Score'])df = pd.concat([df, new_entry], ignore_index=True)df.to_excel(filename, index=False)# 创建Flask应用
app = Flask(__name__)@app.route('/')
def index():return render_template('index.html', base_score=base_score, level=level)@app.route('/log_activity', methods=['POST'])
def log_activity():activity = request.form['activity']log_daily_activity(activity)return jsonify({'base_score': base_score, 'level': level})@app.route('/simulate')
def simulate():global base_score, level# 模拟每天的活动记录activities = ['完成工作任务','锻炼身体','解决问题','学习新知识','编写代码','看电影','休息','参加会议','打扫卫生','洗衣服','做饭','整理房间','其他活动']for activity in activities:log_daily_activity(activity)# 返回当前分数和等级return jsonify({'base_score': base_score, 'level': level})if __name__ == '__main__':# 训练分类器和评分模型train_classifier()# 启动Flask应用app.run(debug=True)

HTML代码(templates/index.html

我们将创建一个表单,让用户输入他们的活动,并通过Ajax发送到服务器,同时添加经验值和经验条的显示:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>升级动画</title><style>body {text-align: center;font-family: Arial, sans-serif;}.character {width: 200px;height: 200px;margin: 50px auto;border: 2px solid #000;border-radius: 10px;background-color: #f0f0f0;position: relative;}.character img {width: 100%;height: 100%;display: none;}.character img.active {display: block;}.level {font-size: 1.5em;margin-top: 20px;}.upgrade {font-size: 1.2em;color: green;}.form-container {margin: 20px auto;}.progress-bar {width: 80%;margin: 20px auto;background-color: #e0e0e0;border-radius: 10px;overflow: hidden;}.progress-bar-inner {height: 20px;background-color: #76c7c0;width: 0;}</style>
</head>
<body><div class="character"><img src="/static/character_level1.png" id="level1" class="active"><img src="/static/character_level2.png" id="level2"><img src="/static/character_level3.png" id="level3"></div><div class="level" id="level">当前等级: 初级</div><div class="upgrade" id="upgrade"></div><div class="form-container"><form id="activity-form"><input type="text" id="activity" name="activity" placeholder="输入今天的活动" required><button type="submit">记录活动</button></form></div><div class="progress-bar"><div class="progress-bar-inner" id="progress-bar-inner"></div></div><div id="experience">当前经验值: 0</div><script>let baseScore = {{ base_score }};let level = "{{ level }}";function updateLevel(newLevel) {const levelImages = {'初级': document.getElementById('level1'),'中级': document.getElementById('level2'),'高级': document.getElementById('level3')};for (let level in levelImages) {if (level === newLevel) {levelImages[level].classList.add('active');document.getElementById('level').textContent = `当前等级: ${level}`;document.getElementById('upgrade').textContent = `升级到${level}!`;} else {levelImages[level].classList.remove('active');}}}function updateExperience(newScore) {baseScore = newScore;document.getElementById('experience').textContent = `当前经验值: ${baseScore}`;let progressBar = document.getElementById('progress-bar-inner');progressBar.style.width = `${Math.min((baseScore % 50) * 2, 100)}%`;}function logActivity(event) {event.preventDefault();const activity = document.getElementById('activity').value;fetch('/log_activity', {method: 'POST',headers: {'Content-Type': 'application/x-www-form-urlencoded'},body: `activity=${encodeURIComponent(activity)}`}).then(response => response.json()).then(data => {updateLevel(data.level);updateExperience(data.base_score);document.getElementById('activity').value = '';});}document.getElementById('activity-form').addEventListener('submit', logActivity);</script>
</body>
</html>

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

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

相关文章

【JVM基础07】——类加载器-什么是类加载器?类加载器有哪些?双亲委派了解吗?

目录 1- 引言&#xff1a;类加载器1-1 类加载器是什么&#xff1f;(What)1-2 为什么要用类加载器&#xff1f; 作用&#xff1a;类加载的过程&#xff1f;(Why) 2- ⭐核心&#xff1a;类加载器详解(How)2-1 类加载器分类2-2 什么是双亲委派模型&#xff1f;2-3 为什么采用双亲委…

Pytorch基础:Tensor的squeeze和unsqueeze方法

相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 在Pytorch中&#xff0c;squeeze和unsqueeze是Tensor的一个重要方法&#xff0c;同时它们也是torch模块中的一个函数&#xff0c;它们的语法如下所示。 Tensor.…

【SpringBoot】1 Gitee

本项目 Gitee 地址&#xff1a;https://gitee.com/Lin_DH/system idea中可能装个gitee的插件&#xff0c;这样操作起来比较方便。 1&#xff09;登录 Gitee 官网&#xff08;https://gitee.com/&#xff09;&#xff0c;新建仓库。 2&#xff09;复制新建的 Gitee 仓库地址&am…

Unity3D之TextMeshPro使用

文章目录 1. TextMeshPro简介2. TextMeshPro创建3. TextMeshPro脚本中调用4. TextMeshPro字体设置及中文支持过程中出现的一些问题 1. TextMeshPro简介 【官网文档】https://docs.unity.cn/cn/2020.3/Manual/com.unity.textmeshpro.html TextMeshPro 是 Unity 的最终文本解决…

软件测试---Linux

Linux命令使用&#xff1a;为了将来工作中与服务器设备进行交互而准备的技能&#xff08;远程连接/命令的使用&#xff09;数据库的使用&#xff1a;MySQL&#xff0c;除了查询动作需要重点掌握以外&#xff0c;其他操作了解即可什么是虚拟机 通过虚拟化技术&#xff0c;在电脑…

第九十七周周报

学习时间&#xff1a; 2024.7.20-2024.7.26 学习产出&#xff1a; 这周科研暂时没有进展&#xff0c;因为服务器这周都进不去&#xff0c;周一的时候上周跑的节点还被停了&#xff08;机房太热&#xff09;&#xff0c;然后这周主要在改吉安县小程序的bug&#xff0c;因为要…

刷新当前页面

一, reload 直接刷新页面 window.location.reload(); $router.go(0);相当于按了 F5, 因此缺点也很明显, 体验感不佳, 因为要加载所有页面资源相对较慢, 比较耗时. 二, Vue Router 刷新当前页面 这个时候, 我们通过 $router.push 一个 refresh 路由的形式实现, 具体步骤如下:…

Leetcode49. 字母异位词分组(java实现)

今天我来给大家分享的是leetcode49的解题思路&#xff0c;题目描述如下 如果没有做过leetcode242题目的同学&#xff0c;可以先把它做了&#xff0c;会更好理解异位词的概念。 本道题的大题思路是&#xff1a; 首先遍历strs&#xff0c;然后统计每一个数组元素出现的次数&#…

电商数据精细化运营解决方案(18页PPT)

方案介绍&#xff1a; 电商数据精细化运营解决方案通过全面、深入的数据分析与应用&#xff0c;助力电商企业实现精细化管理和精准化营销&#xff0c;从而在激烈的市场竞争中脱颖而出。 部分方案内容&#xff1a;

Prometheus 监控Tomcat等java应用的状态

5月应用服务出现问题&#xff0c;当别的小伙伴问我&#xff0c;有没有Tomcat等应用状态的监控的时候&#xff0c;我有点儿尴尬。所以赶紧抽空部署一下。 在配置之前&#xff0c;就当已经会安装jdk和tomcat了。 一、下载jmx_exporter #linux下 cd /usr/local/prometheus wget …

Docker入门指南:Linux系统下的完整安装步骤与常见问题解答

本文以centos7演示。 Docker安装 可参考官方安装文档&#xff1a;Install Docker Engine on CentOS | Docker Docs 一图流&#xff1a; # 移除旧版本docker sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logro…

将一个url文件链接下载到本地的方法,以及从url中提取并创建一个文件保存路径,以及m3u8文件的解析及下载

最近工作中&#xff0c;遇到了讲一个m3u8的文件下载到本地&#xff0c;使用代码如下&#xff1a; import urllib.requestm3u8file os.path.join(folderPath, dirName .m3u8) urllib.request.urlretrieve(m3u8url, m3u8file) 不过上述代码有个小问题&#xff0c;就是需要使用…

Debug-018-elementUI-el-tree中通过CSS隐藏任意一项的选择框checkbox

前情提要&#xff1a; 我们项目中使用的是elementUI&#xff0c;业务中经常需要使用到el-tree组件去实现一些有层级关系的功能。现在有一个需求描述一下&#xff1a;首先是这个el-tree是个有checkbox的树&#xff0c;每一子节点都可以被选择&#xff0c;用于去实现一些系统的权…

PHP多场地预定小程序系统源码

一键畅游多地&#xff01;多场地预定小程序的超实用指南 段落一&#xff1a;【开篇&#xff1a;告别繁琐&#xff0c;预订新体验】 &#x1f389;&#x1f680; 还在为多个活动或会议的场地预订而头疼不已吗&#xff1f;多场地预定小程序来拯救你啦&#xff01;它像是一位贴心…

【QT】QT 窗口(菜单栏、工具栏、状态栏、浮动窗口、对话框)

Qt 窗口是通过 QMainWindow类来实现的。 QMainWindow 是一个为用户提供主窗口程序的类&#xff0c;继承自 QWidget 类&#xff0c;并且提供了⼀个预定义的布局。QMainWindow 包含一个菜单栏&#xff08;Menu Bar&#xff09;、多个工具栏&#xff08;Tool Bars&#xff09;、…

7.26总结

1.我发现我的界面非常不符合要求&#xff0c;魔改了一下界面 2.在此基础上实现了编辑资料的功能&#xff0c;之前的编辑资料不够用完善&#xff0c;现在将所有数据存入数据库&#xff0c; 然后将更改的图片路径存到了服务端的文件夹&#xff0c;文件名为id更方便获取图片&…

Cuda编程模型中常见的错误检测方法

Cuda编程模型中常见的错误检测方法 1 CUDA错误检测简介2 直接嵌入检测函数2.1 检测函数介绍2.2 使用示例 3 封装在.cuh头文件中嵌入3.1 创建 error.cuh 头文件3.2 在 CUDA 程序中包含 error.cuh 并调用 CHECK 宏3.3 使用示例 1 CUDA错误检测简介 CUDA编程模型中的错误检测是确…

C++ - char*、const char*、char[]、string

const char* const char* 用来定义字符串常量。 char[ ] char型的字符数组是一种定长的数组&#xff0c;存储指定长度的字符序列&#xff0c;数组中的每个元素都是一个char类型的变量&#xff0c;如&#xff1a; char arr[] {h, a, l, l, o, \0}; char c arr[0]; // 访问…

【二叉树 C++DFS】2458. 移除子树后的二叉树高度

本文涉及知识点 二叉树 CDFS LeetCode 2458. 移除子树后的二叉树高度 给你一棵 二叉树 的根节点 root &#xff0c;树中有 n 个节点。每个节点都可以被分配一个从 1 到 n 且互不相同的值。另给你一个长度为 m 的数组 queries 。 你必须在树上执行 m 个 独立 的查询&#xff…

模式Hash和history

vuerouter有两种路由模式Hash和history。区别&#xff1a;Hash为默认模式&#xff0c;url中包含一个#符号的哈希部分。优势&#xff1a;兼容性好&#xff0c;不需要后端服务器的特殊配置。缺点&#xff1a;不够美观&#xff0c;搜索引擎优化较差。History模式使用的浏览器的His…