Để làm được điều đó, ta cần một hệ thống phân loại đánh giá cho các ý kiến phản hồi khác nhau của khách hàng.. Lý do chọn đề tài Qua những điều đã xác định được phía trên, chúng em thấy
Tổng quan vấn đề
Giới thiệu đề tài
Trong bối cảnh các nền tảng trực tuyến phát triển mạnh mẽ, sự cạnh tranh giữa các doanh nghiệp ngày càng trở nên khốc liệt Để cải thiện chất lượng sản phẩm và dịch vụ, việc thu thập ý kiến đánh giá từ khách hàng đã trở thành một yếu tố thiết yếu trong xu hướng hiện nay.
Đánh giá nhận xét của khách hàng đóng vai trò quan trọng trong sự thành công của doanh nghiệp Ý kiến của khách hàng cung cấp thông tin quý giá, giúp doanh nghiệp hiểu rõ nhu cầu và mong muốn của họ Từ đó, doanh nghiệp có thể cải thiện dịch vụ và sản phẩm, tìm ra chiến lược kinh doanh hiệu quả, góp phần tăng doanh thu và phát triển bền vững trong tương lai.
Việc thu thập ý kiến phản hồi từ khách hàng là một thách thức lớn đối với các cửa hàng, do sự đa dạng trong các đánh giá, nhận xét có thể là khách quan hoặc chủ quan, tích cực hay tiêu cực, từ nhiều tầng lớp khách hàng khác nhau Để tối ưu hóa hiệu quả, doanh nghiệp cần lắng nghe và phân tích toàn bộ các đánh giá này Một hệ thống phân loại đánh giá cho các ý kiến phản hồi khác nhau sẽ là cần thiết để thực hiện điều này.
Lý do chọn đề tài
Dựa trên những điểm đã xác định, chúng tôi nhận thấy tầm quan trọng của việc phân loại và đánh giá ý kiến khách hàng, cũng như việc áp dụng nó rộng rãi trong thực tế hiện nay Điều này không chỉ phục vụ cho mục đích nghiên cứu công nghệ xử lý văn bản mà còn giúp tìm hiểu cách xây dựng hệ thống phân loại sau khi tham gia lớp học Qua đó, chúng tôi có thể tích lũy thêm kiến thức và khai thác các khía cạnh khác nhau trong việc ứng dụng kiến thức từ đề tài này.
Mục tiêu đề tài
Phân loại chính xác các ý kiến khác nhau của khách hàng.
Xác định xu hướng ý kiến khách hàng trong thời gian gần đây.
Xác định phương pháp nghiên cứu phân loại văn bản.
Triển khai và xây dựng hệ thống phân loại một cách hợp lý.
Cơ sở lý thuyết
Phân tích cảm xúc tiếp cận theo xử lý ngôn ngữ tự nhiên
Ngôn ngữ tự nhiên không chỉ truyền đạt thông tin mà còn thể hiện cảm xúc của người viết, tùy thuộc vào cách sử dụng từ ngữ Kiến thức này được giáo viên hướng dẫn, cụ thể là PGS.
TS Nguyễn Tuấn Đăng, hay còn gọi là Thầy Đăng, đã giảng dạy về xử lý ngôn ngữ tự nhiên với các phương pháp kỹ thuật quan trọng Trong đề tài này, chúng tôi sử dụng dữ liệu từ các bình luận của thực khách tại chuỗi nhà hàng McDonald's Sau khi thu thập dữ liệu, chúng tôi tiến hành tiền xử lý để “làm sạch” thông tin, bao gồm loại bỏ các cột không cần thiết, dấu câu, stopwords, và tối giản từ về dạng gốc (stemmer) trước khi vecto hoá Tiếp theo, chúng tôi thực hiện khám phá dữ liệu (EDA) để phân tích và hình dung các biểu đồ, sự phân phối của cột mục tiêu, cũng như các từ có tần suất lặp lại cao nhằm hiểu rõ hơn về dữ liệu Cuối cùng, chúng tôi đánh giá và triển khai dự án.
Phân tích cảm xúc tiếp cận theo phương pháp Học máy
Chúng em tập trung vào Học máy có giám sát dạng phân loại để huấn luyện mô hình phân tích cảm xúc khách hàng, dựa trên nội dung bình luận của họ.
Máy học có giám sát là thuật toán dự đoán dữ liệu đầu ra dựa trên các tập dữ liệu đã biết, bao gồm dữ liệu đầu vào và kết quả đầu ra Có hai loại chính của máy học có giám sát: phân loại và hồi quy Phân loại nhằm dự đoán kết quả bằng cách chia dữ liệu thành các nhóm có tính chất tương đồng, trong khi hồi quy cung cấp kết quả dự đoán dưới dạng số thực cụ thể thay vì chỉ phân nhóm như trong phân loại.
Chúng tôi sẽ áp dụng bốn mô hình học máy: Logistic Regression, Multinomial NB, Gaussian NB và Bernoulli NB để phân tích cảm xúc Sau khi đánh giá hiệu suất của từng mô hình, chúng tôi sẽ chọn ra mô hình tốt nhất và tiến hành tinh chỉnh tham số thông qua GridCV Sau đó, mô hình được tinh chỉnh sẽ được huấn luyện lại, và cuối cùng, chúng tôi sẽ sử dụng một hàm để kiểm tra các văn bản ngẫu nhiên từ internet và mạng xã hội liên quan đến các chuỗi nhà hàng của McDonald's.
Xử lý dữ liệu
Thư viện
Các thư viện được sử dụng:
+ Thư viện bỏ qua cảnh báo: import warnings warnings.filterwarnings('ignore')
+ Thư viện Phân tích dữ liệu và mô hình hóa: import pandas pd as import numpy np as import seaborn sns as import matplotlib.pyplot plt as
The article discusses the use of the NLTK library for text preprocessing, highlighting key components such as downloading stopwords, utilizing string manipulation, and employing the Porter Stemmer for stemming It also mentions the creation of word clouds using the WordCloud library and the application of Scikit-learn's text feature extraction methods This combination of tools is essential for effective natural language processing tasks.
TfidfVectorizer from tqdm.notebook import tqdm
The article discusses the use of various machine learning libraries in Python for model training and data preprocessing Key imports include `train_test_split` from `sklearn.model_selection` for splitting datasets, `LogisticRegression` for logistic regression analysis, and multiple Naive Bayes classifiers such as `MultinomialNB`, `GaussianNB`, and `BernoulliNB` from `sklearn.naive_bayes` Additionally, support vector machines are utilized through the `svm` module in `sklearn`.
+ Thư viện Sentiment Analysis: from nltk.sentiment import SentimentIntensityAnalyzer
+ Thư viện đánh giá mô hình: from sklearn.metrics import ( accuracy_score, precision_score, recall_score, f1_score, classification_report, confusion_matrix,
Kết nối với dữ liệu
Kết nối Drive nơi chứa dữ liệu : from google.colab import drive drive.mount('/content/drive')
Chuẩn bị dữ liệu
Để hiểu rõ về tập dữ liệu, chúng ta cần kiểm tra các cột và xem một vài hàng đầu tiên bằng hàm head() Việc khám phá này giúp cung cấp cái nhìn sâu sắc về cấu trúc và nội dung của tập dữ liệu Dữ liệu được đọc từ file CSV bằng lệnh df = pd.read_csv('/content/drive/MyDrive/reviews.csv', encoding='ISO-8859-1') và hiển thị kết quả với df.head().
Hình 1 Kết quả chạy code
Bảng dữ liệu có 10 cột, trong đó có 4 cột số và các cột còn lại là chữ.
Tiền xử lý dữ liệu (Preprocessing)
In the dataset, only three columns—reviewer_id, review, and rating—are essential for visualizing the data and training the model, so we will remove the other columns The columns to be dropped include store_name, category, store_address, and latitude.
', 'longitude' 'rating_count', , 'review_time'] df.drop(columns=drop_list, inplace=True) df["review"] = df["review"] .encode(str "ascii",
"ignore") .decode(str "utf-8") .lower()str df.drop_duplicates(subset='review',keep='first', inplace=True) df2 = df.copy() # DF2 sử dụng cho Sentiment Analysis df.head()
Hình 2 Kết quả chạy code
Bảng dữ liệu sau khi đã loại bỏ các cột không sử dụng.
Kiểm tra dữ liệu rỗng print(df.isnull().sum()) print(df.info())
Hình 3 Kết quả chạy code
Bảng trên cho ta thấy trong dataset không có dữ liệu rỗng, có tổng cộng
3 cột và mỗi cột điều chứa 22077 giá trị bằng với tổng dòng trong dataset.
Khám phá dữ liệu
Phân tích cảm xúc (Sentiment Analysis) là một kỹ thuật quan trọng để đánh giá các cảm xúc được thể hiện trong văn bản Kỹ thuật này phân loại các cảm xúc thành ba nhóm chính: tích cực, tiêu cực và trung lập.
Review mang ý nghĩa tốt sẽ có compound cao hơn và ngược lại. Áp dụng Sentiment Analysis lên cả dataset:
Hình 4 Kết quả chạy code
Hình 5 Biểu đồ tổng hợp điểm đánh giá
Đánh giá kém thường đi kèm với những nhận xét tiêu cực từ người đánh giá, trong khi đánh giá tích cực thường nhận được điểm số cao và ý kiến tốt.
Hình 6 Biểu đồ điểm đánh giá tích cực - trung lập - tiêu cực
Kết quả từ ba bảng vẽ cho thấy rằng, những đánh giá tích cực thường đi kèm với điểm số cao, trong khi các đánh giá tiêu cực lại dẫn đến điểm số thấp hơn.
Phân loại đánh giá khách hàng
Xử lý văn bản
#Punctuation removal words = text.lower().split() words = [word.lower().translate(str.maketrans( ,'' '', string.punctuation)) for word words] in
#Stopword removal stop_words = stopwords.words('english') words = [word for word words word in if not in stop_words]
#Stemming stemmer = PorterStemmer() words = [stemmer.stem(word) for word words] in
#Joining the text processed_text = ' '.join(words) return processed_text df['review'] = df['review'].apply(clean_text) df.head()
Hình 8 Kết quả chạy code
To create a word cloud from the reviews in a DataFrame, first concatenate all the words into a single string Then, utilize the WordCloud library to generate a visual representation with specified dimensions and a white background Finally, display the word cloud using Matplotlib, ensuring to hide the axes for a cleaner look.
Hình 9 Các từ có số lần xuất hiện nhiều nhất trong bộ dữ liệu
Xây dựng mô hình
Chia tập dữ liệu để kiểm tra :
#chia list test vec = TfidfVectorizer()
X = vec.fit_transform(df['review']).toarray() y = df['rating'].astype( )int
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_stateB)
Các mô hình được chọn để huấn luyện:
#Các model được chọn để train models = {
Tạo các mảng để lưu kết quả:
#Tạo array để lưu kết quả accuracy_scores = [] precision_scores = [] recall_scores = [] f1_scores = []
Huấn luyện mô hình và đánh giá:
# Train and evaluate trong vòng lặp for model_name, model models.items(): in model.fit(X_train, y_train) y_pred = model.predict(X_test)
# Print classification report print(f'Classification report for {model_name}:\n', classification_report(y_test, y_pred))
To evaluate model performance, we append various metrics to their respective arrays: accuracy scores using `accuracy_score(y_test, y_pred)`, precision scores calculated with `precision_score(y_test, y_pred, average='weighted')`, recall scores obtained from `recall_score(y_test, y_pred, average='weighted')`, and F1 scores through `f1_score(y_test, y_pred, average='weighted')`.
# In ra ma trận cm = confusion_matrix(y_test, y_pred, labels=model.classes_) disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=model.classes_)
Hình 10 Kết quả chạy code
Hình 11 Sơ đồ ma trận
Hình 12 Kết quả chạy code
Hình 13 Sơ đồ ma trận
Hình 14 Kết quả chạy code
Hình 15 Sơ đồ ma trận
Hình 16 Kết quả chạy code
Hình 17 Sơ đồ ma trận Đưa lần lượt kết quả của từng mô hình vào biểu đồ để so sánh.
Hình 18 Biểu đồ so sánh dữ liệu
Logistic Regression là mô hình mang lại kết quả tối ưu nhất trong các chỉ số như Accuracy, Precision, Recall và F1-Score, do đó, chúng ta sẽ lựa chọn mô hình này.
Tinh chỉnh tham số cho thuật toán(hyperparameter tuning)
Sau khi lựa chọn thuật toán phù hợp, việc tinh chỉnh thuật toán để đạt được kết quả tối ưu là rất quan trọng Chúng ta sẽ sử dụng phương pháp Grid Search để điều chỉnh các tham số đầu vào Cụ thể, chúng ta sẽ sử dụng thư viện `sklearn.model_selection` với hàm `GridSearchCV` và định nghĩa các tham số trong biến `param_grid`.
} grid_search = GridSearchCV(LogisticRegression(random_state= ), 42 param_grid, cv= )5 grid_search.fit(X_train, y_train) best_params = grid_search.best_params_ print("Best Parameters:", best_params)
#result: C=1, class_weight='balanced', max_iterP Áp dụng tham số tốt nhất vừa tìm được để huấn luyện một lần nữa
# Tunned Logistic Regression model_tunnedLog = LogisticRegression(C= , 1 class_weight='balanced', max_iterP) model_tunnedLog.fit(X_train, y_train) y_pred1 = model_tunnedLog.predict(X_test)
Hình 19 Kết quả chạy code
Hình 20 Sơ đồ ma trận
Khi tinh chỉnh tham số, không có sự thay đổi đáng kể về độ chính xác, vẫn duy trì ở mức 83% Mặc dù các chỉ số khác như Precision, Recall và F1-Score có sự thay đổi, nhưng mức độ thay đổi này không đáng kể.
Áp dụng mô hình đã huấn luyện vào thực tế
Ta sẽ dùng một bình luận tiêu cực, một bình luận tích cực, và một bình luận trung lập về McDonald lấy từ internet để kiểm tra.
Hình 21 Đánh giá từ khách hàng
Hình 23 Đánh giá từ khách hàng
Hàm kiểm tra chức năng dự đoán của mô hình sau khi đã được tinh chỉnh:
Thay văn bản để kiểm tra: result_label = predict(review_text, model_tunnedLog) print(f"Review: {review_text}") print(f"Predicted Sentiment: {result_label}")
As a former store manager in the 80s, I believe McDonald's typically upholds higher standards than what is currently evident in Decatur, AL I received the wrong order, and when I got my adult Happy Meal, the staff was unaware of my drink choice and size, providing a small instead of the large indicated on my receipt It's time for Decatur, AL, to implement better training and instill a sense of pride and work ethic in their employees.
Hình 24 Kết quả chạy code
I recently visited the McDonald's in Seamer, Scarborough, for the first time in years and had a surprisingly pleasant experience The restaurant was clean, and the friendly staff provided prompt service After placing my order, I was instructed to choose a table, and my food was brought directly to me, which felt exceptional for a McDonald's The atmosphere was enjoyable, and the helpfulness of the staff made a lasting impression Although I typically don't write reviews, this outstanding experience compelled me to share my thoughts.
Hình 25 Kết quả chạy code
The website and delivery services often fall short of expectations, reflecting a decline from what was once a great franchise To regain its former glory, improvements are essential.
Hình 26 Kết quả chạy code
Ba câu text dùng để kiểm tra đã được mô hình dự đoán chính xác.