1. Trang chủ
  2. » Luận Văn - Báo Cáo

tiểu luận chuyên đề tốt nghiệp trí tuệ nhân tạo 2 phân tích cảm xúc đa ngôn ngữ và ứng dụng trong thương mại điện tử

31 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Phân tích cảm xúc đa ngôn ngữ và ứng dụng trong thương mại điện tử
Tác giả Nguyễn Thị Lệ Vi, Võ Quốc Dương, Trần Thiện Nhã
Người hướng dẫn ThS. Hà Minh Tân
Trường học Trường Đại Học Nguyễn Tất Thành
Chuyên ngành Trí Tuệ Nhân Tạo
Thể loại tiểu luận chuyên đề tốt nghiệp
Năm xuất bản 2023
Thành phố TP. HCM
Định dạng
Số trang 31
Dung lượng 0,92 MB

Cấu trúc

  • CHƯƠNG 1: GIỚI THIỆU (8)
    • 1.1. Lý do chọn đề tài (8)
    • 1.2. Mục tiêu và phạm vi đề tài (8)
    • 1.3. Nghiên cứu liên quan (9)
  • CHƯƠNG 2: CƠ SỞ LÝ THUYẾT (10)
    • 2.1 Phân loại cảm xúc trong văn bản (10)
    • 2.2 Mô hình ngôn ngữ PhoBERT (10)
    • 2.3 Biểu diễn và phân loại văn bản cảm xúc (10)
    • 2.4. Các khái niệm lý thuyết cơ bản (11)
    • 2.5. Mục tiêu và sự quan trọng của đề tài (12)
  • CHƯƠNG 3: XÂY DỰNG THUẬT GIẢI/ MÔ HÌNH (14)
    • 3.2. Xây dựng thuật giải (15)
      • 3.2.1. Thu thập dữ liệu (15)
      • 3.2.2. Tiền xử lý dữ liệu (15)
      • 3.2.3. Biểu diễn văn bản bằng PhoBERT (15)
      • 3.2.4. Huấn luyện mô hình (15)
      • 3.2.5. Đánh giá hiệu suất (15)
  • CHƯƠNG 4: THỰC NGHIỆM (16)
    • 4.1. Prepare (16)
    • 4.2. Load data (17)
    • 4.3. Exploratory data analysis (17)
    • 4.4. Sentiment Analysis Model using PhoBERT (18)
    • 4.5. Training (21)
    • 4.6. Evaluation (26)
    • 4.7. Inference (0)
  • CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN (30)
    • 5.1. Kết luận (30)
    • 5.2. Hướng phát triển (30)

Nội dung

Điều này thúc đẩy sử phát triển của các ứng dụng và mô hình máy học để phân loạivà dự đoán cảm xúc trong văn bản.. Trong đề tài này, chúng em tập trung vào việc sự dụngPhoBERT, một biểu

GIỚI THIỆU

Lý do chọn đề tài

Trong thời đại số hóa ngày nay việc phân tích và hiểu cảm xúc trong văn bản tiếng việt trở nên ngày càng quan trọng Sự phát triển của mạng xã hội, các trang web đánh giá sản phẩm và dịch vụ, cũng như khả năng sản xuất và chia sẽ nội dung trên internet đã tạo ra một số lượng lớn dữ liệu văn bản chứa cảm xúc Việc hiểu rõ cảm xúc này có thể giúp các doanh nghiệp nắm bắt ý kiến của khách hàng, đánh giá sản phẩm và dịch vụ của họ, và cải thiện trải nghiệm người dùng Ngoài ra, trong nghiên cứu khoa học xã hội, việc phân tích cảm xúc trong văn bản có thể giúp hiểu sâu hơn về tình hình xã hội và ý kiến của người dân. Điều này thúc đẩy sử phát triển của các ứng dụng và mô hình máy học để phân loại và dự đoán cảm xúc trong văn bản Trong đề tài này, chúng em tập trung vào việc sự dụngPhoBERT, một biểu diễn ngôn ngữ cho tiếng Việt dựa trên kiến trúc BERT, để phân loại cảm xúc trong văn bản Tiếng Việt.

Mục tiêu và phạm vi đề tài

Mục tiêu chính của đề tài này là phát triển một mô hình máy học có khả năng phân loại cảm xúc trong văn bản tiếng Việt bằng cách sự dụng PhoBERT Cụ thể, các mục tiêu con Bao gồm:

- Thu thập và chuẩn bị một tập dữ liệu chứa các văn bản tiếng Việt đã được gán nhãn theo cảm xúc.

- Tiền xử lý dữ liệu văn bản để loại bỏ nhiễu và chuẩn hóa.

- Sử dụng PhoBERT để biểu diễn các văn bản thành các vectơ ngôn ngữ.

- Huấn luyện một mô hình phân loại cảm xúc sử dụng dữ liệu được biểu diễn bởi PhoBERT.

- Đánh giá hiệu suất của mô hình trên tập dữ liệu kiểm tra.

Phạm vi của đề tài này bao gồm việc xây dựng và đánh giá mô hình phân loại cảm xúc, tập trung vào các cảm xúc phổ biến như vui vẻ, buồn bã, tức giận, sợ hãi, vv. Đề tài này không đi sâu vào việc xử lý dữ liệu lớn hoặc xem xét các khía cạnh phức tạp hơn của ngôn ngữ như ngữ pháp hoặc ngữ nghĩa.

Nghiên cứu liên quan

Tên bài báo: MỘT CẢI TIẾN CỦA PHOBERT NHẰM TĂNG KHẢ NĂNG HIỂU TIẾNG VIỆT CỦA CHATBOT THÔNG TIN KHÁCH SẠN

