在飞书搞了个机器人,我让ChatGPT帮忙写算法

一、前言

环境:
系统:Windows 11 64位
Python版本:Python 3.9

注:本文不讲怎么实现,只讲实现的效果和一些思考。大家感兴趣再考虑去配置相关机器人。

先来问问ChatGPT两个问题:
1、ChatGPT是什么?
来看看ChatGPT对自己的定义:
image.png

ChatGPT是一种基于自然语言处理(NLP)的聊天机器人技术,它可以帮助用户与聊天机器人进行自然语言交流。ChatGPT使用深度学习技术来模拟人类的自然语言交流,从而实现自然语言处理(NLP)的聊天机器人功能。

2、ChatGPT能做什么?
来看看ChatGPT对自己的定义:
image.png

试用一番之后,我有个强烈的感受——ChatGPT真的太强大了!
它像是一个全能型选手,可以帮助我了解一些未知的领域,帮我解答一些其他领域很小白的问题,只要你有问题,它可以不厌其烦地给你解答。
如果你在学习某个领域的知识,遇到难题了,问它,或许也可以给你答案或者一些启发。
更让我惊喜的是,它还可以帮我写算法,大大提高了我的学习效率,太爱了!接下来介绍三个算法小例子:

注:本篇文章只讲故事,不讲原理和操作

二、让ChatGPT帮我写算法

以下简述下ChatGPT为我写的3个算法。

2.1 二分法

image.png

def binary_search(list, item):low = 0high = len(list) - 1while low <= high:mid = (low + high) // 2guess = list[mid]if guess == item:return midif guess > item:high = mid - 1else:low = mid + 1return Nonemy_list = [1, 3, 5, 7, 9]print(binary_search(my_list, 3))  # => 1
print(binary_search(my_list, -1)) # => None

我记得之前一开始写二分法算法的时候,还遇到一个坑,就是不知道这种从[0, n-1]的边界值处理方式,后来采用了[-1, n]完美地解决了问题,今天AI教会了我,原来是要在重新赋值low和high变量的时候,进行加1和减1的处理,get到了!!!

2.2 Apriori算法

Apriori算法是一种用于发现关联规则的数据挖掘算法,它的基本思想是:如果某个项集是频繁项集,那么它的所有子集也是频繁项集。Apriori算法通过迭代的方式来寻找频繁项集,它的基本步骤如下:

  1. 从原始数据中构建候选项集,并计算每个项集的支持度;
  2. 根据支持度的阈值筛选出频繁项集;
  3. 从频繁项集中构建关联规则;
  4. 根据置信度的阈值筛选出有效的关联规则。

接下来问问ChatGPT怎么用Python实现该算法。
image.png
ChatGPT用Python帮我写的Apriori算法代码,还带了一个数据集,直接拿来跑就完事了。
如果想要用自己的数据集,直接替换以下代码的dataset即可,简直不要太容易!
ChatGPT提供的完整代码如下:

# > Python实现Apriori算法
# -*- coding:utf-8 -*-# 导入相关库
import pandas as pd
import numpy as np# 加载数据集
dataset = [['牛奶', '面包', '尿布', '啤酒', '鸡蛋'],['牛奶', '尿布', '啤酒', '可乐'],['面包', '牛奶', '尿布', '啤酒'],['面包', '牛奶', '尿布', '可乐']]# 将数据集转换为DataFrame格式
df = pd.DataFrame(dataset)# 定义Apriori算法函数
def apriori(data, min_support=0.5):# 将数据转换为集合格式C1 = create_C1(data)# 将数据集转换为二维列表D = list(map(set, data))# 构建初始候选项集C1L1, support_data = scan_D(D, C1, min_support)# 构建完整的候选项集CkL = [L1]k = 2while (len(L[k-2]) > 0):Ck = apriori_gen(L[k-2], k)Lk, supK = scan_D(D, Ck, min_support)support_data.update(supK)L.append(Lk)k += 1return L, support_data# 构建初始候选项集C1def create_C1(data):C1 = []for transaction in data:for item in transaction:if not [item] in C1:C1.append([item])C1.sort()return list(map(frozenset, C1))# 扫描数据集,从C1生成L1def scan_D(D, Ck, min_support):ss_cnt = {}for tid in D:for can in Ck:if can.issubset(tid):if can not in ss_cnt:ss_cnt[can] = 1
else:ss_cnt[can] += 1num_items = float(len(D))ret_list = []support_data = {}for key in ss_cnt:support = ss_cnt[key] / num_itemsif support >= min_support:ret_list.insert(0, key)support_data[key] = supportreturn ret_list, support_data# 根据频繁项集的集合进行合并def apriori_gen(Lk, k):ret_list = []len_Lk = len(Lk)for i in range(len_Lk):for j in range(i+1, len_Lk):L1 = list(Lk[i])[:k-2]L2 = list(Lk[j])[:k-2]L1.sort()L2.sort()if L1 == L2:ret_list.append(Lk[i] | Lk[j])return ret_list# 调用Apriori算法L, support_data = apriori(dataset, min_support=0.5)# 打印结果print("频繁项集:", L)print("所有候选项集的支持度信息:", support_data) 

