Читать книгу 120 практических задач онлайн

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import LSTM, Embedding, Dense, SpatialDropout1D

from tensorflow.keras.preprocessing.text import Tokenizer

from tensorflow.keras.preprocessing.sequence import pad_sequences

from sklearn.model_selection import train_test_split

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

# Пример загрузки данных (здесь используется вымышленный пример)

texts = ["новость 1 текст", "новость 2 текст", …] # список текстов новостей

labels = [0, 1, …] # метки классов для каждой новости

# Токенизация текстов

max_features = 10000 # максимальное количество слов в словаре

tokenizer = Tokenizer(num_words=max_features)

tokenizer.fit_on_texts(texts)

sequences = tokenizer.texts_to_sequences(texts)

# Паддинг последовательностей, чтобы все они имели одинаковую длину

maxlen = 200 # максимальная длина текста (количество слов в новости)

X = pad_sequences(sequences, maxlen=maxlen)

y = np.array(labels)

# Разделение на обучающую и тестовую выборки

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Построение модели RNN

model = Sequential()

model.add(Embedding(max_features, 128, input_length=maxlen))

model.add(SpatialDropout1D(0.2)) # для уменьшения переобучения

model.add(LSTM(64, dropout=0.2, recurrent_dropout=0.2))

model.add(Dense(1, activation='sigmoid'))

# Компиляция модели

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# Обучение модели

epochs = 10

batch_size = 32

model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, validation_data=(X_test, y_test))

# Оценка точности модели на тестовой выборке

score = model.evaluate(X_test, y_test, batch_size=batch_size)

print(f'Точность модели: {score[1]:.4f}')

```

Пояснение по коду:

1. Токенизация и преобразование текста: Входные тексты преобразуются в последовательности чисел с помощью `Tokenizer` из Keras.

2. Embedding Layer: Слой `Embedding` преобразует числовые индексы слов в векторные представления.

3. RNN Layer (LSTM): В данном примере используется слой LSTM для работы с последовательностью слов. LSTM помогает учитывать долгосрочные зависимости в последовательности.