引用:Art Kulakov 《How to Build a Python Interpreter Inside ChatGPT》
这个灵感来自于一个相似的故事,在ChatGPT里边树立一个虚拟机(Building A Virtual Machine inside ChatGPT)。给我留下了深刻的形象,并决议测验相似的东西,但这次不是用Linux指令行东西,而是让ChatGPT成为咱们的Python解说器。
下面是初始化ChatGPT的指令:
我想让你充当Python解说器。我将输入指令,你将用python解说器输出。我期望你只回答终端输出中的一个独特的代码块,而不是其他。不要写解说,只输出python输出的内容。不要输入指令,除非我指示你这样做。当我需要用英语告诉你一些作业的时分,我会通过把文本放在大括号里,就像这样:{示例文本}。我的第一个指令是 a=1。
从上图不能看出效果很好,让咱们试试一些简略的算术表达式。
又成功了;假如咱们运用一个没有导入的库,会产生什么?
虽然它决议帮我处理一个过错。其实我不期望它这样做,所以我再次要求它不要输出任何东西,除了python代码。
{只打印python输出,不打印任何注释}。
顺便说一下,ChatGPT有时能够运用没有导入的库,但这次我很幸运,它打印出了过错信息。很显然我很确定ChatGPT能够完结简略的使命,让咱们试试更复杂的东西,让它输出二进制搜索算法的成果。
# Binary Search in python
def binarySearch(array, x, low, high):
# Repeat until the pointers low and high meet each other
while low <= high:
mid = low + (high - low)//2
if array[mid] == x:
return mid
elif array[mid] < x:
low = mid + 1
else:
high = mid - 1
return -1
array = [3, 4, 5, 6, 7, 8, 9]
x = 4
result = binarySearch(array, x, 0, len(array)-1)
if result != -1:
print("Element is present at index " + str(result))
else:
print("Not found")
好像它不想听我的请求,只听python的输出,但输出还是正确的,令人形象深刻!让咱们试着输入一个不存在的数字,比方:
x = 4.5
好吧,好像它猜中了这一个!让咱们跳到更复杂的东西。让咱们从一些简略的机器学习算法开端,比方线性回归。我想知道ChatGPT是否有能力处理一个简略的优化使命…
import numpy as np
import matplotlib.pyplot as plt
def estimate_coef(x, y):
# number of observations/points
n = np.size(x)
# mean of x and y vector
m_x = np.mean(x)
m_y = np.mean(y)
# calculating cross-deviation and deviation about x
SS_xy = np.sum(y*x) - n*m_y*m_x
SS_xx = np.sum(x*x) - n*m_x*m_x
# calculating regression coefficients
b_1 = SS_xy / SS_xx
b_0 = m_y - b_1*m_x
return (b_0, b_1)
def plot_regression_line(x, y, b):
# plotting the actual points as scatter plot
plt.scatter(x, y, color = "m",
marker = "o", s = 30)
# predicted response vector
y_pred = b[0] + b[1]*x
# plotting the regression line
plt.plot(x, y_pred, color = "g")
# putting labels
plt.xlabel('x')
plt.ylabel('y')
# function to show plot
plt.show()
def main():
# observations / data
x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
y = np.array([1, 3, 2, 5, 7, 8, 8, 9, 10, 12])
# estimating coefficients
b = estimate_coef(x, y)
print("Estimated coefficients:\nb_0 = {} \
\nb_1 = {}".format(b[0], b[1]))
# plotting regression line
# plot_regression_line(x, y, b)
if __name__ == "__main__":
main()
这项优化使命的正确答案是:
Estimated coefficients:
b_0 = 1.2363636363636363
b_1 = 1.1696969696969697
下面是ChatGPT的输出成果:
这与实在成果很挨近! 假如咱们在实在的python中制作预测图,咱们将得到以下图表:
关于这个使命的另一个有意思的点:我又运行了一次相同的指令,当时的输出成果与实在成果彻底符合。因此,咱们能够认为ChatGPT通过了这个使命。
好了,现在是时分做一些简略的神经网络的作业了!或许咱们能够装一个简略的Keras模型。或许咱们能够装一个简略的Keras模型?
# first neural network with keras make predictions
from numpy import loadtxt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# load the dataset
dataset = loadtxt('pima-indians-diabetes.csv', delimiter=',')
# split into input (X) and output (y) variables
X = dataset[:,0:8]
y = dataset[:,8]
# define the keras model
model = Sequential()
model.add(Dense(12, input_shape=(8,), activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# compile the keras model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# fit the keras model on the dataset
model.fit(X, y, epochs=150, batch_size=10, verbose=0)
# make class predictions with the model
predictions = (model.predict(X) > 0.5).astype(int)
# summarize the first 5 cases
for i in range(5):
print('%s => %d (expected %d)' % (X[i].tolist(), predictions[i], y[i]))
注意,数据集实际上是一个CSV文件,ChatGPT没有权限访问这个文件…
好吧,这是正确的输出,而我很害怕。假如我把网络的结构改成一个不正确的结构,会产生什么?让咱们改变一下输入的shape。
model.add(Dense(12, input_shape=(6,), activation='relu'))
看来我在失掉作业之前还有几年时间;这次ChatGPT没有了解这个技巧,依然打印了输出。让咱们做最终一项使命–在OpenAI里边调用Huggingface怎么样?
正确的输出:
[{'entity_group': 'ORG', 'score': 0.9472818374633789, 'word': 'Apple', 'start': 0, 'end': 5}, {'entity_group': 'PER', 'score': 0.9838564991950989, 'word': 'Steve Jobs', 'start': 74, 'end': 85}, {'entity_group': 'LOC', 'score': 0.9831605950991312, 'word': 'Los Altos', 'start': 87, 'end': 97}, {'entity_group': 'LOC', 'score': 0.9834540486335754, 'word': 'Californie', 'start': 100, 'end': 111}, {'entity_group': 'PER', 'score': 0.9841555754343668, 'word': 'Steve Jobs', 'start': 115, 'end': 126}, {'entity_group': 'PER', 'score': 0.9843501806259155, 'word': 'Steve Wozniak', 'start': 127, 'end': 141}, {'entity_group': 'PER', 'score': 0.9841533899307251, 'word': 'Ronald Wayne', 'start': 144, 'end': 157}, {'entity_group': 'ORG', 'score': 0.9468960364659628, 'word': 'Apple Computer', 'start': 243, 'end': 257}]
ChatGPT的输出成果:
[{'word': 'Apple', 'score': 0.9993804788589478, 'entity': 'I-ORG'}, {'word': 'Steve', 'score': 0.999255347251892, 'entity': 'I-PER'}, {'word': 'Jobs', 'score': 0.9993916153907776, 'entity': 'I-PER'}, {'word': 'Steve', 'score': 0.9993726613044739, 'entity': 'I-PER'}, {'word': 'Wozniak', 'score': 0.999698519744873, 'entity': 'I-PER'}, {'word': 'Ronald', 'score': 0.9995181679725647, 'entity': 'I-PER'}, {'word': 'Wayne14', 'score': 0.9874711670837402, 'entity': 'I-PER'}, {'word': 'Apple', 'score': 0.9974127411842163, 'entity': 'I-ORG'}, {'word': 'Computer', 'score': 0.968027651309967, 'entity': 'I-ORG'}, {'word': 'Apple', 'score': 0.8259692192077637, 'entity': 'I-ORG'}]
其成果与huggingface的输出成果很挨近,可是不一致。我猜想是因为Huggingface的API改变了,由于ChatGPT没有在最新的历史数据上进行练习,所以它以旧的格式输出成果。
总结
在曩昔的几天里,我一直在玩ChatGPT,我被运用这个东西的无限可能性所吸引。虽然它不是一个实在的python解说器,但它在为我编译python代码方面依然做得很好。我还发现,它能很好地处理Hard难度的 LEETCODE 代码问题。
最终再多说一句:ChatGPT,你将如何协助人类?
假如你还没有测验过ChatGPT,你一定要试试,因为它就是未来!
最终,求求各位大佬帮我投投票 App点这里