Tác giả: {Ngô Văn Sơn, Nguyễn Thị Minh Nghĩa, Hoàng Thị Huế, Nguyễn Hữu Liêm,

Trường Du lịch –Đại học Huế, Việt Nam Chi nhánh Gia Lai -Tập đoàn Bưu chính Viễn thông Việt Nam, Việt Nam Ban Đào tạo và Công tác Sinh viên –Đại học Huế, Việt Nam

Tóm tắt: Chatbot hỗ trợ thông tin du lịch bằng tiếng Việt đang thu hút nhiều sự quan tâm của giới nghiên cứu và cả kinh doanh Các chatbot truyền thống thường được xây dựng dựa trên cơ sở các quy tắc, kiến thức hay trạng thái hữu hạn nên thường kém hiệu quả Gần đây, nhờ những bước tiến lớn của học máy trong xử lý ngôn ngữ tự nhiên, chatbot đã đạt được những bước tiến đáng kể trong phân loại ý định, trích xuất thực thể và phân tích tình cảm Bài báo này đề xuất một cải tiến của mô hình tiền huấn luyện nhằm xây dựng một chatbot thông tin khách sạn bằng tiếng Việt Với đề xuất điều chỉnh các mô hình tiền huấn luyện nhằm đánh giá xem mô hình nào hoạt động tốt nhất, kết quả mô phỏng cho thấy rằng đề xuất của chúng tôi đã mang lại hiệu quả đáng kể với Accuracy 96,4%,F1- score 96,9% và Precision 97,4%.

Tham khảo: https://jos.hueuni.edu.vn/index.php/hujos-tt/article/view/6978/1618

CƠ SỞ LÝ THUYẾT

Phân loại cảm xúc trong văn bản

Khái niệm về phân loại cảm xúc: Phân loại cảm xúc trong văn bản là quá trình xác định và gán các nhãn cảm xúc cho các đoạn văn bản Cảm xúc có thể là các loại như vui vẻ, buồn bã, tức giận, sợ hãi, và nhiều loại khác. Ứng dụng của phân loại cảm xúc: Phân loại cảm xúc có nhiều ứng dụng trong thế giới thực, bao gồm phân tích ý kiến, đánh giá sản phẩm, quản lý dòng thời gian trên mạng xã hội, và theo dõi cảm xúc của người dùng.

Các phương pháp phân loại cảm xúc: Các phương pháp phân loại cảm xúc bao gồm sử dụng các mô hình máy học như Naive Bayes, Support Vector Machines, Random Forest, và mạng nơ-ron Gần đây, mô hình ngôn ngữ như BERT và biến thể của nó đã được sử dụng rộng rãi để cải thiện hiệu suất phân loại cảm xúc.

Mô hình ngôn ngữ PhoBERT

Giới thiệu về PhoBERT: PhoBERT là một biến thể của mô hình ngôn ngữ BERT được tinh chỉnh cho tiếng Việt Nó đã được đào tạo trên một lượng lớn dữ liệu tiếng Việt và có khả năng biểu diễn ngôn ngữ và hiểu sâu về cấu trúc ngữ pháp tiếng Việt.

Kiến trúc của PhoBERT: PhoBERT sử dụng một kiến trúc Transformer với hàng triệu tham số Nó có khả năng biểu diễn văn bản thành các vectơ ngôn ngữ có chiều sâu, giúp cải thiện hiệu suất của các tác vụ liên quan đến ngôn ngữ tự nhiên. Ứng dụng của PhoBERT: PhoBERT đã được ứng dụng rộng rãi trong nhiều tác vụ ngôn ngữ tự nhiên như phân loại văn bản, dự đoán từ ngữ tiếng Việt, và phân loại cảm xúc.

Biểu diễn và phân loại văn bản cảm xúc

Biểu diễn văn bản cảm xúc: Biểu diễn văn bản cảm xúc là quá trình chuyển đổi các đoạn văn bản thành các vectơ số học có chiều sâu PhoBERT đã được sử dụng để biểu diễn văn bản cảm xúc với hiệu suất cao.

Phân loại văn bản cảm xúc: Các phương pháp phân loại văn bản cảm xúc sử dụng biểu diễn văn bản để dự đoán nhãn cảm xúc của văn bản đó Mô hình máy học hoặc mô hình mạng nơ-ron thường được sử dụng để thực hiện tác vụ này.

Các khái niệm lý thuyết cơ bản

Xử lý ngôn ngữ tự nhiên (NLP): NLP là lĩnh vực nghiên cứu và ứng dụng công nghệ liên quan đến hiểu và tạo ra ngôn ngữ tự nhiên bằng máy tính Nó bao gồm nhiều nhiệm vụ như dự đoán từ vựng, tạo văn bản, phân tích cú pháp, và phân loại cảm xúc, mà đề tài này tập trung vào.

BERT (Bidirectional Encoder Representations from Transformers): BERT là một mô hình học máy sử dụng kiến trúc Transformer mạnh mẽ Điều quan trọng là BERT hiểu được ngữ cảnh từ cả hai phía của một từ trong một câu, giúp cải thiện hiệu suất trong nhiều tác vụ NLP, bao gồm phân loại cảm xúc.

Học máy sâu (Deep Learning): Mô hình PhoBERT và các mô hình NLP tiến tiến khác thường dựa vào học máy sâu để hiểu và xử lý ngôn ngữ tự nhiên Điều này bao gồm việc sử dụng mạng nơ-ron sâu để tự động học các biểu diễn phức tạp từ dữ liệu lớn.

Thu thập và gán nhãn dữ liệu: Để đào tạo mô hình phân loại cảm xúc, bạn cần một tập dữ liệu lớn chứa các đoạn văn bản đã được gán nhãn cảm xúc Quá trình này đòi hỏi công sức để thu thập và xử lý dữ liệu.

Dữ liệu đào tạo và đánh giá: Để đào tạo mô hình phân loại cảm xúc, cần có tập dữ liệu lớn chứa các ví dụ văn bản đã được gán nhãn theo cảm xúc Tập dữ liệu này được sử dụng để huấn luyện mô hình và sau đó đánh giá hiệu suất của nó bằng cách sử dụng các metric như độ chính xác, F1-score, và ma trận nhầm lẫn. Ứng dụng: Cuối cùng, đề tài này liên quan đến việc áp dụng kết quả của mô hình vào các ứng dụng thực tế như quản lý dòng thời gian trên mạng xã hội, dự đoán tâm trạng của người dùng, và nhiều ứng dụng khác trong kinh doanh và xã hội học.

Mục tiêu và sự quan trọng của đề tài

Ứng dụng trong thế giới thực: Mục tiêu cuối cùng của đề tài này là xây dựng một hệ thống có khả năng phân loại cảm xúc trong văn bản tiếng Việt một cách tự động và chính xác Việc này có tiềm năng ứng dụng rộng rãi trong nhiều lĩnh vực như quảng cáo trực tuyến, phản hồi khách hàng tự động, dự đoán xu hướng thị trường, và xây dựng các ứng dụng phân tích tâm trạng xã hội.

Tầm quan trọng của ngôn ngữ tiếng Việt: Với một số đối tượng nghiên cứu và ứng dụng NLP, tiếng Việt là một ngôn ngữ chưa được nghiên cứu sâu rộng, và có ít tài liệu và tài liệu đào tạo so với các ngôn ngữ phổ biến khác Vì vậy, việc phát triển các công cụ và mô hình NLP tiếng Việt, như PhoBERT, đóng vai trò quan trọng trong việc phát triển và mở rộng các ứng dụng trực tuyến cho cộng đồng người sử dụng tiếng Việt.

Nắm bắt ngữ cảnh và sự biểu đạt: Một trong những thách thức lớn trong phân loại cảm xúc là khả năng nắm bắt sự biểu đạt và ngữ cảnh trong văn bản Điều này bao gồm việc hiểu được nghĩa sâu sắc của từng từ và cách chúng kết hợp lại để tạo nên ý nghĩa trong văn bản Mô hình PhoBERT, với kiến thức sâu sắc về tiếng Việt, có khả năng hỗ trợ trong việc nắm bắt điều này.

Nghiên cứu liên quan đến xã hội và tâm lý học: Đề tài này cũng liên quan đến nghiên cứu về xã hội và tâm lý học, bởi vì cảm xúc là một phần quan trọng của tâm trạng và hành vi con người Các kết quả từ việc phân loại cảm xúc có thể giúp trong việc nghiên cứu tâm trạng của cộng đồng trực tuyến và hiểu sâu hơn về cảm xúc con người trong môi trường kỹ thuật số.

Biểu diễn từ vựng và câu trong NLP: Để hiểu cơ sở của việc phân loại cảm xúc, cần hiểu về biểu diễn từ vựng và câu trong NLP Các từ và câu thường được biểu diễn dưới dạng vectơ số học để máy tính có thể xử lý Mô hình PhoBERT tạo ra các biểu diễn này thông qua quá trình học sâu từ dữ liệu đào tạo.

Quá trình huấn luyện và truyền dẫn kiến thức: Mô hình PhoBERT được huấn luyện qua một quá trình gọi là "truyền dẫn kiến thức" (transfer learning), trong đó nó học từ một tập dữ liệu lớn trước đó, sau đó có thể được điều chỉnh cho nhiệm vụ cụ thể như phân loại cảm xúc Cách này đã giúp cải thiện độ hiệu quả của các mô hình NLP.

Tích hợp ngữ nghĩa và ngữ cảnh: Để phân loại cảm xúc một cách chính xác, cần tích hợp cả ngữ nghĩa và ngữ cảnh của từng câu Mô hình PhoBERT, nhờ kiến trúc Transformer, có khả năng xử lý thông tin ngữ nghĩa và ngữ cảnh một cách hiệu quả. Ứng dụng trong thực tế: Cơ sở lý thuyết này có thể được áp dụng để xây dựng hệ thống theo dõi cảm xúc trong thời gian thực trên mạng xã hội, gợi ý sản phẩm dựa trên cảm xúc của người dùng, hoặc phân tích tương tác khách hàng để cải thiện dịch vụ.

Thách thức trong xử lý ngôn ngữ tự nhiên tiếng Việt: Tiếng Việt có những đặc điểm riêng về ngữ pháp, ngữ âm, và từ vựng, và nó đòi hỏi sự hiểu biết sâu sắc về ngôn ngữ này khi xử lý ngôn ngữ tự nhiên Điều này làm cho việc phát triển mô hình NLP tiếng Việt như PhoBERT trở nên cần thiết.

Liên quan đến xã hội và thương mại: Việc phân loại cảm xúc trong văn bản tiếng

Việt có ứng dụng quan trọng trong lĩnh vực xã hội, truyền thông, và thương mại Nó có thể giúp doanh nghiệp nắm bắt ý kiến của khách hàng, quản lý thương hiệu, và tối ưu hóa chiến lược tiếp thị.

XÂY DỰNG THUẬT GIẢI/ MÔ HÌNH

Xây dựng thuật giải

Nguồn dữ liệu: Dữ liệu cho nghiên cứu này được thu thập từ các nguồn khác nhau trên internet, bao gồm các trang web đánh giá sản phẩm, mạng xã hội, diễn đàn, và các nguồn văn bản tiếng Việt trực tuyến.

Gán nhãn cảm xúc: Dữ liệu thu thập được đã được gán nhãn cảm xúc bằng cách sử dụng một nhóm người gán nhãn Các nhãn cảm xúc bao gồm các loại như vui vẻ, buồn bã, tức giận, sợ hãi, và các loại khác.

3.2.2 Tiền xử lý dữ liệu

Chuẩn hóa và làm sạch dữ liệu: Dữ liệu văn bản thu thập được đã được chuẩn hóa và làm sạch để loại bỏ các ký tự không cần thiết, dấu câu, và khoảng trắng dư thừa Điều này giúp làm giảm nhiễu và chuẩn hóa dữ liệu để tiếp tục xử lý.

Tách từ và mã hóa: Dữ liệu sau đó được tách từ và mã hóa thành dạng số học.

3.2.3 Biểu diễn văn bản bằng PhoBERT

Sử dụng PhoBERT: Văn bản đã được mã hóa được biểu diễn bằng mô hình ngôn ngữ PhoBERT để chuyển đổi thành các vectơ ngôn ngữ có chiều sâu.

Kiến trúc mô hình: Chúng tôi sử dụng một mô hình mạng nơ-ron sâu (deep neural network) để phân loại cảm xúc Mô hình này bao gồm các lớp LSTM (Long Short-Term Memory) và lớp kết nối đầy đủ (fully connected) để học và dự đoán cảm xúc.

Hàm mất mát và tối ưu hóa: Mô hình được đào tạo bằng cách tối ưu hóa hàm mất mát phù hợp, chẳng hạn như Cross-Entropy Loss Thuật toán tối ưu hóa như Adam hoặc SGD (Stochastic Gradient Descent) có thể được sử dụng để điều chỉnh trọng số của mạng nơ- ron.

Tập kiểm tra: Dữ liệu đã được chia thành tập huấn luyện và tập kiểm tra Tập kiểm tra được sử dụng để đánh giá hiệu suất của mô hình. Độ đo hiệu suất: Chúng tôi sử dụng các độ đo như độ chính xác (accuracy), độ phủ(recall), và F1-score để đánh giá khả năng phân loại cảm xúc của mô hình.

THỰC NGHIỆM

Prepare

Các thư viện được sử dụng và có sẵn bao gồm:

Code: import torch import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from gensim.utils import simple_preprocess from sklearn.model_selection import StratifiedKFold from sklearn.metrics import classification_report, confusion_matrix import torch.nn as nn from torch.optim import AdamW from torch.utils.data import Dataset, DataLoader from transformers import get_linear_schedule_with_warmup, AutoTokenizer,

AutoModel, logging import warnings warnings.filterwarnings("ignore") logging.set_verbosity_error()

Load data

Đầu tiên đọc file dữ liệu:

Kết quả: gồm 3 cột “ Emotion, Sentence, kfold “

3706 Enjoyment dễ thương ghê ! làm mình nhớ các cậu bạn cùng 2.0

3913 Enjoyment đáng yêuc vãi anh ơi 3.0

658 Surprise cha con y chang nhau 😂 1 khuôn đúc ra 0.0

821 Enjoyment lợi ích của việc giữ vững quan điểm 😄 0.0

Nhiệm vụ của mình sẽ define ra câu văn bản “ sentence “ và output là các “ emotion “

Exploratory data analysis

Dữ liệu đầu vào có kích thước là: Ý nghĩa:

- 6234 là số câu và 3 tương ứng với 3 cột gồm: Emotion, Sentence, kfold

- 693 là số câu và 2 tươn ứng với 2 cột gồm: Emotion, Sentence

Phân bổ trong thuật train

Code: train_df = get_datắ/content/drive/MyDrive/X@ lý ngAn ngB tC nhiên/Data/train_nor_811.xlsx') valid_df = get_datắ/content/drive/MyDrive/X@ lý ngAn ngB tC nhiên/Data/valid_nor_811.xlsx') test_df = get_datắ/content/drive/MyDrive/X@ lý ngAn ngB tC nhiên/Data/test_nor_811.xlsx')

