Cách tạo mô hình phân tích tình cảm từ đầu
Phân tích tình cảm là một kỹ thuật xử lý ngôn ngữ tự nhiên (NLP) nhằm xác định thái độ đằng sau một văn bản. Nó còn được gọi là khai thác quan điểm. Mục tiêu của phân tích tình cảm là xác định xem một văn bản nhất định có tình cảm tích cực, tiêu cực hay trung tính. Nó được sử dụng rộng rãi bởi các doanh nghiệp để tự động phân loại tình cảm trong đánh giá của khách hàng. Phân tích khối lượng lớn đánh giá giúp thu được thông tin chi tiết có giá trị về sở thích của khách hàng.
Mục Lục
Thiết lập môi trường của bạn
Bạn cần phải làm quen với những điều cơ bản về Python để làm theo. Điều hướng đến Google Colab hoặc mở Jupyter Notebook. Sau đó, tạo một sổ ghi chép mới. Thực hiện lệnh sau để cài đặt các thư viện cần thiết trong môi trường của bạn.
! pip install tensorflow scikit-learn pandas numpy pickle5
Bạn sẽ sử dụng thư viện NumPy và pandas để thao tác với tập dữ liệu. TensorFlow để tạo và đào tạo mô hình máy học. Scikit-learning để chia tập dữ liệu thành các tập huấn luyện và kiểm tra. Cuối cùng, bạn sẽ sử dụng pickle5 để tuần tự hóa và lưu đối tượng tokenizer.
Nhập các thư viện cần thiết
Nhập các thư viện cần thiết mà bạn sẽ sử dụng để xử lý trước dữ liệu và tạo mô hình.
import numpy as np
import pandas as pd
import tensorflow as tf
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, Conv1D, GlobalMaxPooling1D, Dense, Dropout
import pickle5 as pickle
Bạn sẽ sử dụng các lớp bạn nhập từ các mô-đun sau này trong mã.
Đang tải tập dữ liệu
Tại đây, bạn sẽ sử dụng bộ dữ liệu Đánh giá khách sạn của Trip Advisor từ Kaggle để xây dựng mô hình phân tích cảm tính.
df = pd.read_csv('/content/tripadvisor_hotel_reviews.csv')
print(df.head())
Tải tập dữ liệu và in năm hàng đầu tiên. In năm hàng đầu tiên sẽ giúp bạn kiểm tra tên cột của tập dữ liệu. Điều này sẽ rất quan trọng khi tiền xử lý tập dữ liệu.
Tập dữ liệu Đánh giá khách sạn của Trip Advisor có cột chỉ mục, cột Đánh giá và cột Xếp hạng.
Tiền xử lý dữ liệu
chọn Ôn tập Và Xếp hạng cột từ tập dữ liệu. Tạo một cột mới dựa trên cột Xếp hạng và đặt tên cho nó tình cảm. Nếu xếp hạng lớn hơn 3, hãy gắn nhãn cảm xúc là tích cực. Nếu xếp hạng nhỏ hơn 3, hãy gắn nhãn là tiêu cực. Nếu xếp hạng chính xác là 3, hãy gắn nhãn là trung lập.
Chỉ chọn các cột Đánh giá và cảm tính từ tập dữ liệu. Xáo trộn các hàng một cách ngẫu nhiên và đặt lại chỉ mục của khung dữ liệu. Xáo trộn và đặt lại đảm bảo dữ liệu được phân phối ngẫu nhiên, điều này cần thiết để đào tạo và kiểm tra mô hình đúng cách.
df = df[['Review', 'Rating']]
df['sentiment'] = df['Rating'].apply(lambda x: 'positive' if x > 3
else 'negative' if x < 3
else 'neutral')
df = df[['Review', 'sentiment']]
df = df.sample(frac=1).reset_index(drop=True)
chuyển đổi Ôn tập văn bản thành một chuỗi số nguyên bằng mã thông báo. Thao tác này tạo ra một từ điển gồm các từ duy nhất có trong văn bản Đánh giá và ánh xạ từng từ thành một giá trị số nguyên duy nhất. Sử dụng pad_sequences từ Keras để đảm bảo rằng tất cả các chuỗi đánh giá đều có cùng độ dài.
tokenizer = Tokenizer(num_words=5000, oov_token='<OOV>')
tokenizer.fit_on_texts(df['Review'])
word_index = tokenizer.word_index
sequences = tokenizer.texts_to_sequences(df['Review'])
padded_sequences = pad_sequences(sequences, maxlen=100, truncating='post')
Chuyển đổi nhãn cảm tính thành mã hóa One-hot.
sentiment_labels = pd.get_dummies(df['sentiment']).values
Mã hóa một lần thể hiện dữ liệu phân loại ở định dạng giúp các mô hình của bạn làm việc dễ dàng hơn.
Chia tập dữ liệu thành tập huấn luyện và kiểm tra
Sử dụng scikit-learning để phân chia ngẫu nhiên tập dữ liệu thành các tập huấn luyện và kiểm tra. Bạn sẽ sử dụng tập huấn luyện để huấn luyện mô hình nhằm phân loại cảm xúc của các bài đánh giá. Và bạn sẽ sử dụng bộ kiểm tra để xem mô hình phân loại các bài đánh giá mới chưa từng thấy tốt đến mức nào.
x_train, x_test, y_train, y_test = train_test_split(padded_sequences, sentiment_labels, test_size=0.2)
Kích thước phân chia tập dữ liệu là 0,2. Điều này có nghĩa là 80% dữ liệu sẽ đào tạo mô hình. Và 20% còn lại sẽ kiểm tra hiệu suất của mô hình.
Tạo mạng lưới thần kinh
Tạo một mạng lưới thần kinh với sáu lớp.
model = Sequential()
model.add(Embedding(5000, 100, input_length=100))
model.add(Conv1D(64, 5, activation='relu'))
model.add(GlobalMaxPooling1D())
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(3, activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()
Lớp đầu tiên của mạng thần kinh là lớp Nhúng. Lớp này học cách trình bày dày đặc các từ trong từ vựng. Lớp thứ hai là lớp Conv1D với 64 bộ lọc và kích thước hạt nhân là 5. Lớp này thực hiện các thao tác tích chập trên các chuỗi đầu vào, sử dụng một cửa sổ trượt nhỏ có kích thước 5.
Lớp thứ ba giảm trình tự các bản đồ đặc trưng thành một vectơ duy nhất. Nó lấy giá trị tối đa trên mỗi bản đồ tính năng. Lớp thứ tư thực hiện phép biến đổi tuyến tính trên vectơ đầu vào. Lớp thứ năm đặt ngẫu nhiên một phần của các đơn vị đầu vào thành 0 trong quá trình đào tạo. Điều này giúp ngăn chặn quá mức. Lớp cuối cùng chuyển đổi đầu ra thành phân phối xác suất trên ba lớp có thể: tích cực, trung lập và tiêu cực.
Đào tạo mạng lưới thần kinh
Khớp các tập huấn luyện và kiểm tra với mô hình. Huấn luyện mô hình trong mười kỷ nguyên. Bạn có thể thay đổi số lượng kỷ nguyên theo ý thích của mình.
model.fit(x_train, y_train, epochs=10, batch_size=32, validation_data=(x_test, y_test))
Sau mỗi kỷ nguyên, hiệu suất của mô hình trên bộ thử nghiệm được đánh giá.
Đánh giá hiệu suất của mô hình được đào tạo
Sử dụng model.predict() phương pháp để dự đoán các nhãn tình cảm cho tập kiểm tra. Tính điểm chính xác bằng cách sử dụng precision_score() chức năng từ scikit-learning.
y_pred = np.argmax(model.predict(x_test), axis=-1)
print("Accuracy:", accuracy_score(np.argmax(y_test, axis=-1), y_pred))
Độ chính xác của mô hình này là khoảng 84%.
Lưu mô hình
Lưu mô hình bằng cách sử dụng mô hình.save() phương pháp. Sử dụng pickle để tuần tự hóa và lưu đối tượng tokenizer.
model.save('sentiment_analysis_model.h5')
with open('tokenizer.pickle', 'wb') as handle:
pickle.dump(tokenizer, handle, protocol=pickle.HIGHEST_PROTOCOL)
Đối tượng mã thông báo sẽ mã hóa văn bản đầu vào của riêng bạn và chuẩn bị nó để cung cấp cho mô hình được đào tạo.
Sử dụng Mô hình để Phân loại Tình cảm trong Văn bản của Chính Bạn
Sau khi tạo và lưu mô hình, bạn có thể sử dụng nó để phân loại cảm xúc của văn bản của riêng bạn. Đầu tiên, tải mô hình đã lưu và mã thông báo.
import kerasmodel = keras.models.load_model('sentiment_analysis_model.h5')
with open('tokenizer.pickle', 'rb') as handle:
tokenizer = pickle.load(handle)
Xác định một chức năng để dự đoán tình cảm của văn bản đầu vào.
def predict_sentiment(text):
text_sequence = tokenizer.texts_to_sequences([text])
text_sequence = pad_sequences(text_sequence, maxlen=100)
predicted_rating = model.predict(text_sequence)[0]
if np.argmax(predicted_rating) == 0:
return 'Negative'
elif np.argmax(predicted_rating) == 1:
return 'Neutral'
else:
return 'Positive'
Cuối cùng, dự đoán văn bản của riêng bạn.
text_input = "I absolutely loved my stay at that hotel. The staff was amazing and the room was fantastic!"
predicted_sentiment = predict_sentiment(text_input)
print(predicted_sentiment)
Tâm lý dự đoán của bài đánh giá trên như sau:
Mô hình có thể phân loại chính xác cảm xúc của cả ba bài đánh giá.
Dự đoán cảm xúc bằng cách sử dụng các mô hình được đào tạo trước
Đôi khi trong học máy, bạn có thể gặp khó khăn trong việc tìm kiếm tập dữ liệu phù hợp. Bạn cũng có thể thiếu tài nguyên để tạo tập dữ liệu của riêng mình. Đây là lúc các mô hình được đào tạo trước phát huy tác dụng. Bạn phải biết cách sử dụng API của họ và để họ xử lý phần còn lại.