YandexGPT против ChatGPT: сравнение возможностей

Аватарка пользователя Рафаил Агазода

В этой статье мы сравниваем возможности YandexGPT и ChatGPT, чтобы проверить, стал ли продукт Яндекса полноценной заменой своего прародителя.

Неделю назад, 17 мая, Яндекс представил свою языковую модель — YandexGPT. Поскольку продукты OpenAI нельзя использовать в России без обходов вроде VPN, на YaGPT возложены большие надежды как на продукт, который закроет боль этих ограничений.

В этой статье мы сравниваем возможности YaGPT и ChatGPT, чтобы проверить, стал ли продукт Яндекса полноценной заменой своего прародителя.

Поскольку YaGPT использует GPT-3 в качестве модели, мы сравнили его с ботом, подключенным к GPT-3 OpenAI.

YandexGPT против ChatGPT: сравнение возможностей 1

Языковые модели решали такие задачи:

  1. Написать код на Python.
  2. Найти ошибку в коде на Python.
  3. Решить задачку по Java.
  4. Перевести текст с множеством технических аспектов с английского на русский язык.
  5. Написать песенку про программистов. Just for fun.

TL;DR: YandexGPT справилась не со всеми задачами.

Написать код на Python

Промпт: “Напиши программу, которая принимает текст и выводит два слова: наиболее встречаемое и самое длинное. Программу надо написать на Python”.

YandexGPT

Вот пример программы на Python, которая принимает строку и выводит наиболее часто встречаемое слово и слово с наибольшей длиной:

			python
text = input("Введите текст: ")

# Создаем словарь, где ключи - это слова, а значения - количество вхождений
word_counts = {}
for word in text.split():
    if word.lower() not in word_counts:
        word_counts[word.lower()] = 1
    else:
        word_counts[word.lower()] += 1

# Выводим два самых часто встречаемых слова
most_common_word = max(word_counts, key=word_counts.get)
second_most_common_word = word_counts.pop(most_common_word, None)
print("Наиболее часто встречаемое: ", most_common_word)
if second_most_common_word:
    print("Второе наиболее часто встречаемое:", second_most_common_word)
else:
    print("В тексте нет второго наиболее часто встречаемого слова")

# Находим два слова с наибольшей длиной
longest_word_length = max([len(word) for word in word_counts if word.isalpha()])
second_longest_word = [word for word, count in word_counts.items() if count == longest_word_length]
if len(second_longest_word):
    print("Самое длинное слово:", second_longest_word[0])
else:
    print("Нет слов с самой длинной длиной")
		

ChatGPT

Конечно! Следующий код будет принимать слова через ввод пользователя, затем находит самое длинное и наиболее встречающееся слова и выводит их на экран:

			text = input("Введите текст: ")  # принимаем слова от пользователя

words = text.split()  # разделяем введенный текст на слова

# находим самое длинное слово
longest_word = max(words, key=len)

# создаем словарь, где ключом будет слово, а значением - количество его вхождений
word_count = {}
for word in words:
    if word not in word_count:
        word_count[word] = 1
    else:
        word_count[word] += 1

# находим наиболее часто встречающееся слово
most_common_word = max(word_count, key=word_count.get)

print("Самое длинное слово:", longest_word)
print("Наиболее встречающееся слово:", most_common_word)
		

Эта программа будет работать следующим образом:

  1. Принимает введенные слова от пользователя.
  2. Разделяет введенный текст на слова и сохраняет их в список.
  3. Ищет самое длинное слово в списке.
  4. Создает словарь, где ключом является слово, а значением – количество его вхождений в текст.
  5. Ищет наиболее встречающееся слово в словаре.
  6. Выводит самое длинное слово и наиболее встречающееся слово на экран.
Чей код на Python лучше?
YandexGPT
ChatGPT

Найти ошибку в коде на Python

Промпт: “Представь, что ты профессиональный QA. Пожалуйста, найди ошибку в этом коде на Python”.

Проблема была найдена на Stack Overflow.

			with open ("input.txt") as file:
    counter=0 
    mi=100001 
    ma=0
    for line in file:
        num=int(line)
        if num%2==0 and num>=0:
            if num<mi:
                mi=num 
                counter+=1
            if num>ma:
                ma=num 
                counter+=1
            else:
                counter+=1
    if counter==0:
        print(0, file=open("output.txt", "w"))
    else:
         print(mi, ma, file=open("output.txt", "w"))
		

