Найти в Дзене

11. Генерация текста: учим компьютер писать ✍️💻

В предыдущем посте мы рассмотрели различные задачи обработки естественного языка (NLP). Сегодня мы попробуем научить компьютер создавать текст, то есть займемся генерацией текста. 1. Что такое генерация текста? Генерация текста – это процесс создания текста на естественном языке с использованием алгоритмов машинного обучения. Этот текст может быть различным: стихи, код, сценарии, музыка, электронные письма, ответы на вопросы и т.д. 2. Методы генерации текста: Существует множество различных методов генерации текста, включая: 3. Пример: генерация текста с помощью LSTM: Мы будем использовать LSTM для генерации текста на основе небольшого корпуса текста. В качестве примера возьмем небольшой отрывок из произведения “Алиса в Стране чудес”: alice_text = """Alice was beginning to get very tired of sitting by her sister on the
bank, and of having nothing to do: once or twice she had peeped into the
book her sister was reading, but it had no pictures or conversations in
it, 'and what is the use

В предыдущем посте мы рассмотрели различные задачи обработки естественного языка (NLP). Сегодня мы попробуем научить компьютер создавать текст, то есть займемся генерацией текста.

1. Что такое генерация текста?

Генерация текста – это процесс создания текста на естественном языке с использованием алгоритмов машинного обучения. Этот текст может быть различным: стихи, код, сценарии, музыка, электронные письма, ответы на вопросы и т.д.

2. Методы генерации текста:

Существует множество различных методов генерации текста, включая:

  • Методы на основе марковских цепей (Markov Chains): Простые методы, которые генерируют текст, основываясь на вероятности перехода от одного слова к другому.
  • Методы на основе рекуррентных нейронных сетей (RNN): RNN, особенно LSTM и GRU, хорошо подходят для генерации текста, поскольку они могут учитывать контекст и генерировать последовательности слов.
  • Методы на основе трансформеров (Transformers): Transformers, такие как GPT, являются самыми современными моделями для генерации текста и демонстрируют впечатляющие результаты.

3. Пример: генерация текста с помощью LSTM:

Мы будем использовать LSTM для генерации текста на основе небольшого корпуса текста. В качестве примера возьмем небольшой отрывок из произведения “Алиса в Стране чудес”:

alice_text = """Alice was beginning to get very tired of sitting by her sister on the
bank, and of having nothing to do: once or twice she had peeped into the
book her sister was reading, but it had no pictures or conversations in
it, 'and what is the use of a book,' thought Alice 'without pictures or
conversations?'"""

Теперь напишем код для генерации текста с помощью LSTM и Keras:

__________________________________________________________________________________________

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Embedding
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.utils import to_categorical

# 1. Подготовка данных

alice_text = """Alice was beginning to get very tired of sitting by her sister on the
bank, and of having nothing to do: once or twice she had peeped into the
book her sister was reading, but it had no pictures or conversations in
it, 'and what is the use of a book,' thought Alice 'without pictures or
conversations?'"""


# Токенизация

tokenizer = Tokenizer()
tokenizer.fit_on_texts([alice_text])
total_words = len(tokenizer.word_index) + 1
# +1 для учета паддинга


# Преобразование текста в последовательности токенов

input_sequences = []
for line in alice_text.split('\n'):
token_list = tokenizer.texts_to_sequences([line])[0]
for i in range(1, len(token_list)):
n_gram_sequence = token_list[:i+1]
input_sequences.append(n_gram_sequence)

# Паддинг последовательностей

max_sequence_len = max([len(x) for x in input_sequences])
input_sequences = np.array(pad_sequences(input_sequences, maxlen=max_sequence_len, padding='pre'))

# Создание входных и выходных данных

X, y = input_sequences[:,:-1],input_sequences[:,-1]
y = to_categorical(y, num_classes=total_words)


# 2. Создание модели LSTM

model = Sequential()
model.add(Embedding(total_words, 50, input_length=max_sequence_len-1))
# Слой Embedding

model.add(LSTM(100)) # Слой LSTM

model.add(Dense(total_words, activation='softmax')) # Выходной слой


# 3. Компиляция и обучение модели

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, y, epochs=100, verbose=1)


# 4. Генерация текста

def generate_text(seed_text, next_words, model, max_sequence_len):
for _ in range(next_words):
token_list = tokenizer.texts_to_sequences([seed_text])[0]
token_list = pad_sequences([token_list], maxlen=max_sequence_len-1, padding='pre')
predicted = np.argmax(model.predict(token_list, verbose=0), axis=-1)
# Выбираем наиболее вероятное следующее слово

output_word = "" for word, index in tokenizer.word_index.items():
if index == predicted:
output_word = word
break seed_text += " " + output_word
return seed_text


# Генерируем текст, начиная с фразы "Alice was"

print(generate_text("Alice was", 5, model, max_sequence_len))

___________________________________________________________________________________python

Разберем код:

  • Tokenizer() – создает объект Tokenizer для токенизации текста.
  • tokenizer.fit_on_texts([alice_text]) – обучает Tokenizer на нашем корпусе текста.
  • tokenizer.texts_to_sequences([line])[0] – преобразует текст в последовательность токенов.
  • pad_sequences(input_sequences, maxlen=max_sequence_len, padding='pre') – приводит все последовательности к одной длине max_sequence_len, заполняя более короткие последовательности нулями в начале.
  • Embedding(total_words, 50, input_length=max_sequence_len-1) – создает слой Embedding, который преобразует каждый токен (слово) в вектор размерностью 50.
  • LSTM(100) – добавляет слой LSTM с 100 нейронами.
  • Dense(total_words, activation='softmax') – добавляет выходной слой с softmax функцией активации, который выводит вероятности для каждого слова в словаре.
  • generate_text(seed_text, next_words, model, max_sequence_len) – функция для генерации текста, которая принимает начальную фразу (seed_text), количество слов для генерации (next_words), модель и максимальную длину последовательности.

4. Что дальше?

  • Использование большего корпуса текста: Обучение модели на большем корпусе текста, таком как целая книга или набор книг.
  • Регулировка параметров модели: Изменение количества слоев LSTM, количества нейронов в слоях и других параметров модели.
  • Использование Dropout: Использование Dropout для предотвращения переобучения.
  • Использование предварительно обученных языковых моделей: Использование предварительно обученных языковых моделей, таких как GPT, для генерации более качественного текста.

Вопрос дня: Какие типы текста вам кажутся наиболее интересными для генерации с помощью ИИ? Поделитесь в комментариях! 👇

#генерациятекста #nlp #lstm #keras #tensorflow #глубокоеобучение #deeplearning #искусственныйинтеллект #ai #ml #python #дляначинающих #технологии #дзен #канал