Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шолле Ф. - Глубокое обучение на Python (Библиотека программиста) - 2023.pdf
Скачиваний:
6
Добавлен:
07.04.2024
Размер:
11.34 Mб
Скачать

460    Глава 12. Генеративное глубокое обучение

Листинг 12.6. Простая языковая модель на основе архитектуры Transformer

from tensorflow.keras import layers

 

embed_dim

= 256

Значения softmax по возможным

latent_dim = 2048

словам из словаря, рассчитанные

num_heads

= 2

для каждого временного шага

 

 

выходной последовательности

inputs = keras.Input(shape=(None,), dtype="int64")

x = PositionalEmbedding(sequence_length, vocab_size, embed_dim)(inputs) x = TransformerDecoder(embed_dim, latent_dim, num_heads)(x, x)

outputs = layers.Dense(vocab_size, activation="softmax")(x) model = keras.Model(inputs, outputs)

model.compile(loss="sparse_categorical_crossentropy", optimizer="rmsprop")

12.1.5. Обратный вызов для генерации текста с разными значениями температуры

Для.генерации.текста.с.использованием.различных.температур.после.каждой. эпохи.мы.применим.обратный.вызов..Это.позволит.увидеть,.как.меняется.сгенерированный.текст.по.мере.схождения.модели,.а.также.как.на.стратегию.выбора. влияет.температура..Чтобы.начать.генерацию.текста,.используем.подсказку. this movie.(«этот.фильм»):.все.наши.сгенерированные.тексты.будут.начинаться. с.этого.словосочетания.

Листинг 12.7. Обратный вызов для генерации текста

import numpy as np

Словарь, отображающий индексы слов в их строковые

представления, для декодирования текста

 

tokens_index = dict(enumerate(text_vectorization.get_vocabulary()))

def sample_next(predictions, temperature=1.0):

 

 

 

 

 

 

Реализует выбор

 

 

 

 

 

 

predictions = np.asarray(predictions).astype("float64")

 

 

из распределения

predictions = np.log(predictions) / temperature

 

 

 

 

 

 

 

 

вероятностей с учетом

exp_preds = np.exp(predictions)

 

 

 

 

 

 

значения температуры

predictions = exp_preds / np.sum(exp_preds)

 

 

 

 

 

 

 

probas = np.random.multinomial(1, predictions, 1)

 

 

 

 

 

return np.argmax(probas)

 

 

 

 

 

 

 

class TextGenerator(keras.callbacks.Callback):

Подсказка для начала

def __init__(self,

prompt,

 

 

 

генерирования текста

 

 

 

 

Количество генерируемых слов

generate_length,

 

 

 

 

 

 

 

 

model_input_length,

 

 

 

 

 

 

 

temperatures=(1.,),

 

 

 

 

Диапазон температур

 

 

 

 

print_freq=1):

 

 

 

 

 

 

для выбора

 

self.prompt = prompt

 

 

 

 

 

 

 

12.1. Генерирование текста    461

self.generate_length = generate_length self.model_input_length = model_input_length self.temperatures = temperatures self.print_freq = print_freq

def on_epoch_end(self, epoch, logs=None):

 

Генерирование

 

if (epoch + 1) % self.print_freq != 0:

 

 

 

текста начинается

 

return

 

 

 

 

 

 

 

 

 

 

с подсказки

 

for temperature in self.temperatures:

 

 

 

 

 

 

 

 

 

 

 

 

print("== Generating with temperature", temperature)

 

 

sentence = self.prompt

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for i in range(self.generate_length):

 

 

 

 

 

 

 

 

 

 

 

tokenized_sentence = text_vectorization([sentence])

 

 

 

 

 

 

 

 

predictions = self.model(tokenized_sentence)

 

 

Получаем прогнозы

 

 

 

Передаем текущую

next_token = sample_next(predictions[0, i, :])

 

 

 

для последнего

последовательность

sampled_token = tokens_index[next_token]

 

 

 

временного шага

в модель

sentence += " " + sampled_token

 

 

 

 

 

 

 

и используем их

print(sentence)

 

 

 

 

 

 

 

 

 

 

для выбора нового

 

 

Добавляем новое слово в конец текущей

 

 

 

слова

 

 

 

prompt = "This movie"

последовательности и повторяем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

text_gen_callback = TextGenerator(

 

 

 

 

 

 

 

 

 

 

 

 

prompt,

 

 

 

 

Для демонстрации влияния температуры

generate_length=50,

 

 

 

model_input_length=sequence_length,

 

на генерацию текста используем

 

несколько разных температур

temperatures=(0.2, 0.5, 0.7, 1., 1.5))

 

 

 

 

 

 

 

 

 

 

 

 

 

А.теперь.обучим.модель.

Листинг 12.8. Обучение языковой модели

model.fit(lm_dataset, epochs=200, callbacks=[text_gen_callback])

Вот .несколько .примеров, .демонстрирующих .возможности .модели .после. 200.эпох.обучения..Обратите.внимание,.что.знаки.препинания.не.являются. частью.словаря,.поэтому.ни.один.из.сгенерированных.текстов.не.содержит. знаков.препинания.