2.3 感知机

这个稍微复杂一些,返回的代码似乎有点问题,我用Python 3.9不能直接跑。
只要是格式化那部分%!s(MISSING)%!f(MISSING)%!((MISSING)self.weights, self.bias)%!d(MISSING)%!a(MISSING)nd_perception.predict([1, 1]))
代码如下:

# > Python实现感知机
# 感知机
import numpy as np# 定义激活函数
def sign(x):if x >= 0:return 1else:return -1# 定义感知机
class Perceptron(object):def __init__(self, input_num, activator):self.activator = activator# 权重向量初始化为0self.weights = [0.0 for _ in range(input_num)]# 偏置项初始化为0self.bias = 0.0def __str__(self):return 'weights\t:%!s(MISSING)\nbias\t:%!f(MISSING)\n' %!((MISSING)self.weights, self.bias)# 输入向量,计算感知机的输出def predict(self, input_vec):# 把input_vec[x1,x2,x3...]和weights[w1,w2,w3,...]打包在一起# 变成[(x1,w1),(x2,w2),(x3,w3),...]# 然后利用map函数计算[x1*w1, x2*w2, x3*w3]# 最后利用reduce求和return self.activator(np.dot(input_vec, self.weights) + self.bias)# 输入训练数据:一组向量、与每个向量对应的label;以及训练轮数,根据训练数据调整权重def train(self, input_vecs, labels, iteration, rate):for i in range(iteration):self._one_iteration(input_vecs, labels, rate)# 一次迭代,把所有的训练数据过一遍def _one_iteration(self, input_vecs, labels, rate):# 把输入和输出打包在一起,成为样本的列表[(input_vec, label), ...]# 而每个训练样本是(input_vec, label)samples = zip(input_vecs, labels)# 对每个样本,按照感知机规则更新权重for (input_vec, label) in samples:# 计算感知机在当前权重下的输出output = self.predict(input_vec)# 更新权重self._update_weights(input_vec, output, label, rate)# 按照感知机规则更新权重def _update_weights(self, input_vec, output, label, rate):# 把input_vec[x1,x2,x3,...]和weights[w1,w2,w3,...]打包在一起# 变成[(x1,w1),(x2,w2),(x3,w3),...]# 然后利用感知器规则更新权重delta = label - outputself.weights = list(map(lambda x_w: x_w[1] + rate * delta * x_w[0],zip(input_vec, self.weights)))# 更新biasself.bias += rate * deltadef f(x):return 1 if x > 0 else 0def get_training_dataset():# 构建训练数据# 输入向量列表input_vecs = [[1,1], [0,0], [1,0], [0,1]]# 期望的输出列表,注意要与输入一一对应# [1,1] -> 1, [0,0] -> 0, [1,0] -> 0, [0,1] -> 0labels = [1, 0, 0, 0]return input_vecs, labelsdef train_and_perceptron():# 创建感知器,输入参数个数为2(因为and是二元函数),激活函数为fp = Perceptron(2, f)# 训练,迭代10轮, 学习速率为0.1input_vecs, labels = get_training_dataset()p.train(input_vecs, labels, 10, 0.1)#返回训练好的感知器return pif __name__ == '__main__':# 训练and感知器and_perception = train_and_perceptron()# 打印训练获得的权重print(and_perception)# 测试print('1 and 1 = %!d(MISSING)' %!a(MISSING)nd_perception.predict([1, 1]))print('0 and 0 = %!d(MISSING)' %!a(MISSING)nd_perception.predict([0, 0]))print('1 and 0 = %!d(MISSING)' %!a(MISSING)nd_perception.predict([1, 0]))print('0 and 1 = %!d(MISSING)' %!a(MISSING)nd_perception.predict([0, 1]))

