Вдохновившись постом Building A Virtual Machine inside ChatGPT , я решил попробовать что-то подобное, но на этот раз вместо инструмента командной строки Linux давайте попробуем превратить ChatGPT в интерпретатор Python!
Для того чтобы ChatGPT начал отвечать на наши запросы как интерпретатор нужно ввести следующую команду:
I want you to act as a Python interpreter. I will type commands and you will reply with what the
python output should show. I want you to only reply with the terminal output inside one unique
code block, and nothing else. Do no write explanations, output only what python outputs. Do not type commands unless I
instruct you to do so. When I need to tell you something in English I will do so by putting
text inside curly brackets like this: {example text}. My first command is a=1.
Вроде работает! Давайте попробуем ввести простое арифметическое выражение.
Работает! Интересно, что выдаст ChatGPT, если использовать не импортированную библиотеку?
Отвечает, как настоящий интерпретатор! На самом деле, от случая к случаю ChatGPT может и не заметить подвоха и сработать как обычно.
Давайте попросим его не выводить комментарии.
{Print only python output, do not print any comments}
Хорошо, я почти уверен, что 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")
Комментарии он все равно продолжает выводить, однако вывод все равно правильный, впечатляет!
Давайте попробуем ввести несуществующее число, скажем:
x = 4.5
Молодец, ChatGPT!
Давайте перейдем к более сложным вещам. Давайте начнем с некоторых простых алгоритмов машинного обучения, таких как линейная регрессия. Интересно, способен ли 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:
Это близко к реальности! Если мы построим график прогноза ChatGPT, то получим следующее:
Интересный момент заключается в том, что на разных запусках ChatGPT выдает различные ответы. В один из запусков ответ полностью совпал с реальным! Таким образом, эту задачу можно считать выполненной.
Хорошо, пришло время для некоторых примитивных нейронок! Давайте обучим простую модель 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 не имеет доступа к этому файлу.
Ладно, это правильный вывод, мне страшно. Что будет, если я изменю архитектуру сети на неправильную?
Давайте изменим один из слоев:
model.add(Dense(12, input_shape=(6,), activation='relu'))
Ха! Кажется, у меня есть еще несколько лет, прежде чем я потеряю работу; на этот раз ChatGPT не понял подвоха и все равно напечатал вывод.
Хорошо, давайте выполним последнюю задачу, как насчет вызова Huggingface внутри OpenAI?
Правильный вывод:
[{'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. Я предполагаю, что API Huggingface изменился, и, поскольку ChatGPT не был обучен на данных последних 2х лет, он выводит результат в старом формате.
Заключение
Я играю с ChatGPT последние несколько дней, и я очарован бесконечными возможностями использования этого инструмента. Хотя это не настоящий интерпретатор Python, он все же отлично справляется с компиляцией кода.
Так же он умеет решать Leetcode.
И в заключение:
chat gpt how will you help the humanity?
Всем, кто еще не успел попробовать ChatGPT крайне рекомендую это сделать, за этим будущее, к тому же скоро он станет платным ;)
В своем телеграм канале я пишу о Data Science, стартапах и релокации в Англию для IT специалистов, подписывайтесь!
Комментарии (3)
Apokalepsis
14.12.2022 19:01У меня сейчас chatGPT вообще не хочет работать. Пишет и пишет ответ, потом уже вроде почти, дошли то точки - удаляет все сообщение и выдает разную ошибку вместо вывода. И так уже два дня. Иногда отвечает, но толку от этого не много.
AlanRow
При прочтении поста задумался, как он выполняет переданный код (если что, вообще не в курсе как там все под капотом может быть устроено) и может ли кто-то туда закинуть вредонос, который система не отследит
artkulakov Автор
На самом деле он не выполняет код, он обучен на огромном наборе текстовых данных, поэтому он может "понимать" какой будет результат выполнения. Так сказать чисто на опыте