.Со.значением.temperature=0.2:

. this movie is a [UNK] of the original movie and the first half hour of the movie is pretty good but it is a very good movie it is a good movie for the time period;

. this movie is a [UNK] of the movie it is a movie that is so bad that it is a [UNK] movie it is a movie that is so bad that it makes you laugh and cry at the same time it is not a movie i dont think ive ever seen.

.Со.значением.temperature=0.5:

. this movie is a [UNK] of the best genre movies of all time and it is not a good movie it is the only good thing about this movie i have seen it for the first time and i still remember it being a [UNK] movie i saw a lot of years;

462    Глава 12. Генеративное глубокое обучение

. this movie is a waste of time and money i have to say that this movie was a complete­ waste of time i was surprised to see that the movie was made up of a good movie and the movie was not very good but it was a waste of time and.

.Со.значением.temperature=0.7:

. this movie is fun to watch and it is really funny to watch all the characters are extremely hilarious also the cat is a bit like a [UNK] [UNK] and a hat [UNK] the rules of the movie can be told in another scene saves it from being in the back of;

. this movie is about [UNK] and a couple of young people up on a small boat in the middle of nowhere one might find themselves being exposed to a [UNK] dentist they are killed by [UNK] i was a huge fan of the book and i havent seen the original so it.

.Со.значением.temperature=1.0:

. this movie was entertaining i felt the plot line was loud and touching but on a whole watch a stark contrast to the artistic of the original we watched the original version of england however whereas arc was a bit of a little too ordinary the [UNK] were the present parent [UNK];

. this movie was a masterpiece away from the storyline but this movie was simply exciting and frustrating it really entertains friends like this the actors in this movie try to go straight from the sub thats image and they make it a really good tv show.

.Со.значением.temperature=1.5:

. this movie was possibly the worst film about that 80 women its as weird insightful actors like barker movies but in great buddies yes no decorated shield even [UNK] land dinosaur ralph ian was must make a play happened falls after miscast [UNK] bach not really not wrestlemania seriously sam didnt exist;

. this movie could be so unbelievably lucas himself bringing our country wildly funny things has is for the garish serious and strong performances colin writing more detailed dominated but before and that images gears burning the plate patriotism we you expected dyan bosses devotion to must do your own duty and another.

Как.видите,.при.низком.значении.температуры.генерируется.довольно.скучный. и.повторяющийся.текст,.и.иногда.процесс.генерирования.просто.зацикливается..При.высоком.значении.температуры.формируется.более.интересный.текст,. неожиданный.и.даже.творческий,.но.внутренняя.структура.начинает.разру- шаться.и.текст.выглядит.как.случайный.набор.слов..Без.сомнения,.0,7.—.самая. интересная.температура.для.генерации.текста.в.данном.конкретном.решении.. Всегда.пробуйте.несколько.стратегий.выбора!.Разумный.баланс.между.из- ученной.структурой.и.случайностью.—.вот.что.делает.сгенерированные.данные. интересными.

12.1. Генерирование текста    463

Обратите.внимание.на.то,.что,.обучая.модель.большего.размера.дольше.и.на. большем.объеме.данных,.можно.добиться.генерации.текста,.который.выглядит. еще.реалистичнее,.—.вывод.такой.модели,.как.GPT-3,.наглядно.демонстриру- ет,.чего.можно.ожидать.от.языковых.моделей.(GPT-3.—.это.фактически.та.же. модель,.которую.мы.обучили.в.этом.примере,.но.с.большим.количеством.декодеров.Transformer.и.большим.объемом.обучающих.данных,.на.которых.она.на- тренирована)..Однако.не.думайте,.что.когда-нибудь.вам.удастся.сгенерировать. осмысленный.текст,.разве.только.по.чистой.случайности.и.согласно.вашей. личной.интерпретации:.вы.лишь.выбираете.образцы.данных.из.статистической. модели,.в.которой.слова.следуют.за.словами.

Естественный.язык.многообразен.—.это.и.канал.общения,.и.способ.воздействия. на.мир,.и.социальная.смазка,.и.способ.формулировать,.хранить.и.извлекать.собственные.мысли....Из.этих.разных.применений.языка.берет.начало.его.смысл.. «Языковая.модель».глубокого.обучения,.несмотря.на.свое.название,.на.самом. деле.не.отражает.ни.одного.из.данных.фундаментальных.аспектов.языка..Она. не.умеет.общаться.(ей.не.о.чем.и.не.с.кем.общаться),.она.не.способна.воздействовать.на.мир.(у.нее.нет.намерений.и.точек.приложения.воздействий),.она. не.может.быть.социальной,.и.у.нее.нет.мыслей,.которые.можно.было.бы.выразить. с.помощью.слов..Язык.—.это.операционная.система.разума,.поэтому,.чтобы.язык. имел.смысл,.ему.нужен.разум,.который.бы.его.использовал.

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

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

12.1.6. Подведение итогов

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

.В.случае.с.текстом.такая.модель.называется.языковой моделью;.она.может. быть.основана.на.словах.или.символах.

.Выбор.следующего.токена.требует.баланса.между.мнением.модели.и.случайностью.

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