这些有点超出了我的认知,我问ChatGPTpython %!d 是什么意思,它说“%!!(MISSING)d 是Python中的格式化字符串,它表示将变量替换为其对应的十进制整数。 ”
怎么回答多了个!
image.png
接着用它提供的信息,问%!!(MISSING)d 怎么使用,它回复的信息似乎有点问题:

  • %!n(MISSING)umber应该是%!(MISSING)number
  • "%!d(MISSING)" %!(MISSING)10并不能直接跑,这是无效语法image.png

image.png
官网查了一下,也没有格式化+missing的相关资料,直接百度也没有找到。先姑且认为是一个bug吧。修改一下格式化部分,便可以正常跑了,改完具体代码如下:

# > Python实现感知机
# 感知机
import numpy as np# 定义激活函数
def sign(x):if x >= 0:return 1else:return -1# 定义感知机
class Perceptron(object):def __init__(self, input_num, activator):self.activator = activator# 权重向量初始化为0self.weights = [0.0 for _ in range(input_num)]# 偏置项初始化为0self.bias = 0.0def __str__(self):# return 'weights\t:%!s(MISSING)\nbias\t:%!f(MISSING)\n' %!((MISSING)self.weights, self.bias)return 'weights\t:%s\nbias\t:%f\n' % (self.weights, self.bias)# 输入向量,计算感知机的输出def predict(self, input_vec):  #input_vec相当于X# 把input_vec[x1,x2,x3...]和weights[w1,w2,w3,...]打包在一起# 变成[(x1,w1),(x2,w2),(x3,w3),...]# 然后利用map函数计算[x1*w1, x2*w2, x3*w3]# 最后利用reduce求和return self.activator(np.dot(input_vec, self.weights) + self.bias)# 输入训练数据:一组向量、与每个向量对应的label;以及训练轮数,根据训练数据调整权重def train(self, input_vecs, labels, iteration, rate):for i in range(iteration):self._one_iteration(input_vecs, labels, rate)# 一次迭代,把所有的训练数据过一遍def _one_iteration(self, input_vecs, labels, rate):# 把输入和输出打包在一起,成为样本的列表[(input_vec, label), ...]# 而每个训练样本是(input_vec, label)samples = zip(input_vecs, labels)# 对每个样本,按照感知机规则更新权重for (input_vec, label) in samples:# 计算感知机在当前权重下的输出output = self.predict(input_vec)# 更新权重self._update_weights(input_vec, output, label, rate)# 按照感知机规则更新权重def _update_weights(self, input_vec, output, label, rate):# 把input_vec[x1,x2,x3,...]和weights[w1,w2,w3,...]打包在一起# 变成[(x1,w1),(x2,w2),(x3,w3),...]# 然后利用感知器规则更新权重delta = label - output   #实际值-预测值self.weights = list(map(lambda x_w: x_w[1] + rate * delta * x_w[0],  #速率*(实际值-预测值)*x值zip(input_vec, self.weights)))# 更新biasself.bias += rate * deltadef f(x):return 1 if x > 0 else 0def get_training_dataset():"""input_vecs相当于X_trainlabels相当于y_train:return:"""# 构建训练数据# 输入向量列表input_vecs = [[1,1], [0,0], [1,0], [0,1]]# 期望的输出列表,注意要与输入一一对应# [1,1] -> 1, [0,0] -> 0, [1,0] -> 0, [0,1] -> 0labels = [1, 0, 0, 0]return input_vecs, labelsdef train_and_perceptron():# 创建感知器,输入参数个数为2(因为and是二元函数),激活函数为fp = Perceptron(2, f)# 训练,迭代10轮, 学习速率为0.1input_vecs, labels = get_training_dataset()p.train(input_vecs, labels, 10, 0.1)#返回训练好的感知器return pif __name__ == '__main__':# 训练and感知器and_perception = train_and_perceptron()# 打印训练获得的权重print(and_perception)# 测试# print('1 and 1 = %!d(MISSING)' %!(MISSING)and_perception.predict([1, 1]))# print('0 and 0 = %!d(MISSING)' %!(MISSING)and_perception.predict([0, 0]))# print('1 and 0 = %!d(MISSING)' %!(MISSING)and_perception.predict([1, 0]))# print('0 and 1 = %!d(MISSING)' %!(MISSING)and_perception.predict([0, 1]))print('1 and 1 = %d' % and_perception.predict([1, 1]))print('0 and 0 = %d' % and_perception.predict([0, 0]))print('1 and 0 = %d' % and_perception.predict([1, 0]))print('0 and 1 = %d' % and_perception.predict([0, 1]))

三、小结