Code: print(np.shape(train_df)) print(np.shape(test_df))

Code: sns.countplot(x='Emotion', data=train_df)

Qua kết quả cho thấy Enjoyment chiếm cao nhất, còn Surprise và Fear rất ít

Sentiment Analysis Model using PhoBERT

1 Cắt văn bản thành các token

2 Thêm vector [CLS] và vector [SEP] token vào vector bắt đầu và kết thúc

3 Cắt hoặc padding theo các kích thước cố định (max length)

Sau khi đưa vào mình cắt ra thành từng câu từng chữ

Hầu hết các data được train thì nó nằm trong khoảng 10 đến 20 token, và gần như là không có cái nào với kích thước là 120 hết

Code: all_data = train_df.Sentence.tolist() + test_df.Sentence.tolist() all_data = [' '.join(simple_preprocess(text)) for text in all_data] encoded_text = [tokenizer.encode(text, add_special_tokens=True) for text in all_data] token_lens = [len(text) for text in encoded_text] sns.set(rc={'figure.figsize':(11.7,8.27)}) sns.displot(token_lens, height=5, aspect=3) plt.xlim([0,max(token_lens)]) plt.xlabel('Token Count')

Sẽ dùng mô hình PhoBERT-base và đi qua class “ Dropout ” và “ Linear “