YandexGPT

			Простите, этим языком я еще не владею, но все впереди.
		

ChatGPT

В данном коде реализован обход файла “input.txt”, который содержит числа, и поиск минимального и максимального четного числа, больших или равных нулю. Но есть несколько проблем в данном коде:

  1. Переменные `mi` и `ma` инициализированы некорректно с неадекватными значениями. Несмотря на то, что в задании указано, что используемые значения в файле не превышают 1000000, переменные инициализированы значением, которое выходит за пределы этого диапазона.
  2. Неверно управляется счетчик. В текущей реализации все числа, проходящие проверку, увеличивают значение переменной counter, даже если не были использованы для обновления значений `mi` или `ma`.
  3. Если во входном файле не было четных чисел больших или равных нулю, не будет выведено никакого результата в выходной файл.

Предлагаемый вариант исправления ошибок:

			mi, ma = None, None  # инициализируем переменные значением None

with open ("input.txt") as file:
    for line in file:
        num = int(line.strip())
        if num % 2 == 0 and num >= 0:
            if mi is None or num < mi:
                mi = num 
            if ma is None or num > ma:
                ma = num
               
if mi is None or ma is None:  # проверка наличия чисел в файле
    with open("output.txt", "w") as file:
        file.write(str(0))
else:
    with open("output.txt", "w") as file:
        file.write(str(mi) + ' ' + str(ma))
		

В данном исправленном варианте используется инициализация mi и ma значением None, что позволяет проверить было ли обработано хотя бы одно число. В то время как в прошлой версии было использовано неадекватное значение для инициализации переменных.

Так же управление счетчиком и обновлениями переменных mi и ma согласованы, и не учитывают числа не удовлетворяющие условиям задания.

Решить задачку на Java

Промпт: “Напиши код на Java. В классе Solution реализуй метод printNumbers(), который выводит числа от 1 до 10 включительно с паузой между выводом каждого числа – 1,3 миллисекунды. В этом тебе поможет метод sleep(long, int) класса Thread”.

Задача взята здесь.

YandexGPT

Код на Java, который выводит числа от 1 до 10 с паузой 1,3 мс между каждым числом:

			```java
import java.util.Random;

public class Solution {
    public static void main(String[] args) throws InterruptedException {
        for (int i = 1; i <= 10; i++) {
            System.out.print(i);
            Thread.sleep(1300); // пауза for 1300 ms
        }
    }
}
```
		

Метод `sleep()` используется для задержки выполнения программы на определенное количество миллисекунд. В данном случае, задержка 1,3 мс задается вторым параметром метода `Thread.sleep()`, где 1300 – это количество миллисекунд, которое мы хотим подождать.

ChatGPT

Конечно, следующий код решает поставленную задачу:

			```java
public class Solution {
    public static void printNumbers() {
        for (int i = 1; i <= 10; i++) {
            System.out.println(i);
            try {
                Thread.sleep(1, 300000); // 1 секунда = 1000 миллисекунд
            } catch (InterruptedException e) {
                // ловим исключение
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        printNumbers();
    }
}
```
		

В данном коде используется метод Thread.sleep(long, int), который приостанавливает выполнение текущего потока на указанное количество времени (1,3 миллисекунды). Цикл for перебирает числа от 1 до 10 включительно, выводит их на экран, а также вызывает метод Thread.sleep для паузы между каждой итерацией.

В методе main вызываем метод printNumbers для запуска программы и выполнения требуемых действий.

Кто решил задачку лучше?
YandexGPT
ChatGPT

Перевести текст про программирование на русский язык

Промпт: “Переведи этот текст на русский язык. Текст для перевода начнется со следующего абзаца. Он носит технический характер, речь в нём идёт о собеседовании на должность Software Engineer”.

Текст для перевод взят из треда на LeetCode.

			Codility Round
2 Questions - 60 Minutes
Dificulty - Medium to Hard Leetcode Problems.

1st F2F Round : - 75 Minutes
2 DSA Problems - (Tree and Graph)
Questions on Web tech stack (Angular, JS, C++ and C#)
Some Scenerio based questions. (Web Accessibilty etc.)

2nd F2F Round : 45 Minutes
1 DSA Question - LinkedList
Questions on C#, .Net and Angular
Some behvioural questions.

3rd F2F Round : 60 Minutes
1 LLD Question - Design Parking System
Some Questions about Architecture

4th F2F Round : 50 Minutes (Hiring Manager Round)
Questions around team and work, SDE 2 roles and responsibilty.
A lot of behavioural questions.
Questions on HLD (Scalabale and efficient systems)
		

YandexGPT

Попросту не справилась с задачей. Это довольно странно, потому что Алиса прямо заявляет, что работает в основном с текстами.

YandexGPT против ChatGPT: сравнение возможностей 2
			Простите, но на это мне ответить нечего.
		

ChatGPT

			Раунд Codility
2 Вопроса - 60 минут
Сложность - Средние до тяжелых проблем Leetcode.

1-ый F2F Раунд: - 75 минут
2 задачи DSA - (Дерево и граф)
Вопросы по веб-технологическому стеку (Angular, JS, C++ и C#)
Некоторые сценариевые вопросы. (Доступность веба и т. Д.)

2-й F2F Раунд: 45 минут
1 вопрос DSA - LinkedList
Вопросы по C#, .Net и Angular
Некоторые поведенческие вопросы.

3-й F2F Раунд: 60 минут
1 вопрос LLD - Дизайн системы парковки
Некоторые вопросы о архитектуре

4-й F2F Раунд: 50 минут (Раунд hiring manager)
Вопросы вокруг команды и работы, ролей и обязанностей SDE 2.
Много поведенческих вопросов.
Вопросы на HLD (масштабируемые и эффективные системы)
		

Песенка про программистов

Промпт: “Напиши песенку про программистов на четыре куплета”. Эту задачу предложили нейросетям, чтобы дать некоторую фору YandexGPT — она позиционирует себя как автор для текстов.

YandexGPT

Языковая модель написала большую песню, но куплетов в ней всего три.

			(Куплет 1)  
Мы программисты, мы не спим.  
Днем и ночью мы в сети.  
Создаем программы, сайты,  
Чтобы мир был лучше всех!  

(Припев)  
Программисты, программисты!  
Вы - наша гордость и сила,  
Вы создаете будущее,  
И мы вас очень любим!  

(Куплет 2)  
В мире есть много профессий,  
Но мы - особая каста,  
Кто создает программы,  
Чтоб было все на свете классно!  

(Припев)
Программисты, программисты!
Вы - наша гордость и сила.
Вы создаёте будущее,
И мы вас очень любим!

(Куплет 3)  
Компьютеры, ноутбуки,  
Процессоры и видеокарты,  
Все это - ваши творения,  
Ваши руки и ваш ум!  

(Припев) 
Программисты, программисты! 
Вы - наша гордость и сила! 
Вы создаёте будущее! 
И мы Вас очень любим!
		

ChatGPT

Куплетов в песне действительно четыре, хоть и без припевов.

			Программисты, вот наша команда  
Кодим целый день, души своей отдаем  
Ошибки и баги исправляем  
Создаем сайты, программы, приложения мы  

Работаем в IDE и пишем на Python  
JavaScript, Java и еще многое другое  
Все, что угодно, мы можем сделать  
Программисты - мы супер! 
 
Верстаем страницы, создаем базы данных  
Системы управления содержимым и сервера  
Нас называют гиками, пиратами и мастерами  
Но мы просто любим то, что делаем мы 
 
И если вы когда-нибудь нуждаетесь  
В программисте, который умеет свой код писать  
То мы всегда будем готовы прийти на помощь  
Программисты - мы всегда рядом, всегда рядом!
		
Чья песенка лучше?
YandexGPT
ChatGPT
***

В конечном итоге, YaGPT справилась только с 3 задачами из 5 предложенных. Неясно, связано ли это с тем, что нейросеть только-только стала доступной всем желающим. Возможно, в будущем она научится справляться и с переводами, и с отловом багов так же непринуждённо, как с написанием кода.

Нейронные сети
Искусственный интеллект
Яндекс
OpenAI
21037