Pull to refresh

Создаем интерпретатор Python на основе ChatGPT

Reading time5 min
Views9.8K
Original author: Artem Kulakov

Вдохновившись постом 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 специалистов, подписывайтесь!

Tags:
Hubs:
+7
Comments5

Articles