Code: class SentimentClassifier(nn.Module): def init (self, n_classes): super(SentimentClassifier, self). init () self.bert = AutoModel.from_pretrained("vinai/phobert-base") self.drop = nn.Dropout(p=0.3) self.fc = nn.Linear(self.bert.config.hidden_size, n_classes) nn.init.normal_(self.fc.weight, std=0.02) nn.init.normal_(self.fc.bias, 0)

Code: def forward(self, input_ids, attention_mask): last_hidden_state, output = self.bert( input_ids=input_ids, attention_mask=attention_mask, return_dictse # Dropout will errors if without this

) x = self.drop(output) x = self.fc(x) return x

Training

Đọc từng dòng của dữ liệu đưa lên GPU và cho chạy qua mô hình sau đó tính đạo hàm ngược lại “ backward “ theo hàm loss sau đó chạy optimizer.step và lr_scheduler để thay đổi tăng giảm

Code: def train(model, criterion, optimizer, train_loader): model.train() losses = [] correct = 0 for data in train_loader: input_ids = data['input_ids'].to(device) attention_mask = data['attention_masks'].to(device) targets = data['targets'].to(device) optimizer.zero_grad() outputs = model( input_ids=input_ids, attention_mask=attention_mask

_, pred = torch.max(outputs, dim=1) correct += torch.sum(pred == targets) losses.append(loss.item()) loss.backward() nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0) optimizer.step() lr_scheduler.step()

