Неделю назад, 17 мая, Яндекс представил свою языковую модель — YandexGPT. Поскольку продукты OpenAI нельзя использовать в России без обходов вроде VPN, на YaGPT возложены большие надежды как на продукт, который закроет боль этих ограничений.
В этой статье мы сравниваем возможности YaGPT и ChatGPT, чтобы проверить, стал ли продукт Яндекса полноценной заменой своего прародителя.
Поскольку YaGPT использует GPT-3 в качестве модели, мы сравнили его с ботом, подключенным к GPT-3 OpenAI.
Языковые модели решали такие задачи:
- Написать код на Python.
- Найти ошибку в коде на Python.
- Решить задачку по Java.
- Перевести текст с множеством технических аспектов с английского на русский язык.
- Написать песенку про программистов. 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)
Эта программа будет работать следующим образом:
- Принимает введенные слова от пользователя.
- Разделяет введенный текст на слова и сохраняет их в список.
- Ищет самое длинное слово в списке.
- Создает словарь, где ключом является слово, а значением — количество его вхождений в текст.
- Ищет наиболее встречающееся слово в словаре.
- Выводит самое длинное слово и наиболее встречающееся слово на экран.
Найти ошибку в коде на 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», который содержит числа, и поиск минимального и максимального четного числа, больших или равных нулю. Но есть несколько проблем в данном коде:
- Переменные `mi` и `ma` инициализированы некорректно с неадекватными значениями. Несмотря на то, что в задании указано, что используемые значения в файле не превышают 1000000, переменные инициализированы значением, которое выходит за пределы этого диапазона.
- Неверно управляется счетчик. В текущей реализации все числа, проходящие проверку, увеличивают значение переменной counter, даже если не были использованы для обновления значений `mi` или `ma`.
- Если во входном файле не было четных чисел больших или равных нулю, не будет выведено никакого результата в выходной файл.
Предлагаемый вариант исправления ошибок:
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 предложенных. Неясно, связано ли это с тем, что нейросеть только-только стала доступной всем желающим. Возможно, в будущем она научится справляться и с переводами, и с отловом багов так же непринуждённо, как с написанием кода.