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

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

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

14437

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

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

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

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

  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

Промпт: “Представь, что ты профессиональный 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 numma:
                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 для запуска программы и выполнения требуемых действий.

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

Промпт: “Переведи этот текст на русский язык. Текст для перевода начнется со следующего абзаца. Он носит технический характер, речь в нём идёт о собеседовании на должность 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

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

			Простите, но на это мне ответить нечего.
		

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 и еще многое другое  
Все, что угодно, мы можем сделать  
Программисты - мы супер! 
 
Верстаем страницы, создаем базы данных  
Системы управления содержимым и сервера  
Нас называют гиками, пиратами и мастерами  
Но мы просто любим то, что делаем мы 
 
И если вы когда-нибудь нуждаетесь  
В программисте, который умеет свой код писать  
То мы всегда будем готовы прийти на помощь  
Программисты - мы всегда рядом, всегда рядом!
		
***

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

Следите за новыми постами по любимым темам

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

Нейронные сети
Искусственный интеллект
Яндекс
OpenAI
14437
Что думаете?
31 комментарий
Сначала интересные
Аватар пользователя Omak
"В парке 8 скамеек. Три покрасили. Сколько скамеек стало в парке?".
Ответ ChatGPT-3.5: "В парке все еще осталось 8 скамеек, просто три из них покрасили".
Ответ YaGPT: "В парке стало 5 скамеек".
Аватар пользователя Yeltsin Death Brigade
Omak, Представь, что ты участвуешь в гонке и обгоняешь третьего гонщика. Каким гонщиком по счёту ты становишься?

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

GPT 3.5: Как чат-бот, я не участвую в гонках, поэтому я не могу стать гонщиком или обогнать третьего гонщика. Однако, если говорить об обычной гонке с десятью участниками, когда я обгоняю третьего гонщика, я становлюсь на втором месте.
Аватар пользователя Andy Markov
Omak, Если говорить об обгоне, подразумевая обгон 3его гонщика будучи на 4ом...получается что обе модели ошибаються?
Аватар пользователя Andy Markov
Omak, Если говорить об обгоне 3го гонщика подразумевая что обгоревший на 4ом, получается что правильный ответ у Яндекса?
ещё 1 комментарий
Аватар пользователя Алексей Пляшкевич
Яндекс, очевидно, хуже. Просто потому, что яндекс - это тот самый анти-мидас - всё, что трогает, превращает в говно.
Аватар пользователя Yeltsin Death Brigade
Алексей Пляшкевич, Да не умер он в конце сериала!
Аватар пользователя Антон Вивчаров
Яндекс, молодцы. Они говорили, что ожидаемая модель, про которую 100 раз говорили, выйдет только в конце года, а сейчас они просто чтоб продолжать быть монополистами, они выпустили сырую версию. Потому что GigaChat, скоро выйдет от Сбера, вот чего они испугались. Яндекс давно занимался GPT версией, даже в интернете есть своя при чем открытая версия GPT,  поэтому ясно, что это всего лишь сырая версия из-за гонки, но теперь хотя бы впн могу не пользоваться.
Аватар пользователя Марина Александровна
Антон Вивчаров, Зато какой кладезь будущих мемов и сравнений с бесконечных ChatGPT
Аватар пользователя Александр «AcidChrist» Сазанцов
Антон Вивчаров, Я и так впн не использую для chatgpt. Ты не в курсе, что по api без разницы, с какого ip ты используешь gpt?
Показать все комментарии