不得不说,ChatGPT很给力!不然也不会那么火爆,对于未知的领域,我们经常会有各种各样的“傻”问题,或许也会有一些不好意思问导师或者专家,生怕问题太小白了,被“嫌弃”,而且脑子里无穷的问号,需要占用别人很长的时间才能够一一解答,通过ChatGPT可以解决我们类似的绝大多数比较小白的问题,帮助我们一定程度入门相关知识领域。

上面的描述,或许当过父母的会有更“痛”的领悟,小孩在4岁前后脑袋瓜里就会装这各种各样的奇思妙想,或许ChatGPT会更配,可以满足孩子各种各样的好奇心,当然,这只是一个设想,具体需要验证一下~~

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

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

相关文章

ChatBI- ChatGPT的垂直领域思考

声明&#xff1a;本文将从技术角度对比几款商用BI产品的AI辅助功能。鉴于个人的认知水平&#xff0c;所描述的内容&#xff0c;若有不妥&#xff0c;请斧正。 BI之痛 从事大数据工作十余年&#xff0c;近两年负责制造业BI工作&#xff0c;总结了一些痛点问题&#xff1a; 技术…

Cursor——ChatGPT的替代品【笔记】

Cursor——ChatGPT的替代品【笔记】 前言推荐Cursor——ChatGPT的替代品下载登录使用高级另外 最后 前言 2023-3-31 22:00:44 以下内容源自《笔记》 仅供学习交流使用 推荐 什么&#xff1f; 你还没用过 Cursor&#xff1f; 智能 AI 代码生成工具 Cursor 安装和使用介绍 C…

ChatGPT可以替代人类做哪些工作?

随着时代不断发展&#xff0c;人工智能技术正在日益发展&#xff0c;越来越多的人工智能技术正在改变人们的生活。其中&#xff0c;Chat GPT&#xff08;Generative Pre-trained Transformer&#xff09;也是一种新型的机器学习技术&#xff0c;可以替代人类做一些繁琐的工作。…

全网最详细中英文ChatGPT-GPT-4示例文档-从0到1快速入门多语种翻译应用场景——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

List item 从0到1快速入门多语种翻译应用场景 Introduce 简介setting 设置Prompt 提示Sample response 回复样本API request 接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例 其它资料下载 ChatGPT是目前最先进的AI聊天机器人&#xff0c;它能够理解图…

DeepSpeed ZeRO++:降低4倍网络通信,显著提高大模型及类ChatGPT模型训练效率

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;计算机视觉研究院 学习群&#xff5c;扫码在主页获取加入方式 计算机视觉研究院专栏 Column of Computer Vision Institute 大型AI模型正在改变数字世界。基于大型语言模型 (LLM) 的 Turing-NLG…

让你的类ChatGPT千亿大模型提速省钱15倍,微软开源 DeepSpeed-Chat

作者 | 微软 DeepSpeed 开源项目组 来源 | 开源社&#xff08;中文版授权开源社首发&#xff09; 概述 近日来&#xff0c;ChatGPT 及类似模型引发了人工智能&#xff08;AI&#xff09;领域的一场风潮。这场风潮对数字世界产生了革命性影响。ChatGPT 类模型具有惊人的泛用性&a…

ChatGPT和 dalle2 配合生成故事绘本

和 dalle2 配合生成故事绘本 在之前章节中&#xff0c;我们已经尝试过让 ChatGPT 来生成一些故事情节&#xff0c;不管是影视剧还是小说还是游戏都可以。这时候&#xff0c;自然而然的可以联想到&#xff1a;那我们可不可以一步到位&#xff0c;把 ChatGPT 编出来的故事情节&a…

科研工具-论文写作翻译软件优缺点介绍

当今&#xff0c;科研学习已经成为人们生活中不可或缺的一部分&#xff0c;而随着全球化的发展&#xff0c;跨语言沟通也变得越来越重要。翻译软件因此也变得越来越普及。针对科研学习中的翻译需求&#xff0c;目前市面上涌现了许多优秀的翻译软件&#xff0c;它们可以辅助我们…

DeepSpeed-Chat 打造类ChatGPT全流程 笔记二之监督指令微调

文章目录 系列文章0x0. 前言0x1. &#x1f415; Supervised finetuning (SFT) 教程翻译&#x1f3c3; 如何训练模型&#x1f3c3; 如何对SFT checkpoint进行评测?&#x1f481; 模型和数据☀️来自OPT-1.3B及其SFT变体&#xff08;使用不同微调数据&#xff09;的提示示例☀️…

chatpdf使用说明