Code: print(f'Train Accuracy: {correct.double()/len(train_loader.dataset)} Loss: {np.mean(losses)}') def eval(test_data = False): model.eval() losses = [] correct = 0 with torch.no_grad(): data_loader = test_loader if test_data else valid_loader for data in data_loader: input_ids = data['input_ids'].to(device) attention_mask = data['attention_masks'].to(device) targets = data['targets'].to(device) outputs = model( input_ids=input_ids, attention_mask=attention_mask

_, pred = torch.max(outputs, dim=1) loss = criterion(outputs, targets) correct += torch.sum(pred == targets) losses.append(loss.item()) if test_data: print(f'Test Accuracy: {correct.double()/len(test_loader.dataset)} Loss: {np.mean(losses)}') return correct.double()/len(test_loader.dataset) else: print(f'Valid Accuracy: {correct.double()/len(valid_loader.dataset)} Loss: {np.mean(losses)}') return correct.double()/len(valid_loader.dataset)

Phương pháp training sẽ sử dụng với K-Fold

Code: def prepare_loaders(df, fold): df_train = df[df.kfold != fold].reset_index(drop=True) df_valid = df[df.kfold == fold].reset_index(drop=True) train_dataset = SentimentDataset(df_train, tokenizer, max_len0) valid_dataset = SentimentDataset(df_valid, tokenizer, max_len0) train_loader = DataLoader(train_dataset, batch_size, shuffle=True, num_workers=2) valid_loader = DataLoader(valid_dataset, batch_size, shuffle=True, num_workers=2) return train_loader, valid_loader

Code: for fold in range(skf.n_splits): print(f' -Fold: {fold+1} -') train_loader, valid_loader = prepare_loaders(train_df, fold=fold) model = SentimentClassifier(n_classes=7).to(device) criterion = nn.CrossEntropyLoss()

# Batchsize: 16, 32 optimizer = AdamW(model.parameters(), lr.-5) lr_scheduler = get_linear_schedule_with_warmup( optimizer, num_warmup_steps=0, num_training_steps=len(train_loader)*EPOCHS

) best_acc = 0 for epoch in range(EPOCHS): print(f'Epoch {epoch+1}/{EPOCHS}') print('-'*30) train(model, criterion, optimizer, train_loader) val_acc = eval() if val_acc > best_acc: torch.save(model.state_dict(), f'phobert_fold{fold+1}.pth') best_acc = val_acc

Evaluation

Đánh giá và thống kê lại cái văn bản tương ứng với dự đoán và giá trị thực sự là bao nhiêu

24 Code: def test(data_loader): models = [] for fold in range(skf.n_splits): model = SentimentClassifier(n_classes=7) model.to(device) model.load_state_dict(torch.load(f'phobert_fold{fold+1}.pth')) model.eval() models.append(model) texts = [] predicts = [] predict_probs = [] real_values = [] for data in data_loader: text = data['text'] input_ids = data['input_ids'].to(device) attention_mask = data['attention_masks'].to(device) targets = data['targets'].to(device) total_outs = [] for model in models: with torch.no_grad(): outputs = model( input_ids=input_ids, attention_mask=attention_mask

) total_outs.append(outputs) total_outs = torch.stack(total_outs)

_, pred = torch.max(total_outs.mean(0), dim=1) texts.extend(text) predicts.extend(pred) predict_probs.extend(total_outs.mean(0)) real_values.extend(targets) predicts = torch.stack(predicts).cpu() predict_probs = torch.stack(predict_probs).cpu() real_values = torch.stack(real_values).cpu() print(classification_report(real_values, predicts)) return real_values, predicts

Code: test_dataset = SentimentDataset(test_df, tokenizer, max_lenP)

Heatmap between Predict and Ground Truth

Code: class_names = ['Enjoyment', 'Disgust', 'Sadness', 'Anger', 'Surprise', 'Fear', 'Other'] sns.heatmap(confusion_matrix(real_values, predicts), annotse, xticklabels = class_names, yticklabels = class_names)

Code: def check_wrong(real_values, predicts): wrong_arr = [] wrong_label = [] for i in range(len(predicts)): if predicts[i] != real_values[i]: wrong_arr.append(i) wrong_label.append(predicts[i]) return wrong_arr, wrong_label for i in range(15): print('-'*50) wrong_arr, wrong_label = check_wrong(real_values, predicts) print(test_df.iloc[wrong_arr[i]].Sentence) print(f'Predicted: ({class_names[wrong_label[i]]}) vs Real label:

({class_names[real_values[wrong_arr[i]]]})')

Code: def infer(text, tokenizer, max_len0): encoded_review = tokenizer.encode_plus( text, max_length=max_len, truncation=True, add_special_tokens=True, padding='max_length', return_attention_mask=True, return_token_type_idsse, return_tensors='pt',

) input_ids = encoded_review['input_ids'].to(device) attention_mask = encoded_review['attention_mask'].to(device) output = model(input_ids, attention_mask)

_, y_pred = torch.max(output, dim=1) print(f'Text: {text}') print(f'Sentiment: {class_names[y_pred]}')

Inference

5.1 Kết luận Đề tài " PHÂN TÍCH CẢM XÚC ĐA NGÔN NGỮ VÀ ỨNG DỤNG TRONG THƯƠNG MẠI ĐIỆN TỬ" là một nhiệm vụ quan trọng và thú vị trong lĩnh vực xử lý ngôn ngữ tự nhiên (NLP) và học máy Mô hình PhoBERT, một biến thể của BERT đào tạo trên dữ liệu tiếng Việt, đã chứng minh khả năng mạnh mẽ trong việc biểu diễn và phân loại cảm xúc trong văn bản tiếng Việt Khi sử dụng mô hình này cùng với quy trình phát triển hệ thống phân loại cảm xúc, chúng ta đã có được một cơ sở mạnh mẽ cho việc ứng dụng trong nhiều lĩnh vực như phân tích thị trường, quản lý thương hiệu, và cải thiện dịch vụ khách hàng

- Nghiên cứu thêm về cảm xúc đa dạng hơn: Một hướng phát triển tiếp theo có thể là mở rộng mô hình để có khả năng phân loại các loại cảm xúc đa dạng hơn, bao gồm cảm xúc phức tạp và cảm xúc tương tác.

- Sử dụng dữ liệu lớn hơn: Để cải thiện hiệu suất của mô hình, việc thu thập và sử dụng dữ liệu lớn hơn có thể được thực hiện Điều này có thể bao gồm thu thập dữ liệu từ nhiều nguồn khác nhau trên internet.

- Tích hợp với ứng dụng thực tế: Mô hình có thể được tích hợp vào các ứng dụng thực tế như chăm sóc khách hàng tự động, theo dõi tình hình xã hội, hoặc phân loại nội dung trên mạng xã hội.

- Nghiên cứu liên quan đến văn bản ngắn: Để ứng dụng mô hình cho các loại văn bản ngắn như tin nhắn ngắn, cần thực hiện nghiên cứu về việc biểu diễn và phân loại cảm xúc trong ngữ cảnh này.

- Ứng dụng trong lĩnh vực thương mại điện tử: Phát triển hệ thống phân loại cảm xúc để cải thiện quy trình mua sắm trực tuyến, đặc biệt là trong việc gợi ý sản phẩm dựa trên cảm xúc của người dùng.

* Điều này giúp đảm bảo rằng nghiên cứu có ý nghĩa và có thể được ứng dụng trong thực tế, và cung cấp hướng dẫn cho các nghiên cứu tương lai trong lĩnh vực phân loại cảm xúc và sử dụng mô hình ngôn ngữ trong ngôn ngữ tiếng Việt.

Ngày đăng: 04/09/2024, 17:50

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w