- Published on
Dự đoán từ tiếp theo
- Authors
- Name
- Kevin Nguyen
Chuẩn Bị Dữ Liệu
Trong đoạn mã, chúng ta bắt đầu bằng việc đọc dữ liệu văn bản từ tệp sherlock-holm.es_stories_plain-text_advs.txt. Đây có thể là bất kỳ tệp văn bản nào bạn muốn dự đoán từ tiếp theo.
# Đọc tệp văn bản
with open('sherlock-holm.es_stories_plain-text_advs.txt', 'r', encoding='utf-8') as file:
text = file.read()
Tokenization
Sau khi có dữ liệu văn bản, chúng ta cần chia dữ liệu thành các từ riêng lẻ, điều này được gọi là tokenization. Điều này giúp biến văn bản thành các đơn vị có ý nghĩa mà mô hình có thể hiểu.
from tensorflow.keras.preprocessing.text import Tokenizer
tokenizer = Tokenizer()
tokenizer.fit_on_texts([text])
total_words = len(tokenizer.word_index) + 1
Tạo Dãy Từ (Input Sequences)
Mô hình LSTM yêu cầu một loạt các từ để huấn luyện. Để làm điều này, chúng ta tạo các dãy từ (input sequences) bằng cách tạo các n-grams từ văn bản. Mỗi dãy từ bao gồm một chuỗi các từ liên tiếp từ văn bản.
input_sequences = []
for line in 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)
Xây Dựng Mô Hình LSTM
Mô hình LSTM được xây dựng bằng cách sử dụng Keras, một thư viện mạnh mẽ cho Deep Learning. Mô hình này bao gồm các lớp sau:
- Embedding Layer: Lớp này biểu diễn từng từ trong dạng vectơ. Trong đoạn mã này, mỗi từ được biểu diễn bằng một vectơ 100 chiều.
- LSTM Layer: Lớp LSTM sử dụng để học mối quan hệ giữa các từ trong dãy.
- Dense Layer: Lớp này đưa ra các xác suất của từ tiếp theo dựa trên dữ liệu đầu vào.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense
model = Sequential()
model.add(Embedding(total_words, 100, input_length=max_sequence_len-1))
model.add(LSTM(150))
model.add(Dense(total_words, activation='softmax'))
Huấn Luyện Mô Hình
Mô hình được huấn luyện bằng cách sử dụng dãy từ đã tạo và hàm mất mát categorical cross-entropy. Hàm mất mát này đo lường sai lệch giữa xác suất dự đoán và xác suất thực tế của từ tiếp theo.
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, y, epochs=10, verbose=1)
Dự Đoán Từ Tiếp Theo
Cuối cùng, mô hình được sử dụng để dự đoán từ tiếp theo dựa trên một từ khởi đầu. Mô hình sẽ dự đoán xác suất xuất hiện của từng từ trong từ điển và chọn từ có xác suất cao nhất.
seed_text = "I will leave if they"
next_words = 3
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), axis=-1)
output_word = ""
for word, index in tokenizer.word_index.items():
if index == predicted:
output_word = word
break
seed_text += " " + output_word
Output: I will leave if they have already married
Bạn có thể tìm full source code ở đây: Colab