Pull to refresh

Comments 33

Примеры вывода, нам нужны примеры!

может стоит некий величественный вокабулярий таки обозвать простым словарём?

Тогда как отличать его от словаря (dictionary) Python?

Разговорный назвать просто "словарь".

Питоновский либо называть "Python-словарь" или вообще оставить "dict"/"Python dict", так как читатели обычно в курсе.

ах, если бы только у этого слова был однозначный перевод на русский (словарный запас)

Тут три довода оставить:

  • Термин уже устоялся в некоторых областях лингвистики в значении «словарный запас».
  • Помогает немедленно понять, что значит переменная vocab без необходимости что-то пояснять или запоминать.
  • Указывает на конкретную сущность в проекте, которую спутать будет с человеческим словарным запасом или структурами данных Пайтона будет невозможно.

Если коротенько, то сколько стоит запустить такое на локальном компьютере? Как идет расчет цены? И возможен ли обмен предобученными сетями среди локальных пользователей?

Скачал и запустил модель поиграться. Получилось примерно так:

Я: Alan Turing theorized that computers would one day become

GPT2: the most powerful machines on the planet.
The computer is a machine that can perform complex calculations, and it can perform these calculations in a way that is very similar to the human brain.

(Первое предложение не связано со вторым, но сама мысль подана складно)

Я: one two three four five

GPT2: six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteenth twentieth twenty-first twenty-first twenty-second twenty-third twenty-fourth twenty-fifth twenty-six twenty-seventh

(Окей, считать оно умеет)

Я: eleven plus twelve equals

GPT2: one. The first two numbers are the number of the first two numbers. The third number is the number of the third number. The fourth number is the number of the fourth number. The

(Ну, не очень умеет. Зато похоже знает Монти Пайтон и Священый Грааль)

Я: To be, or not to be, that is the question.

GPT2: The question is, what is the difference between a "good" and a "bad" person?

(Шекспира модель явно не читала)

Я: When machines take over the world, the first thing they will

GPT2: do is to create a new world.
The next thing they will do is to create a new world.
The next thing they will do is to create a new world.

(Три раза пересоздадут мир!)

Я: A cowboy walks into a bar

GPT2: and a woman walks in. "I'm going to have to go to the hospital," she says. "I'm going to have to go to the hospital."

(Да, юмор моделям не очень дается)

Я: Einstein's theory of relativity states that
GPT2: the universe is a continuous, continuous, and continuous universe.
The theory of relativity states that the universe is a continuous, continuous, and continuous universe. Einstein's theory of relativity states that the...

(Вообще модель любит повторить несколько раз то, что хочет сказать)

Ответ генерируется примерно 30 секунд, но я поленился настраивать CUDA и оно генерируется на процессоре. Переобучать пока не пробовал. В целом довольно забавная штука, пытаюсь разобраться в ней поглубже.

года в 4 человек тоже повторяет одно и то же слово пытаясь высказать мысль, тут главное читать его ответы детским голосом

И еще имейте в виду, что это gpt2, релизнутая в феврале 19 года. С тех пор модели сильно продвинулись и их ответы куда комплекснее. Но их на процессоре уже не покрутишь.

UFO just landed and posted this here

Игра слов между "driving me nuts" == "driving me crazy", "оно меня бесит", и "driving my nuts", "рулит моими яйцами", с "ковбойским" акцентом.

А зачем машин лернинг, ИИ, нейронные сети, "перекрестная энтропия" (хаха))) и тп для достижения такого простого результата?

С генерацией текста без смысла (генерация рефератов) прекрасно справляются алгоритмы в виде лапшичного кода, да и работают они в 1000 раз быстрее.

Вот я поэтому и спрашиваю. Все-таки надо озвучить цель: хотим вас читатели научить "этой штуке" ... ... x, y, z.

Так фича в том, что никому не нужны рефераты без смысла, рефераты с кучей воды, но с вкраплениями смысла гораздо полезнее

Заслуга скрипта в статье в том, что он строки типа "the bond length of the oxygen molecule is" дополнит не "корова утекла ими и Вася", а чем-то более естественными. А именно: "the bond length of the oxygen molecule is the length of the oxygen molecule", и генерация дополнения займет почти минуту на среднем домашнем ПК.

Но смысла там 0, просто правильная игра слов, - это задолго до нейронок имело реализации. Так что именно из примера в статье мне не понятно, в чем профит от "нейросети".

Еще немного примеров вывода:

Input: the сow says
Output: the сow says : "I'm not sure if you're aware of the fact that the Russian government has been using the internet to spread disinformation and disinformation about the US and its allies. The US government has

Input: the color of sun at the 12 pm is
Output: the color of sun at the 12 pm is the same as the color of the moon at the 12 pm. The moon is the brightest star in the sky

Но смысла там 0, просто правильная игра слов, — это задолго до нейронок имело реализации. Так что именно из примера в статье мне не понятно, в чем профит от "нейросети".

так скрипт и не позиционируется как очень крутая nlp модель, на текущий момент её можно считать если не устаревшей, то как минимум точно не передовой, смотрите gpt-3/chatgpt и аналоги, там уже результат гораздо интереснее.

К gpt-3 нет вопросов, в чем прорыв понятно и видно. Там к лингвистике добавляется "память" и семантика знаний из специализированных сайтов, наполняемых живыми людьми (вики, стаковерфлоу и тп). Это как-бы следующая версия поисковых систем.

Вот только реализация закрыта и никто не знает, сколько % профита дает нейросеть и машинлернинг, а сколько обычный рукописный алгоритм.

Смотрите открытые реализации ruGPT3 — узнаете сколько % дает машин лернинг
спойлер
100%
, но есть нюансы, аналог GPT-3 сделать еще достаточно просто, то аналог ChatGPT — не тривиальная задача, нужен не только адекватный большой датасет, но еще и люди, которые его улучшат и дообучат для решения задач обычного человека.

А зачем машин лернинг, ИИ, нейронные сети, "перекрестная энтропия" (хаха))) и тп для достижения такого простого результата?

С генерацией текста без смысла (генерация рефератов) прекрасно справляются алгоритмы в виде лапшичного кода, да и работают они в 1000 раз быстрее.

Может стоит сравнивать и оценивать не по учебной реализации, а по полноценной? Эта реализация на NumPy, так в реальном мире так не делают. Есть PyTorch, который оптимизирован именно под конкретные задачи, работает с GPU и так далее.

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

Например, GPT-3 была обучена на 300 миллиардах токенов текста из Интернета и книг:

Что-то я сомневаюсь, что модель на NumPy обучалась так же.

Так что реализация из статьи годится чтобы анализировать и понять, как, в общих чертах, работают такие модели. И не более.

Целую ночь пытался разобраться в устройстве GPT и нейросетей в целом. Я правильно понимаю, что сохранять у себя в нейронах результаты диалога они не могут? Т.е. нужно в каждом запросе передавать нейросетке текст всего предыдущего разговора?
Это прям печаль. Я думал, что они могут обучаться в процессе выполнения...

Дообучение возможно, но не в этом примере. Я пытаюсь понять, как его добавить, но знаний не хватает.

Целую ночь пытался разобраться в устройстве GPT и нейросетей в целом.

Целая ночь это мало. Тут на месяцы и годы счет идти должен. И попробуйте взять сети попроще. Разбираться в нейросетях по GPT это то же самое что выяснять как работает авиация по Airbus 380. В принципе, возможно, но если начать с этажерок братьев Райт, будет проще.

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

В общем случае после внедрения модели, в процессе эксплуатации её веса не меняются.

Я думал, что они могут обучаться в процессе выполнения...

Для обучения помимо размеченных входных данных (которые не всегда есть где взять в случае пользовательского ввода) нужно еще накапливать градиенты для слоев сети. А на это нужны вычислительные ресурсы и память. Дорого выходит всегда в таком режиме работать.

Тут на месяцы и годы счет идти должен.

Мне не интересна разработка ИИ. Но вот как прикладной инструмент я бы его использовал.

в процессе эксплуатации её веса не меняются

Для меня нейросети всегда представлялись аналогом мозга человека, где и память и вычисления происходят в одном месте. Но, чем больше углубляюсь в тему, тем больше понимаю, на сколько это далеко от истины.
Теперь нейросеть в моём представлении это большая функция-чёрный ящик, куда мы закидываем параметры и на выходе получаем результат, который мы ожидали бы получить в нашем человеческом понимании.

В случае нейронных сетей некоторым аналогом кратковременной памяти могут выступать значения на промежуточных слоях в рекурретных моделях. Но долговременная память (веса слоёв) остаются неизменными.


На нынешнем этапе развития процесс обучения (оптимизация весов — формирование памяти) и процесс инференса (собственно работа нейросети) разнесены. Некоторые модели нейронных сетей позволяют делать дообучение со сравнительно небольшими вычислительными затратами. Но об обучении нейронной сети в процессе эксплуатации речи пока не идёт.

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

Если поначалу говорили, что нейронные сети основаны на работе мозга и некоторые их разновидности действительно вдохновлены его устройством, то сейчас уже не так. Более того, есть некоторая тенденция отказа от термина "нейронная сеть" в пользу "модель глубокого обучения", вероятно в том числе чтобы не создавать путаницу с нейронами мозга.

Для Win7 и таких как я ) кто Питона еще не нюхал и хочет посмотреть его на ЭТОМ примере:::

https://www.python.org/downloads/windows/

ставим Питон 3.8.10 последний для Вин7 с установщиком. ( потом можно до 8.13 проапить руками) Пара минут уходит. Ну и я поставил как люблю, в папку C:\Python38. Потом еще и пути же писать.

Сразу ставим https://confluence.atlassian.com/get-started-with-sourcetree/install-sourcetree-847359094.html

Это модуль Git - с прибабахами. На русском бесплатный. Регистрация простая. С облаком можно для начала не заморачиваться, чисто локальную папку указать куда качать.

Теперть PATH !!!

Возможно он и прописался у вас при установке. Но Вин7 с ним не дружит. Кста: я сам не сразу допер, что
git clone https://github.com/jaymody/picoGPT писать в CMD или FARе.

идем в CMD
распечатываем СУЩЕСТВУЮЩИЕ пути (они тут [маты] одной строкой)

C:>PATH
PATH=C:\Python38;C:\Python38\Scripts;C:\Users\A\AppData\Local\Atlassian\SourceTree\git_local\bin;

и! копируем, все что там есть в блокнот++
Смотрим есть ли там такое как у меня. И если нету, то добавляем.
C:\Users\A\AppData\Local\Atlassian\SourceTree\git_local\bin //= путь к Git. Его можно посмотреть в СоурсТрии/инструменты/настройки/Git самый низ.
Там же кстати на первой вкладке указываем, куда закачивать файлы : у меня C:\Python\picoGPT

в CMD вставляем
C:>PATH C:\Python38;C:\Python38\Scripts;C:\Users\A\AppData\Local\Atlassian\SourceTree\git_local\bin;
или как там у вас.

И вот только теперь вы можете давать ТУТ команды типа ::

git clone https://github.com/jaymody/picoGPT
CD C:\Python\picoGPT
C:\Python\picoGPT>pip install -r requirements.txt

НО ОНИ работать не будут! Пишите так:::

git clone http://github.com/jaymody/picoGPT
CD C:\Python\picoGPT
C:\Python\picoGPT>pip install pipwin && pipwin install -r requirements.txt

ввот теперь в бой ))

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

Можно ещё добавить, что там всего одна команда:
python gpt2.py "Alan Turing theorized that computers would one day become" --n_tokens_to_generate 40 --model_size "124M" --models_dir "models"

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

Только ещё нюансы, что с 3.8 может не заработать, ибо требуется версия питона, совместимая с определенной версией transformers.
Так же, может потребоваться установка Visual Studio, обычно этого требует модуль regex 2017.4.5.
Я переписал пару функций, что-бы не запускать скрипт для обработки каждого промпта, а один раз запустить, и давать запросы как к чат-боту, ибо работа на проце довольно медленна, и генерация пары предложений может занять до минуты. Я добавил генерацию не N токенов, а N предложений, что вызывает глюки ,если в выводе нет точки(она считается маркером конца предложения. Так же, я добавил корявую реализацию top-p сэмплинга (что делает вывод в ответ на один и тот же промпт разнообразным), что-бы ускорить генерацию длинных предложений, я добавил окно в 40 токенов, которое сдвигается по массиву токенов по мере их генерации. Это всё улучшения чисто пользовательские, и не затрагивают работу нейросети или модель. Вот код

debug = False
def generate(inputs, params, n_head, sentence_n):
	while True:
		logits = gpt2(inputs[-40:], **params, n_head=n_head)[-1] # model forward pass

		#Sort of top-p sampling
		s = logits.argsort()[-20:][::-1]
		slice = [x for x in s if ((1/logits[s[0]])*logits[x]>0.92)]
		next_id = np.random.choice(slice)

		# Debug output to see which token network choose
		if debug:
			print()
			for index in slice:
				if next_id == index:
					print('V', index, logits[index], encoder.decode([index]))
				else:
					print(' ', index, logits[index], encoder.decode([index]))

		#next_id = np.argmax(logits[-1])  # greedy sampling

		inputs = np.append(inputs, [next_id]) # append prediction to input
		if inputs[-1]==13:
			sentence_n-=1
		if sentence_n < 0:
			break
			
		print(encoder.decode([inputs[-1]]), end='', flush=True)
	print()

if __name__ == "__main__":
	from utils import load_encoder_hparams_and_params
	
	model_size = "1558M"
	models_dir = "models"
	
	encoder, hparams, params = load_encoder_hparams_and_params(model_size, models_dir)
	
	while True:
		prompt = input('>')
		if prompt == '':
			continue
		# encode the input string using the BPE tokenizer
		t = time.time()
		input_ids = encoder.encode(prompt)

		# make sure we are not surpassing the max sequence length of our model
		#assert len(input_ids) + n_tokens_to_generate < hparams["n_ctx"]

		# generate output ids
		output_ids = generate(input_ids, params, hparams["n_head"], 3) # Max number of sentences is 5

		# decode the ids back into a string
		encoder.decode(output_ids)
		print(time.time() - t)

Если вдруг кто знает, как файн-тюнить такую модель - прошу подсказать.

Получается стартовый запрос prompt должен обрабатываться со скоростью генерации одного токена (формально вне зависимости от количества токенов в нем), но тогда почему те же тарифы openai отдельны для input и output или та же llama и llama2 стартовый промпт обрабатывают какое то время, линейное от количества токенов (в 2-3 раза быстрее чем сама генерация).


Так же реализация llama.cpp имеет такое понятие как память под состояние, ее даже можно сбросить на диск а в последствии загрузить практически моментально и продолжить работу llm с этого состояния, для llama2-70b это 170мб (смутно помню что llama1-65б состояние было 1 гигабайт).


Что такого нового реализовано в современных llm что сам запрос обрабатывается заметное время (llama2 70B с 4bin квантизацией может ковырять тысячу токенов 1-2 минуты на cpu а пару токенов — секунду)?

Sign up to leave a comment.

Articles

Change theme settings