传送门&#xff1a;https://www.chatpdf.com/ chatpdf是一个可以让你与PDF文件进行对话的工具&#xff0c;它可以帮助你快速提取PDF文件中的信息&#xff0c;例如手册、论文、合同、书籍等。 要使用chatpdf&#xff0c;你需要先访问它的网站&#xff0c;并点击“Upload PDF”…

又一巨头宣布入局AIGC,一口气开源数个模型,还道出了它的变现之道

金磊 发自 凹非寺量子位 | 公众号 QbitAI AIGC&#xff08;AI生成内容&#xff09;&#xff0c;这个概念在今年可以说是火得一塌糊涂。 例如Stable Diffusion&#xff0c;只要对它说一句话&#xff0c;“唰唰唰”地就能秒生成画作。 再如最近大火的ChatGPT&#xff0c;对答如流…

全面开放!Google Bard使用教程

一 前言 在2002.5.12举办的Google I/O发布会上&#xff0c;Google宣布从即日起将Bard全面开放&#xff0c;全球超过180个国家只要点击进入bard.google.com&#xff0c;无需等候就能使用。 Bard有哪些特点&#xff1f;通过与ChatGPT的对比&#xff0c;就可以很快地了解Bard&am…

【研究】CSDN 到底是怎么套壳 ChatGPT 的?稍微研究了一下提示词

昨天 CSDN 宣布推出自研的一款 AI 聊天助手“ChitGPT”&#xff0c;定位是“专门为开发者设计的大型语言模型&#xff0c;能解决例如代码生成(用 js 写一个冒泡排序)&#xff0c;代码错误追踪等问题”。 但是相信大家也知道了&#xff0c;只要问它“Who are you?”&#xff0…

Science:AI竞赛,学界正在输给业界

【编者按】人工智能&#xff08;AI&#xff09;正在向业界倾斜。相比于学界的前沿性研究&#xff0c;风靡当下的 AI 聊天机器人 ChatGPT、AI 艺术生成器 Midjourney&#xff0c;以及微软发布的新一代 AI 驱动搜索引擎 New Bing、谷歌发布 ChatGPT 竞品 Bard 和那些未来将要发布…

A Survey on Evaluation of Large Language Models

这是LLM相关的系列文章&#xff0c;针对《A Survey on Evaluation of Large Language Models》的翻译。 大型语言模型评价综述 摘要1 引言2 背景2.1 大语言模型2.2 AI模型评估 3 评估什么3.1 自然语言处理任务3.1.1 自然语言理解3.1.2 推理3.1.3 自然语言生成3.1.4 多语言任务…

深度长文|详解现象级ChatGPT发展历程、原理、技术架构详解和产业未来

来源&#xff1a;工业互联网研习社 作者&#xff1a;陈巍博士&#xff0c;曾担任华为系自然语言处理&#xff08;NLP&#xff09;企业的首席科学家&#xff0c;文章首发于「先进AI技术深入解读」 工业互联网浪潮来袭&#xff0c;你准备好了吗&#xff1f; 每一代GPT模型的参数量…

一个 ChatGPT,还能养活多少 AI 新老板?

内容一览&#xff1a;当下&#xff0c;国内 AI 创业十分火爆&#xff0c;截止目前加入这个阵营的已有贾扬清等多位明星创业者。然而&#xff0c;这次 ChatGPT 的出现能否打破国内 AI 公司缺少规模化落地的创业「魔咒」&#xff1f; 本文首发自 HyperAI超神经微信公众号~ 刚刚过…

爆火的 ChatGPT 太强了!写代码、改 bug,网友:可取代 Stack Overflow 了

OpenAI 新上线的 ChatGPT 可谓是火爆出圈&#xff0c;这个对话模型可以回答后续问题&#xff0c;承认错误&#xff0c;挑战不正确的前提&#xff0c;还能帮你修改代码中的 bug…… 只要和它聊上几句&#xff0c;一会儿功夫它就能把问题给你解决了。例如用户要求&#xff1a;「C…

you-get: 用户账户异常、请重新登录

刚开始还能下载的&#xff0c;后面就不行了&#xff0c;一直出现这个异常。不知道什么原因&#xff1f;无法解决&#xff0c;求助各位&#xff01;

万字干货!ChatGPT 从零完全上手实操指南!(一)

阅读提示&#xff1a; 1.文章大约10000多字&#xff0c;文章内容硬核&#xff0c;需要你集中注意力&#xff0c;不建议碎片化阅读&#xff0c;请预留出30分钟的整块时间。 2.本文是一套完整的知识体系&#xff0c;文章不会上来就直接扔你一个解决方案&#xff0c;而是会从『是…