Я работал над базовым LLM, и каждый раз, когда я запускал код, полученный образец не имел смысла. Я получил вывод:
Однажды на оба ваших дома я возложил на него закон о вас, король короля Англии.
Однажды на оба ваших дома я положил ему закон о вас, короле короля Англии.
Однажды на оба ваших дома я положил ему закон о вас, короле короля Англии.
Однажды на оба ваших дома я возложил на него закон о вас, короле короля Англии.
Однажды на оба ваших дома я возложил на него закон о вас, короле короля Англии.
Однажды на оба ваших дома я положил ему закон. p>
Грамматика совершенно неправильная (без знаков препинания и заглавных букв), и предложение в целом не имеет смысла. Как я могу оптимизировать эту модель?
Это мой код:
import tensorflow as tf
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.layers import Embedding, LSTM, Dense, Bidirectional
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.models import Sequential
import numpy as np
path_to_file = tf.keras.utils.get_file('shakespeare.txt', 'https://storage.googleapis.com/download ... speare.txt')
with open(path_to_file, 'r') as f:
text = f.read()
tokenizer = Tokenizer()
text = text.lower().split("\n")
tokenizer.fit_on_texts(text)
total_words = len(tokenizer.word_index) + 1
input_sequences = []
for line in text:
token_list = tokenizer.texts_to_sequences([line])[0]
for i in range(1, len(token_list)):
n_gram = token_list[:i+1]
input_sequences.append(n_gram)
max_sequence_length = max([len(x) for x in input_sequences])
input_sequences = np.array(pad_sequences(input_sequences, maxlen = max_sequence_length, padding = 'pre'))
x = input_sequences[:, :-1]
y = input_sequences[:, -1]
embedding_dim = 256
y = tf.keras.utils.to_categorical(y, num_classes=total_words)
model = Sequential()
model.add(Embedding(total_words, embedding_dim))
lstm = Bidirectional(LSTM(256))
model.add(lstm)
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(total_words, activation = 'softmax'))
lr1 = 0.001
adam = tf.keras.optimizers.Adam(lr1)
model.compile(loss = 'categorical_crossentropy', optimizer = adam, metrics = ['accuracy'])
history = model.fit(x, y, epochs = 40, verbose = 1, batch_size = 128)
seed_text = "Once upon a time"
next_words = 20
for i in range(next_words):
tokens = tokenizer.texts_to_sequences([seed_text])[0]
token_list = pad_sequences([tokens], maxlen = max_sequence_length, 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 = seed_text + " " + output_word
print(seed_text)
Подробнее здесь: https://stackoverflow.com/questions/790 ... -basic-llm
Как улучшить базовый LLM? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение