PHÂN TÍCH CẢM XÚC DỰA TRÊN VĂN BẢN BẰNG MÔ HÌNH HỌC MÁY VÀ XỬ LÝ NGÔN NGỮ TỰ NHIÊN BERT

63 8 0
PHÂN TÍCH CẢM XÚC DỰA TRÊN VĂN BẢN  BẰNG MÔ HÌNH HỌC MÁY VÀ XỬ LÝ NGÔN NGỮ TỰ NHIÊN BERT

Đ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

Cảm xúc là một phần quan trọng của cuộc sống con người, và chúng thường được thể hiện thông qua ngôn ngữ. Trong thời đại số hóa ngày nay, với sự gia tăng của mạng xã hội, diễn đàn trực tuyến và các nền tảng giao tiếp, lượng lớn dữ liệu văn bản chứa đựng những dấu hiệu về cảm xúc của con người. Điều này tạo ra một cơ hội lớn để áp dụng các phương pháp máy học và xử lý ngôn ngữ tự nhiên để nhận diện và hiểu cảm xúc trong văn bản. Được thúc đẩy bởi sự quan tâm đối với trải nghiệm người dùng, quản lý dữ liệu lớn, và ứng dụng rộng rãi trong các lĩnh vực như tiếp thị, y tế, và truyền thông, đề tài nhận diện cảm xúc trong văn bản đã trở thành một lĩnh vực nghiên cứu sôi động và có ý nghĩa lớn. Có nhiều mô hình được dùng để nhận diện cảm xúc trong văn bản như: Naive Bayes, Support Vector Machines (SVM), Logistic Regression, Random Forests, Long ShortTerm Memory (LSTM), Gated Recurrent Unit (GRU), Transformer và BERT (Bidirectional Encoder Representations from Transformers). Mỗi mô hình đều có ưu và nhược điểm riêng của nó, chúng đều đưa ra được những kết quả tốt. BERT là một kiến trúc transformer đã được huấn luyện trước trên lượng lớn dữ liệu ngôn ngữ. BERT có khả năng hiểu ngôn ngữ một cách sâu sắc và có thể được finetuned cho các nhiệm vụ như nhận diện cảm xúc. Dựa vào điều này bọn em chọn mô hình BERT làm mô hình để nhận diện cảm xúc trong văn bản cho đề tài của nhóm.

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN ======***====== ĐỒ ÁN CHUYÊN NGÀNH NGÀNH: KHOA HỌC MÁY TÍNH ĐỀ TÀI: PHÂN TÍCH CẢM XÚC DỰA TRÊN VĂN BẢN BẰNG MƠ HÌNH HỌC MÁY VÀ XỬ LÝ NGÔN NGỮ TỰ NHIÊN BERT GVHD: TS Nguyễn Mạnh Cường Nhóm: Họ Tên Mã Sinh Viên Đồn Duy Thành 2020603903 Nguyễn Tuấn Anh 2020604631 Nguyễn Ngọc Duy 2020605168 Lớp: 20231IT6052002 Hà Nội 2023 Khóa: 15 MỤC LỤC DANH MỤC HÌNH ẢNH LỜI CẢM ƠN LỜI NÓI ĐẦU CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI 1.1 Lý chọn đề tài 1.2 Mục tiêu đặt 1.3 Tìm hiểu chung toán 1.4 Bài toán nhận diện cảm xúc văn 1.5 Một số kỹ thuật có để giải tốn 10 CHƯƠNG 2: MƠ HÌNH TRUYỀN THỐNG 12 2.1 Mạng nơron truy hồi (RNN – RECURRENT NEURAL NETWORK) 12 2.1.1 Dữ liệu dạng Sequence 12 2.1.2 Mơ hình toán RNN 12 2.2 Mơ hình LSTM (Long Short Term Memory) 14 2.2.1 Ý tưởng mơ hình LSTM 15 2.2.2 Trình tự bước LSTM 17 2.3 Transformer Seq2Seq Model 18 2.3.1 Quá trình encoder decoder 18 2.3.2 Seq2Seq model Attention 19 CHƯƠNG 3: MƠ HÌNH BERT 25 3.1 Lý thuyết sở NLP 25 3.1.1 TOKENIZATION 25 3.1.2 STEMMING (Đưa từ dạng bản) 25 3.1.3 STOPWORD (Ký tự/Từ vô nghĩa) 26 3.1.4 POS (Loại từ) 26 3.1.5 Text Vectorization or Encoding 27 3.2 Transformer model 30 3.2.1 Encoder 31 3.2.2 Decoder 42 3.2 Mơ hình Bert 47 3.3.1 Fine-tuning model Bert 48 3.3.2 Masked ML (MLM) 49 3.3.3 Next Sentence Prediction (NSP) 50 3.3.4 Các kiến trúc model BERT 50 3.3.4 GLUE 51 CHƯƠNG 4: ỨNG DỤNG BERT VÀO BÀI TOÁN PHÂN LOẠI VĂN BẢN 52 KẾT LUẬN 62 TÀI LIỆU THAM KHẢO 63 DANH MỤC HÌNH ẢNH Hình Mơ Hình RNN 12 Hình 2 Mơ Hình RNN Rút Gọn 13 Hình loss Function 14 Hình Mơ Hình LSTM chứa tầng ẩn (3 sigmoid tanh) 15 Hình Diễn Giải Các Kí Hiệu Trong Đồ Thị Mạng Nơ Ron 15 Hình Đường trạng thái (cell state) mạng LSTM 16 Hình Một Cổng Của Hàm Sigmoid LSTM 16 Hình Tầng Cổng Quên (Forget Gate Layer) 17 Hình Cập nhật giá trị cho ô trạng thái cách kết hợp kết từ tầng cổng vào tầng ẩm hàm 17 Hình 10 Ơ Trạng Thái 18 Hình 11 Điều chỉnh thơng tin đầu thơng qua hàm 18 Hình 12 Seq2Seq model 19 Hình 13 Encoder Model 20 Hình 14 Decoder Model 20 Hình 15 Động Lực Trong Attention 21 Hình 16 Các Thành Phân Trong Attention 22 Hình 17 Các Thành Phần Của Attention 22 Hình 18 Các Bước Trong Attention 23 Hình 19 số hàm α hay sử dụng 24 Hình Bag of word 28 Hình Mơ hình CBOW 29 Hình 3 Mơ hình Transformer tổng quát 30 Hình Encoder Decoder 30 Hình Ngăn xếp Encoder Decoder 31 Hình Word embedding từ 31 Hình Cấu trúc Encoder 32 Hình Ví dụ mã hóa the animal 33 Hình Tạo vector Q, K, V cho từ 33 Hình 10 Tính điểm cho vector từ 34 Hình 11 Áp dụng hàm softmax để tính score 35 Hình 12 Kết self-attention 36 Hình 13 Tổng quát quy trình tính self-attention 36 Hình 14 Multi-headed attention 37 Hình 15 Cộng headed attention 37 Hình 16 Nhân với vector W0 38 Hình 17 Tổng quát Multi-headed attention 38 Hình 18 Mối quan hệ từ với từ câu 39 Hình 19 Thêm vecto vị trí trước đưa từ vào mơ hình 40 Hình 20 Kết nối residual 41 Hình 21 Kết nối residual mơ hình Transformer 42 Hình 22 Quá trình áp dụng Linear Softmax 42 Hình 23 Quá trình giải mã 43 Hình 24 Ví dụ áp dụng Linear Softmax 44 Hình 25 So sánh mát 45 Hình 26 Mơ hình BERT 48 Hình 27 Quá trình Masked để dự đoán 49 Hình 28 tác vụ để đánh giá mơ hình 51 LỜI CẢM ƠN Trước tiên với tình cảm sâu sắc chân thành nhất, cho phép em bày tỏ lòng biết ơn đến thầy cô trường Đại học Công Nghiệp Hà Nội, đặc biệt thầy cô khoa Công Nghệ Thông Tin trường tạo điều kiện cho em có mơn học giúp chúng em củng cố kiến thức kinh nghiệm Và em xin chân thành cảm ơn thầy giáo Tiến Sĩ Nguyễn Mạnh Cường người tận tâm hướng dẫn chúng em qua buổi nói chuyện, hướng dẫn, thảo luận lĩnh vực đề tài Chúng em biết ơn góp ý, dẫn kiến thức chuyên môn mà thầy giáo chia sẻ với chúng em trình thực báo cáo Nhờ lời khuyên hướng dẫn thầy giúp chúng em có hội học hỏi phát triển kỹ Khơng giúp chúng em hồn thành đề tài cách thành cơng, đóng góp thầy giáo cịn giúp chúng em hiểu rõ lĩnh vực củng cố kiến thức chuẩn bị cho đồ án tốt nghiệp tới Nhờ thầy giáo chúng em có hội nắm bắt khía cạnh quan trọng phát triển tư sáng tạo Đề tài khơng thể hồn thành cách xuất sắc khơng có giúp đỡ thầy Chúng em cảm ơn tâm huyết nhiệt tình giúp đỡ chúng em xuyên suốt trình thực báo cáo Trong trình thực báo cáo, trình thực đề tài chọn chúng em cố gắng xây dựng đề tài Tuy nhiên q trình thực khó tránh khỏi sai sót Em mong nhận ý kiến đóng góp từ thầy để học thêm nhiều kinh nghiệm hoàn thành tốt báo cáo tốt nghiệp tới Em xin chúc thầy mạnh khỏe, vui vẻ thành công sống Em xin chân thành cảm ơn! Nhóm thực : Nhóm LỜI NĨI ĐẦU Cảm xúc phần quan trọng sống người, chúng thường thể thông qua ngôn ngữ Trong thời đại số hóa ngày nay, với gia tăng mạng xã hội, diễn đàn trực tuyến tảng giao tiếp, lượng lớn liệu văn chứa đựng dấu hiệu cảm xúc người Điều tạo hội lớn để áp dụng phương pháp máy học xử lý ngôn ngữ tự nhiên để nhận diện hiểu cảm xúc văn Được thúc đẩy quan tâm trải nghiệm người dùng, quản lý liệu lớn, ứng dụng rộng rãi lĩnh vực tiếp thị, y tế, truyền thông, đề tài nhận diện cảm xúc văn trở thành lĩnh vực nghiên cứu sơi động có ý nghĩa lớn Có nhiều mơ hình dùng để nhận diện cảm xúc văn như: Naive Bayes, Support Vector Machines (SVM), Logistic Regression, Random Forests, Long Short-Term Memory (LSTM), Gated Recurrent Unit (GRU), Transformer BERT (Bidirectional Encoder Representations from Transformers) Mỗi mơ hình có ưu nhược điểm riêng nó, chúng đưa kết tốt BERT kiến trúc transformer huấn luyện trước lượng lớn liệu ngơn ngữ BERT có khả hiểu ngơn ngữ cách sâu sắc fine-tuned cho nhiệm vụ nhận diện cảm xúc Dựa vào điều bọn em chọn mơ hình BERT làm mơ hình để nhận diện cảm xúc văn cho đề tài nhóm Nội dung báo cáo bọn em chia thành chương: • • • • Chương 1: Giới thiệu qua đề tài Chương 2: Mơ hình truyền thống Chương 3: Mơ hình Bert Chương 4: Ứng dụng Bert vào toán phân loại văn Phần kết luận tóm tắt lại nội dung đạt đề tài nêu lên số gợi ý hướng phát triển đề tài Chúng em hy vọng nghiên cứu khơng đóng góp vào hiểu biết cảm xúc văn mà mang lại giá trị thực tế cho cộng đồng nghiên cứu doanh nghiệp Chúng em chào mừng ý kiến đóng góp phản hồi từ độc giả, nhằm hoàn thiện mở rộng nghiên cứu tương lai CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI 1.1 Lý chọn đề tài Nhận diện cảm xúc văn tốn quan trọng lĩnh vực xử lý ngơn ngữ tự nhiên Đề tài chọn với lý do: • Bài tốn có nhiều ứng dụng thực tiễn phân tích cảm xúc khách hàng, giám sát mạng xã hội, tạo Chatbot thơng minh • Nhận diện cảm xúc văn giúp hiểu rõ cảm nhận phản ứng người sử dụng thơng điệp cụ thể Điều hữu ích việc tối ưu hóa trải nghiệm người dùng tảng trực tuyến sản phẩm dịch vụ khác • Nhận diện cảm xúc văn hỗ trợ lĩnh vực y tế tâm thần, giúp theo dõi tâm lý cảm xúc bệnh nhân trình điều trị • Đây tốn điển hình NLP, kết hợp nhiều kỹ thuật xử lý ngôn ngữ machine learning • Có thể áp dụng mơ hình NLP tiên tiến BERT cho tốn • Dữ liệu văn dồi dào, thu thập từ nguồn online website tin tức, mạng xã hội • Kết nghiên cứu cơng bố hội nghị, tạp chí khoa học Những lý cho thấy đề tài thú vị, thách thức có ý nghĩa thực tiễn cao để nghiên cứu 1.2 Mục tiêu đặt Bài toán nhận diện cảm xúc văn có nhiều mục đích khác nhau, báo cáo bọn em có mục đích sau: • Phân loại văn thành đa lớp: Điều thường ứng dụng ứng dụng đánh giá sản phẩm, bình luận mạng xã hội, đánh giá người dùng • Đánh giá loại cảm xúc thuộc tính hay chủ đề cụ thể • Theo dõi thay đổi cảm xúc theo thời gian, giúp hiểu rõ phát triển cảm xúc chuỗi văn theo dõi xu hướng thay đổi cảm xúc theo thời gian • Đánh giá cảm xúc kiện tin tức cụ thể, giúp tổ chức tin tức đánh giá phản ứng độc giả thông tin cách nhanh chóng 1.3 Tìm hiểu chung tốn Nhận diện cảm xúc văn toán phân loại văn dựa cảm xúc mà thể Đây tác vụ quan trọng NLP, có nhiều ứng dụng thực tế Các bước để xây dựng mơ hình nhận diện cảm xúc: • Thu thập liệu: Tập văn gán nhãn cảm xúc (vui, buồn, giận, sợ, ) • Tiền xử lý: Loại bỏ dấu câu, ký tự đặc biệt, chuẩn hóa văn • Trích xuất đặc trưng: Sử dụng kỹ thuật NLP TF-IDF, word2vec, BERT để trích xuất vector đặc trưng cho văn • Huấn luyện mơ hình: Sử dụng thuật tốn học máy SVM, LSTM, CNN để huấn luyện mơ hình dự đốn cảm xúc • Đánh giá: Đo độ xác, recall, precision, F1-score mơ hình tập liệu kiểm tra • Tối ưu hóa mơ hình: Thử nghiệm siêu tham số, mơ hình khác để cải thiện kết • Triển khai: Áp dụng mơ hình vào ứng dụng thực tế Các ứng dụng tốn: • Phân tích cảm xúc khách hàng từ nhận xét, đánh giá • Theo dõi trạng thái cảm xúc mạng xã hội • Chatbot thơng minh có khả nhận diện cảm xúc 1.4 Bài toán nhận diện cảm xúc văn Bài toán nhận diện cảm xúc văn phân tích sau: Đầu vào: Tập văn bản, văn thuộc nhãn cảm xúc (Ví dụ: vui, buồn, giận, sợ, ) Đầu ra: nhãn cảm xúc văn Thuộc tính liệu: • Văn ngắn (câu, đoạn văn) dài (bài báo, bình luận) • Có thể chứa lỗi tả, ngữ pháp • Ngơn ngữ: tiếng Việt tiếng Anh Thuật tốn, mơ hình: Phân loại văn bản, sử dụng mơ hình học sâu CNN, RNN, BERT Đánh giá mơ hình: Độ xác, độ đo recall, precision, F1-score Ưu điểm: Phân tích cảm xúc người dùng, nâng cao trải nghiệm khách hàng Nhược điểm: Yêu cầu lượng liệu lớn, chất lượng liệu ảnh hưởng đến mơ hình 1.5 Một số kỹ thuật có để giải tốn Mơ hình máy vectơ hỗ trợ (SVM) • Sử dụng kỹ thuật trích chọn đặc trưng từ văn TF-IDF, word2vec • TF-IDF: trọng số tần suất thuật ngữ ngữ cảnh thể tầm quan trọng từ • Word2vec: mã hóa từ thành vectơ liên tục, từ ngữ cảnh có vector gần • Vector hóa văn thành ma trận đặc trưng, chiều đặc trưng TF-IDF word2vec • Huấn luyện SVM để phân loại văn dựa ma trận đặc trưng Mạng nơron tích chập (CNN) • Sử dụng lớp tích chập để trích xuất đặc trưng từ vùng liên tiếp văn • Input ma trận thưa thể văn bản, hàng từ • Qua lớp tích chập, trích xuất n-gram liên tiếp • Kết hợp nhiều filter với kích thước khác để trích chọn đặc trưng • Cuối layer kết nối để dự đoán cảm xúc Mạng nơron hồi tiếp (RNN) • Sử dụng RNN, GRU/LSTM để mã hóa ngữ cảnh văn • Input chuỗi từ, output vector đặc trưng cho câu/văn • RNN trì trạng thái ẩn, cập nhật dựa từ trạng thái trước • LSTM, GRU cải thiện để khắc phục tượng gradient • Vector đặc trưng cuối dùng để phân loại cảm xúc Mơ hình BERT • Sử dụng mã hóa ngữ cảnh hai chiều chế tự ý • Input chuỗi từ gán thêm vectơ • Qua nhiều lớp Transformer encoder tự ý, tạo vector đặc trưng cho văn • Thêm lớp phân loại cuối dựa vector đặc trưng 10 3.3.2 Masked ML (MLM) Masked ML tác vụ cho phép fine-tuning lại biểu diễn từ liệu unsupervised-text Chúng ta áp dụng Masked ML cho ngơn ngữ khác để tạo biểu diễn embedding cho chúng Các liệu tiếng anh có kích thước lên tới vài vài trăm tới vài nghìn GB huấn luyện BERT tạo kết ấn tượng Hình 27 Quá trình Masked để dự đốn Theo đó: • Khoảng 15 % token câu input thay [MASK] token trước truyền vào model đại diện cho từ bị che dấu (masked) Mơ hình dựa từ không che (non-masked) dấu xung quanh [MASK] đồng thời bối cảnh [MASK] để dự báo giá trị gốc từ che dấu Số lượng từ che dấu lựa chọn số (15%) để tỷ lệ bối cảnh chiếm nhiều (85%) • Bản chất kiến trúc BERT mơ hình seq2seq gồm phase encoder giúp embedding từ input decoder giúp tìm phân phối xác suất từ output Kiến trúc Transfomer encoder giữ lại tác vụ Masked ML Sau thực selfattention feed forward ta thu véc tơ embedding output 𝑂1 , 𝑂2 , .𝑂5 • Để tính tốn phân phối xác suất cho từ output, thêm Fully connect layer sau Transformer Encoder Hàm softmax có tác dụng tính toán phân phối xác suất Số lượng units fully connected layer phải với kích thước từ điển 49 • Cuối ta thu véc tơ nhúng từ vị trí MASK embedding véc tơ giảm chiều véc tơ 𝑂𝑖 sau qua fully connected layer mô tả hình vẽ bên phải Hàm loss function BERT bỏ qua mát từ từ không bị che dấu đưa vào mát từ bị che dấu Do mơ hình hội tụ lâu đặc tính bù trừ cho gia tăng ý thức bối cảnh Việc lựa chọn ngẫu nhiên 15% số lượng từ bị che dấu tạo vô số kịch input cho mơ hình huấn luyện nên mơ hình cần phải huấn luyện lâu học toàn diện khả 3.3.3 Next Sentence Prediction (NSP) Đây tốn phân loại học có giám sát với nhãn (hay gọi phân loại nhị phân) Input đầu vào mơ hình cặp câu (pair-sequence) cho 50% câu thứ lựa chọn câu câu thứ 50% lựa chọn cách ngẫu nhiên từ văn mà khơng có mối liên hệ với câu thứ Nhãn mơ hình tương ứng với IsNext cặp câu liên tiếp NotNext cặp câu không liên tiếp Cũng tương tự mô hình Question and Answering, cần đánh dấu vị trí đầu câu thứ token [CLS] vị trí cuối câu token [SEP] Các token có tác dụng nhận biết vị trí bắt đầu kết thúc câu thứ thứ hai Thông tin input preprocessing trước đưa vào mơ hình huấn luyện bao gồm: • Ngữ nghĩa từ (token embeddings): Thông qua embedding véc tơ cho từ Các véc tơ khởi tạo từ pretrain model Ngoài embedding biểu diễn từ từ câu, mơ hình cịn embedding thêm số thơng tin: • Loại câu (segment embeddings): Gồm hai véc tơ 𝐸𝐴 từ thuộc câu thứ 𝐸𝐵 từ thuộc câu thứ hai • Vị trí từ câu (position embedding): véc tơ 𝐸0 ,…,𝐸10 Tương tự positional embedding transformer Véc tơ input tổng ba thành phần embedding theo từ, câu vị trí 3.3.4 Các kiến trúc model BERT Hiện có nhiều phiên khác model BERT Các phiên dựa việc thay đổi kiến trúc Transformer tập trung tham số: L: số lượng 50 block sub-layers transformer, H: kích thước embedding véc tơ (hay gọi hidden size), A: Số lượng head multi-head layer, head thực self-attention Tên gọi kiến trúc bao gồm: • 𝐵𝐸𝑅𝑇𝐵𝐴𝑆𝐸 (L =12, H =768, A =12): Tổng tham số 110 triệu • 𝐵𝐸𝑅𝑇𝐿𝐴𝑅𝐺𝐸 (L =24, H =1024, A =16): Tổng tham số 340 triệu Như kiến trúc BERT Large tăng gấp đôi số layer, tăng kích thước hidden size embedding véc tơ gấp 1.33 lần tăng số lượng head multi-head layer gấp 1.33 lần 3.3.4 GLUE GLUE (General Language Understanding Evaluation) nhóm tài ngun đào tạo, đo lường, phân tích mơ hình với dựa nhiệm vụ khó phổ biến Hình 28 tác vụ để đánh giá mơ hình 51 CHƯƠNG 4: ỨNG DỤNG BERT VÀO BÀI TOÁN PHÂN LOẠI VĂN BẢN * Dữ liệu: savan77/EmotionDetectionBERT: Multi Emotion Detection from COVID-19 Text using BERT (github.com) * In[1]: Import thư viện cần thiết import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt import tensorflow as tf from keras.preprocessing.text import Tokenizer from keras import Sequential from keras.models import load_model from keras.optimizers import Adam, SGD from keras.layers import Embedding, Dense, Dropout, Bidirectional, LSTM, Input, GlobalAveragePooling1D, Flatten import tensorflow_hub as hub from sklearn.metrics import classification_report, confusion_matrix sns.set_style("darkgrid") import warnings warnings.filterwarnings("ignore") !pip install tensorflow_text import tensorflow_text as text * In[2]: Đọc liệu từ dataset train_data = pd.read_csv("https://raw.githubusercontent.com/savan77/EmotionDetection BERT/master/nlp_train.csv") valid_data = pd.read_csv("https://raw.githubusercontent.com/savan77/EmotionDetection BERT/master/nlp_valid.csv") test_data = pd.read_csv("https://raw.githubusercontent.com/savan77/EmotionDetection BERT/master/nlp_test.csv") train_data.head() Out[2]: Dataframe 52 * In[3]: Xoá liệu bị thiếu reset lại index train_setiment_data = train_data.dropna() train_setiment_data = train_setiment_data.reset_index(drop=True) valid_setiment_data = valid_data.dropna() valid_setiment_data = valid_setiment_data.reset_index(drop=True) test_setiment_data = test_data.dropna() test_setiment_data = test_setiment_data.reset_index(drop=True) label_class = ["anger", "anticipation", "disgust", "fear", "joy", "love", "optimism", "pessimism", "sadness", "surprise", "trust", "neutral"] input_data_train = train_setiment_data["text"].values label_data_train = train_setiment_data[label_class].values input_data_valid = valid_setiment_data["text"].values label_data_valid = valid_setiment_data[label_class].values input_data_test = test_setiment_data["text"].values label_data_test = test_setiment_data[label_class].values print("Input print("label print("Input print("label print("Input print("Label Train data SHAPE ", input_data_train.shape) Train data SHAPE ", label_data_train.shape) valid data SHAPE ", input_data_valid.shape) valid data SHAPE ", label_data_valid.shape) Test data SHAPE ", input_data_test.shape) Test data SHAPE ", label_data_test.shape) Out[3]: Kích thước liệu input 53 * In[4]: Xây dựng mơ hình WordEmbeding from keras.metrics import BinaryAccuracy embedding = "https://www.kaggle.com/models/google/nnlm/frameworks/TensorFl ow2/variations/en-dim128/versions/1" hub_layer = hub.KerasLayer(embedding, input_shape=[], dtype=tf.string, trainable = True) model = Sequential() model.add(hub_layer) model.add(Dense(32, activation = 'relu')) model.add(Dense(16, activation = 'relu')) model.add(Dense(12, activation = 'sigmoid')) model.summary() adam = Adam(learning_rate = 0.001) model.compile(optimizer = adam, loss = 'binary_crossentropy', metrics = BinaryAccuracy( name='binary_accuracy', dtype=None, threshold=0.5 )) Out[4]: Cấu trúc mơ hình * In[5]: huấn luyện mơ hình tối ưu hóa hiệu 54 from keras.callbacks import ModelCheckpoint callback_model = ModelCheckpoint('model_gooogle_embedding.h5', monitor = 'val_loss') history = model.fit( x = input_data_train, y =label_data_train, epochs = 50, validation_data = (input_data_valid, label_data_valid), callbacks = [callback_model] ) Out[5]: Quá trình train *In[6]: Đánh giá liệu dựa tập test model.load_weights('model_gooogle_embedding.h5') model.evaluate(input_data_test, label_data_test) preds = model.predict(input_data_test) preds = tf.round(preds).numpy() print(classification_report(label_data_test, preds, target_names = label_class, zero_division = 0)) 55 Out[6]: *In[7]: Huấn luyện mơ hình BERT from keras import Model def built_model_Bert(): text_input = Input(shape=(), dtype = tf.string, name = 'text') preprocessing_layer = hub.KerasLayer("https://kaggle.com/models/tensorflow/bert/fram eworks/TensorFlow2/variations/en-uncasedpreprocess/versions/3", name ='preprocessing') encoder_inputs = preprocessing_layer(text_input) encoder = hub.KerasLayer("https://www.kaggle.com/models/tensorflow/bert/ frameworks/TensorFlow2/variations/bert-en-uncased-l-10-h-128a-2/versions/2", trainable=False, name = "Bert-encoder") outputs = encoder(encoder_inputs) net = outputs["pooled_output"] net = Dense(400, activation ='relu')(net) net = Dropout(0.1)(net) net = Dense(200, activation ='relu')(net) net = Dropout(0.1)(net) net = Dense(100, activation ='relu')(net) net = Dropout(0.1)(net) net = Dense(50, activation ='relu')(net) net = Dropout(0.1)(net) net = Dense(12, activation ='sigmoid', name = 'classifier')(net) return Model(inputs = text_input, outputs = net) 56 classifier_model = built_model_Bert() classifier_model.summary() adam = Adam(learning_rate = 0.001) metrc_acc = BinaryAccuracy(name="binary_accuracy", dtype= None, threshold = 0.5) classifier_model.compile(optimizer = adam, loss ='binary_crossentropy', metrics = metrc_acc) Out[7]: 57 *In[8]: Tối ưu hố mơ hình callback_model_bert = ModelCheckpoint('model_small_Bert.h5', monitor = 'val_loss') history = classifier_model.fit( x = input_data_train, y =label_data_train, epochs = 10, validation_data = (input_data_valid, label_data_valid), callbacks = [callback_model_bert] ) Out[8]: *In[9]: Trực quan hoá hàm loss, accuracy plt.plot(history_bert.history['binary_accuracy']) plt.plot(history_bert.history["val_binary_accuracy"]) plt.title("model accuracy") plt.ylabel("accuracy") plt.xlabel("epoch") plt.legend("train", "val", loc = "upper left") plt.show() plt.plot(history_bert.history['loss']) plt.plot(history_bert.history["val_loss"]) plt.title("model loss") plt.ylabel("loss") plt.xlabel("epoch") plt.legend("train", "val", loc = "upper left") plt.show() Out[9]: 58 59 *In[10]: Đánh giá mơ hình classifier_model.load_weights('model_small_Bert.h5') classifier_model.evaluate(input_data_test, label_data_test) preds = model.predict(input_data_test) preds = tf.round(preds) print(classification_report(label_data_test, preds, target_names = label_class, zero_division = 0)) Out[10]: *In[11]: Dự đốn thực nghiệm lưu mơ hình text_input = ''' Tai was extremely angry because his girlfriend fell in love with another man, that's why he was very sad the next day and at the same time he lost faith in life ''' def predict_sentiment(input, model): sentiment = [] pred_result = model.predict([input]) pred_results = list(tf.round(pred_result).numpy()[0]) for v, l in zip(pred_results, label_class): if v == 1.0: print(l) sentiment.append(l) sentiment_result = ', '.join(sentiment) return sentiment_result 60 predict_sentiment(text_input,classifier_model) classifier_model.save('Small_Bert_Model.h5') Out[11]: Kết dự đoán 61 KẾT LUẬN Thời gian làm đồ án tốt nghiệp vừa qua trải nghiệm vô thú vị đáng giá với thân em Em tìm hiểu kỹ thuật khác trí tuệ nhân tạo nhằm giải tốn phân tích cảm xúc, qua khơng tích lũy kinh nghiệm chun mơn mà cịn học kĩ làm việc độc lập, quản lý thời gian Đây chắn hành trang quý giá nghiệp tương lai em Em tìm hiểu, lĩnh vực thú vị AI Xử Lý Ngôn Ngữ tự nhiên (NLP), biết mô hình hoạt động với liệu dạng chuỗi liên tục, nghiên cứu, ứng dụng mơ hình học máy Deep Learning, sử dụng pre-trained model có hub hugging- face, tensorflow-hub Bằng cách sử dụng BERT, chúng em cải thiện độ xác hiệu suất mơ hình phân tích cảm xúc so với phương pháp truyền thống Qua trình thực dự án, chúng em nhận thức thách thức hội Việc tiền xử lý liệu fine-tuning mơ hình quan trọng để đạt kết tốt Đồng thời, chúng em nhận thức đa dạng phức tạp ngôn ngữ tự nhiên, đặc biệt xử lý văn chứa đựng nhiều cảm xúc khác Tuy nhiên, mơ hình BERT cơng cụ mạnh mẽ linh hoạt cho việc phân tích cảm xúc văn bản, mang lại hội cho nghiên cứu ứng dụng nhiều lĩnh vực, từ phân tích ý kiến người dùng đến theo dõi trạng thái cảm xúc thị trường Mơ hình BERT, với khả hiểu ngữ cảnh biểu diễn từ ngữ hiệu quả, đem lại kết ấn tượng nhiều nhiệm vụ xử lý ngôn ngữ tự nhiên, đặc biệt phân tích cảm xúc Mơ hình cho thấy hiệu tốt loại cảm xúc Tuy nhiên, chưa thực cao, em mong muốn thầy đóng góp ý kiến để cải thiện mơ hình tốt Hy vọng nỗ lực chúng em đóng góp nhỏ vào phát triển tồn diện ngành cơng nghiệp trí tuệ nhân tạo xử lý ngôn ngữ tự nhiên Em xin gửi lời cảm ơn chân thành tới thầy giáo, Tiến sĩ Nguyễn Mạnh Cường tận tình hướng dẫn em thực đề tài Em xin chúc thầy luôn mạnh khỏe thành công nghiên cứu tới Em xin chân thành cảm ơn ! 62 TÀI LIỆU THAM KHẢO [1] https://www.kaggle.com/code/trnmtin/phobert-classification-forvietnamese-text [2] https://www.youtube.com/watch?v=edUHhKFfJOg [3] https://github.com/savan77/EmotionDetectionBERT [4] http://jalammar.github.io/illustrated-transformer/ [5] https://trituenhantao.io/tin-tuc/minh-hoa-transformer/ [6] https://www.geeksforgeeks.org/natural-language-processing-nlp-tutorial/ [7] https://phamdinhkhanh.github.io/2020/05/23/BERTModel.html [8] https://www.youtube.com/watch?v=Kz1VBb8z8M0&t=476s [9] https://arxiv.org/abs/1706.03762 [10] https://arxiv.org/pdf/1908.10084.pdf [1] 63

Ngày đăng: 12/01/2024, 21:23

Tài liệu cùng người dùng

Tài liệu liên quan