(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt(Khóa luận tốt nghiệp file word) Tìm hiểu mô hình ngôn ngữ PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC QUẢN LÝ VÀ CƠNG NGHỆ HẢI PHỊNG - ĐỒ ÁN TỐT NGHIỆP NGÀNH: CÔNG NGHỆ THÔNG TIN Sinh viên : Nguyễn Thành Long Lớp : CT2101C Giảng Viên Hướng Dẫn: Ths.Nguyễn Thị Xuân Hương Hải Phòng – 2021 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC QUẢN LÝ VÀ CƠNG NGHỆ HẢI PHỊNG - TÌM HIỂU VỀ MƠ HÌNH NGƠN NGỮ PHOBERT CHO BÀI TỐN PHÂN LOẠI QUAN ĐIỂM BÌNH ḶN TIẾNG VIỆT ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY NGÀNH: CÔNG NGHỆ THÔNG TIN Sinh Viên : Nguyễn Thành Long Lớp : CT2101C Giảng Viên Hướng Dẫn : Ths.Nguyễn Thị Xuân Hương BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC QUẢN LÝ VÀ CƠNG NGHỆ HẢI PHỊNG NHIỆM VỤ ĐỀ TÀI TỐT NGHIỆP Sinh viên: Nguyễn Thành Long Lớp : CT2101C Ngành : Công nghệ thông tin Mã SV : 1712111008 Tên đề tài: Tìm hiểu mơ hình ngơn ngư PhoBert cho bài toán phân loại quan điểm bình luận tiếng Việt CÁN BỘ HƯỚNG DẪN ĐỀ TÀI TỐT NGHIỆP Họ tên : Nguyễn Thị Xuân Hương Học hàm, học vị : Thạc si Cơ quan công tác : Trường Đại học Quản lý và Công nghệ Hải Phòng Nội dung hướng dẫn: + Tìm hiểu vê mơ hình ngơn ngư PhoBert + Tìm hiểu vê bài toán phân tích quan điểm người dùng, phân loại quan điểm bình luận Tiếng Việt + Tìm hiểu vê ngơn ngư lập trình Python Đê tài tốt nghiệp giao ngày 16 tháng 07 năm 2021 Yêu cầu phải hoàn thành xong trước ngày 03 tháng 10 năm 2021 Đã nhận nhiệm vụ ĐTTN Đã giao nhiệm vụ ĐTTN Sinh viên Giảng viên hướng dẫn Hải Phòng, ngày tháng năm 2021 TRƯỞNG KHOA CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự - Hạnh phúc PHIẾU NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN TỐT NGHIỆP Họ và tên giảng viên: Nguyễn Thị Xuân Hương Đơn vị công tác: Khoa Công nghệ thông tin, Trường Đại học Quản lý và Công nghệ Hải Phòng Họ và tên sinh viên: Nguyễn Thành Long Ngành: Công nghệ thông tin Nội dung hướng dẫn: + Tìm hiểu vê mơ hình ngơn ngư PhoBert + Tìm hiểu vê bài toán phân tích quan điểm người dùng, phân loại quan điểm bình ḷn Tiếng Việt + Tìm hiểu vê ngơn ngư lập trình Python Tinh thần thái độ sinh viên trình làm đề tài tốt nghiệp ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… Đánh giá chất lượng đồ án/khóa luận (so với nội dung yêu cầu đề nhiệm vụ Đ.T T.N mặt lý luận, thực tiễn, tính tốn số liệu…) ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… Ý kiến giảng viên hướng dẫn tốt nghiệp Đạt Không đạt Điểm:…………………… Hải Phòng, ngày tháng 10 năm 2021 Giảng viên hướng dẫn (Ký ghi rõ họ tên) CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự - Hạnh phúc PHIẾU NHẬN XÉT CỦA GIẢNG VIÊN CHẤM PHẢN BIỆN Họ và tên giảng viên: Đô Văn Chiểu Đơn vị công tác: Khoa Công nghệ thông tin, Trường Đại học Quản lý và Công nghệ Phòng Họ và tên sinh viên: Nguyễn Thành Long Ngành: Công nghệ thông tin Hải Đê tài tốt nghiệp: Tìm hiểu mơ hình ngôn ngư PhoBert cho bài toán phân loại quan điểm bình luận Tiếng Việt Phần nhận xét giảng viên chấm phản biện Những mặt hạn chế Ý kiến giảng viên chấm phản biện Được bảo vệ Không bảo vệ Điểm:…………………… Hải Phòng, ngày tháng 10 năm 2021 Giảng viên chấm phản biện (Ký ghi rõ họ tên) MỤC LỤC MỤC LỤC LỜI CẢM ƠN MƠ ĐAU DANH MỤC CÁC HÌNH VẼ VÀ CÁC BẢNG BẢNG CÁC TƯ VIET TAT CHƯƠNG MƠ HÌNH BERT 1.1 Khái niệm 1.2 Tại lại cần BERT 10 1.3 Một số khái niệm 10 1.3.1 Nhiệm vụ phía sau (Downstream task) 10 1.3.2 Điểm khái quát đánh giá mức độ hiểu ngôn ngư (GLUE score benchmark) .11 1.3.3 Phân tích cảm xúc (Sentiment Analysis) 11 1.3.4 Hỏi đáp (Question and Answering) 11 1.3.5 Suy luận ngôn ngư (Natural Language Inference) 11 1.3.6 Quan hệ văn (Textual Entailment) 11 1.3.7 Ngư cảnh (Contextual) 12 1.3.8 Phương pháp Hiện đại (SOTA) 12 1.3.9 Mơ hình LTR 12 1.3.10 Mơ hình ngơn ngư đánh dấu MLM (Masked Language Model) 12 1.4 Ngư cảnh (Contextual) và vai trò NLP 13 1.5 Tiếp cận nông và học sâu ứng dụng huấn luyện trước (pre-training) NLP 14 1.5.1 Tiếp cận nông (shallow approach) 14 1.5.2 Học sâu (deep-learning) 15 1.6 Phương pháp TRANSFORMER 16 1.6.1 Encoder và Decoder BERT 16 1.6.2 Các tiến trình self-attention và encoder-decoder attention ( phương pháp transformer ) 18 1.7 Mơ hình BERT 20 1.7.1 Mơ hình BERT tinh chỉnh (Fine-tuning model BERT) 20 1.8 Cách huấn luyện BERT 22 1.8.1 Mơ hình ngơ ngư đánh dấu (Masked Language Model) 22 1.8.2 Next Sentence Prediction (NSP) 24 1.9 Các kiến trúc mơ hình BERT 26 1.10 RoBerta 27 1.10.1 Khái niệm RoBerta 27 1.10.2 Dư liệu 27 1.10.3 Extract fearture từ RoBerta 31 1.10.4 Điên từ ( Filling Mask ) 32 1.10.5 Trích suất đặc trưng ( Extract feature ) cho từ 32 CHƯƠNG PHOBERT 33 2.1 Sư đời của PhoBERT 33 2.2 Cấu trúc của PhoBERT 33 2.2.1 Dư liệu trước huấn luyện 36 2.2.2 Tối ưu hóa 36 2.2.3 Thiết lập thử nghiệm 37 2.2.4 Kết thưc nghiệm 38 2.2.5 Kết luận 41 2.3 Ứng dụng của PhoBert 41 CHƯƠNG ỨNG DỤNG PHOBERT VÀO BÀI TỐN PHÂN TÍCH QUAN ĐIEM BÌNH LUẬN TIENG VIỆT 42 3.1 Phát biểu bài toán 42 3.2 Dư liệu và Công cụ, môi trường thưc nghiệm: 45 3.2.1 Dư liệu 45 3.2.2 Công cụ và môi trường thưc nghiệm: 46 Công cụ 46 Ngơn ngư lập trình Python 46 Thư viện mã nguồn mở Tensorflow 47 Thư viện Transformers 48 Thư viện fastBPE 48 Thư viện fairseq 48 Thư viện VnCoreNLP 48 PhoBERT huấn luyện trước 48 Môi trường thưc nghiệm: 48 3.3 Các bước thưc 48 3.3.1 Cài đặt các thư viện cần thiết 49 3.3.2 Cài đặt thư viện vncorenlp 49 3.3.3 Tải vê dư liệu huấn luyện từ trang chủ thi của AIVIVN và pre-trained của PhoBERT 50 3.3.4 Tải vê dư liệu của thi Phân tích sắc thái bình luận 50 3.3.5 Tách dư liệu thành tập train và validation theo tỉ lệ 90:10 .51 3.3.6 Tạo mask gồm các giá trị 0, để làm đầu vào cho thư viện transformers 52 3.3.7 Huấn luyện mơ hình 53 KET LUẬN 57 TÀI LIỆU THAM KHẢO 58 LỜI CẢM ƠN Lời cho em gửi lời cảm ơn sâu sắc đến gia đình, người thân của em động viên, giúp đỡ, cổ vũ, tạo cho em thêm động lưc để em có thể hoàn thành đồ án thời gian giao Em xin gửi lời cảm ơn đến Ban Giám Hiệu Trường Đại học Quản lý và Công nghệ Hải Phòng, các Ban, Ngành hỗ trợ hết mức tạo điêu kiện tốt để em có thể đăng kí đồ án tốt nghiệp Em xin cảm ơn đến các thầy, các cô Khoa Công nghệ thông tin, Trường Đại học Quản lý và Công nghệ Hải Phòng, giúp em có kiến thức cưc kì bổ ích vòng năm vừa qua, giúp em có nên tảng kiến thức vưng để em có thẻ thưc đồ án Em xin gửi lời cảm ơn chân thành đến cô Ths Nguyễn Thị Xuân Hương, dành nhiêu thời gian công sức, vê vật chất và tinh thần giúp em có thể thể hoàn thành đồ án cách trơn tru Em xin chân thành cảm ơn! Hải Phòng, ngày tháng năm 2021 Sinh viên Nguyễn Thành Long Khả mở rộng có thể nhúng: Giả sử ứng dụng đòi hỏi sư phức tạp lớn, bạn có thể dễ dàng kết hợp các phần code C, C++ và ngơn ngư khác (có thể gọi từ C) vào code Python Điêu này cung cấp cho ứng dụng của bạn tính tốt khả scripting mà ngôn ngư lập trình khác khó có thể làm Ngơn ngữ thông dịch cấp cao: Không giống C/C++, với Python, bạn khơng phải lo lắng nhiệm vụ khó khăn quản lý nhớ, dọn dẹp dư liệu vơ nghia, Khi chạy code Python, tư động chủn đổi code sang ngơn ngư máy tính có thể hiểu Bạn không cần lo lắng vê hoạt động cấp thấp nào Thư viện tiêu chuẩn lớn để giải nhiệm vụ phổ biến: Python có số lượng lớn thư viện tiêu chuẩn giúp cho cơng việc lập trình của bạn trở nên dễ thở nhiêu, đơn giản khơng phải tư viết tất code Ví dụ: Bạn cần kết nối sở dư liệu MySQL Web server? Bạn có thể nhập thư viện MySQLdb và sử dụng Nhưng thư viện này kiểm tra kỹ lưỡng và sử dụng hàng trăm người Vì vậy, bạn có thể chắn khơng làm hỏng code hay ứng dụng của Hướng đối tượng: Mọi thứ Python đêu là hướng đối tượng Lập trình hướng đối tượng (OOP) giúp giải quyết vấn đê phức tạp cách trưc quan Với OOP, bạn có thể phân chia vấn đê phức tạp thành tập nhỏ cách tạo các đối tượng Thư viện mã nguồn mở Tensorflow Tensorflow là thư viện mã nguồn mở cung cấp khả xử lí tính toán số học dưa biểu đồ mô tả sư thay đổi của dư liệu, các node là các phép tính toán học còn các cạnh biểu thị luồng dư liệu Trong tesorflow có vài khái niệm sau Tensor là cấu trúc dư liệu tensorflow đại diện cho tất các loại dư liệu Nói cách khác, tất các kiểu dư liệu đưa vào tensorflow đêu gọi là Tensor Vậy nên có thể hiểu Tensorflow là thư viện mô tả, điêu chỉnh dòng chảy của các Tensor Tensor có thuộc tính là rank, shape và type: Rank là số bậc của tensor Ví dụ Tensor = [1] có rank = 1, Tensor = [[3,4],[5,6]] có rank = Việc phân rank này khá quan trọng đồng thời giúp phân loại dư liệu của Tensor Khi các rank đặc biệt cụ thể, Tensor có tên gọi riêng sau: Scalar: Khi Tensor có rank Véc tơ: Véc tơ là Tensor rank Matrix: Đây là Tensor rank hay mảng hai chiêu theo khái niệm của Python N-Tensor: Khi rank của Tensor tăng lên lớn 2, chúng gọi chung là N- Tensor Shape là chiêu của tensor Vi dụ Tensor = [[[1,1,1], [178,62,74]]] có Shape = (1,2,3), Tensor = [[1,1,1], [178,62,74]] có Shape = (2,3) Type kiểu dư liệu của các elements Tensor Vì Tensor có thuộc tính Type nên từ suy là có kiểu Type cho toàn các elements có Tensor tại Thư viện Transformers : Là project của huggingface hỗ trợ huấn luyện các model dưa kiến trúc transformer BERT, GPT-2, RoBERTa, XLM, DistilBert, XLNet, T5, CTRL,… phục vụ cho các tác vụ xử lý ngôn ngư tư nhiên nên tảng pytorch và tensorflow Thư viện fastBPE : Là package hỗ trợ tokenize từ (word) thành các từ phụ (subwords) theo phương pháp mới áp dụng cho các pretrain model xử lý ngôn ngư tư nhiên đại BERT và các biến thể của BERT Thư viện fairseq : Là project của facebook chuyên hỗ trợ các nghiên cứu và dư án liên quan đến model seq2seq Thư viện VnCoreNLP : Là package xử lý ngôn ngư tư nhiên Tiếng Việt, hỗ trợ tokenize và các tác vụ xử lý ngôn ngư khác PhoBERT huấn luyện trước Môi trường thực nghiệm: - Máy tính Chip: Intel(R) Dual Core I5(R) @ 4300U, Ram: 16.00 GB - Hệ điêu hành Ubuntu 20.04 - Cơng cụ lập trình: Python 3.9 3.3 Các bước thực 3.3.1 Cài đặt thư viện cần thiết pip install transformers pip install fastBPE pip install fairseq 3.3.2 Cài đặt thư viện vncorenlp # Install the vncorenlp python wrapper pip install vncorenlp # Download VnCoreNLP-1.1.1.jar & its word segmentation component (i.e RDRSegmenter) mkdir -p vncorenlp/models/wordsegmenter wget https://raw.githubusercontent.com/vncorenlp/VnCoreNLP/master/VnCoreNLP1.1.1.jar wget https://raw.githubusercontent.com/vncorenlp/VnCoreNLP/master/models/wordsegmenter /vi-vocab wget https://raw.githubusercontent.com/vncorenlp/VnCoreNLP/master/models/wordsegmenter /wordsegmenter.rdr mv VnCoreNLP-1.1.1.jar vncorenlp/ mv vi-vocab vncorenlp/models/wordsegmenter/ mv wordsegmenter.rdr vncorenlp/models/wordsegmenter/ Để chắn cài đặt vncorenlp thành cơng , ta có thể sử dụng để tách từ câu đơn giản theo cách dưới đây: from vncorenlp import VnCoreNLP rdrsegmenter = VnCoreNLP("/Absolute-path-to/vncorenlp/VnCoreNLP-1.1.1.jar", annotators="wseg", max_heap_size='-Xmx500m') # rdrsegmenter = VnCoreNLP("/content/drive/My Drive/BERT/SA/vncorenlp/VnCoreNLP-1.1.1.jar", annotators="wseg", max_heap_size='-Xmx500m') text = "Đại học Bách Khoa Hà Nội." word_segmented_text = rdrsegmenter.tokenize(text) print(word_segmented_text) Kết thu là: [['Đại_học', 'Bách_Khoa', 'Hà_Nội', '.']] 3.3.3 Tải liệu huấn luyện từ trang chủ thi AIVIVN pre-trained PhoBERT wget https://public.vinai.io/PhoBERT_base_transformers.tar.gz tar -xzvf PhoBERT_base_transformers.tar.gz Sau ta load model và bpe : from fairseq.data.encoders.fastbpe import fastBPE from fairseq.data import Dictionary import argparse parser = argparse.ArgumentParser() parser.add_argument(' bpe-codes', default="/content/drive/My Drive/BERT/SA/PhoBERT_base_transformers/bpe.codes", required=False, type=str, help='path to fastBPE BPE' ) args, unknown = parser.parse_known_args() bpe = fastBPE(args) # Load the dictionary vocab = Dictionary() vocab.add_from_file("/content/drive/My Drive/BERT/SA/PhoBERT_base_transformers/dict.txt") 3.3.4 Tải liệu thi Phân tích sắc thái bình luận Ta tiến hành đọc dư liệu và dư liệu test import re train_path = '/content/drive/My Drive/BERT/SA/train.crash' test_path = '/content/drive/My Drive/BERT/SA/test.crash' train_id, train_text, train_label = [], [], [] test_id, test_text = [], [] with open(train_path, 'r') as f_r: data = f_r.read().strip() data = re.findall('train_[\s\S]+?\"\n[01]\n\n', data) for sample in data: splits = sample.strip().split('\n') id = splits[0] label = int(splits[-1]) text = ' '.join(splits[1:-1])[1:-1] text = rdrsegmenter.tokenize(text) text = ' '.join([' '.join(x) for x in text]) train_id.append(id) train_text.append(text) train_label.append(label) with open(test_path, 'r') as f_r: data = f_r.read().strip() data = re.findall('train_[\s\S]+?\"\n[01]\n\n', data) for sample in data: splits = sample.strip().split('\n') id = splits[0] text = ' '.join(splits[1:])[1:-1] text = rdrsegmenter.tokenize(text) text = ' '.join([' '.join(x) for x in text]) test_id.append(id) test_text.append(text) 3.3.5 Tách liệu thành tập train validation theo tỉ lệ 90:10 from sklearn.model_selection import train_test_split train_sents, val_sents, train_labels, val_labels = train_test_split(train_text, train_labels, test_size=0.1) Sử dụng bpe load để đưa text đầu vào dưới dạng subword và ánh xạ các subword này vê dạng index từ điển from tensorflow.keras.preprocessing.sequence import pad_sequences MAX_LEN = 125 train_ids = [] for sent in train_sents: subwords = ' ' + bpe.encode(sent) + ' ' encoded_sent = vocab.encode_line(subwords, append_eos=True, add_if_not_exist=False).long().tolist() train_ids.append(encoded_sent) val_ids = [] for sent in val_sents: subwords = ' ' + bpe.encode(sent) + ' ' encoded_sent = vocab.encode_line(subwords, append_eos=True, add_if_not_exist=False).long().tolist() val_ids.append(encoded_sent) train_ids = pad_sequences(train_ids, maxlen=MAX_LEN, dtype="long", value=0, truncating="post", padding="post") val_ids = pad_sequences(val_ids, maxlen=MAX_LEN, dtype="long", value=0, truncating="post", padding="post") 3.3.6 Tạo mask gồm giá trị 0, để làm đầu vào cho thư viện transformers train_masks = [] for sent in train_ids: mask = [int(token_id > 0) for token_id in sent] train_masks.append(mask) val_masks = [] for sent in val_ids: mask = [int(token_id > 0) for token_id in sent] val_masks.append(mask) Sử dụng DataLoader của torch để tạo dataloader from torch.utils.data import TensorDataset, DataLoader, RandomSampler, SequentialSample r import torch train_inputs = torch.tensor(train_ids) val_inputs = torch.tensor(val_ids) train_labels = torch.tensor(train_labels) val_labels = torch.tensor(val_labels) train_masks = torch.tensor(train_masks) val_masks = torch.tensor(val_masks) train_data = TensorDataset(train_inputs, train_masks, train_labels) train_sampler = SequentialSampler(train_data) train_dataloader = DataLoader(train_data, sampler=train_sampler, batch_size=32) val_data = TensorDataset(val_inputs, val_masks, val_labels) val_sampler = SequentialSampler(val_data) val_dataloader = DataLoader(val_data, sampler=val_sampler, batch_size=32) Load model PhoBert from transformers import RobertaForSequenceClassification, RobertaConfig, AdamW config = RobertaConfig.from_pretrained( "/content/drive/My Drive/BERT/SA/PhoBERT_base_transformers/config.json", from_tf=False, num_labels = 2, output_hidden_states=False, ) BERT_SA = BertForSequenceClassification.from_pretrained( "/content/drive/My Drive/BERT/SA/PhoBERT_base_transformers/model.bin", config=config ) 3.3.7 Huấn luyện mơ hình import random from tqdm import tqdm_notebook device = 'cpu' epochs = 10 param_optimizer = list(BERT_SA.named_parameters()) no_decay = ['bias', 'LayerNorm.bias', 'LayerNorm.weight'] optimizer_grouped_parameters = [ {'params': [p for n, p in param_optimizer if not any(nd in n for nd in no_decay)], 'weight_decay': 0.01}, {'params': [p for n, p in param_optimizer if any(nd in n for nd in no_decay)], 'weight_decay': 0.0} ] optimizer = AdamW(optimizer_grouped_parameters, lr=1e-5, correct_bias=False) for epoch_i in range(0, epochs): print('======== Epoch {:} / {:} ========'.format(epoch_i + 1, epochs)) print('Training ') total_loss = BERT_SA.train() train_accuracy = nb_train_steps = train_f1 = for step, batch in tqdm_notebook(enumerate(train_dataloader)): b_input_ids = batch[0].to(device) b_input_mask = batch[1].to(device) b_labels = batch[2].to(device) BERT_SA.zero_grad() outputs = BERT_SA(b_input_ids, token_type_ids=None, attention_mask=b_input_mask, labels=b_labels) loss = outputs[0] total_loss += loss.item() logits = outputs[1].detach().cpu().numpy() label_ids = b_labels.to('cpu').numpy() tmp_train_accuracy, tmp_train_f1 = flat_accuracy(logits, label_ids) train_accuracy += tmp_train_accuracy train_f1 += tmp_train_f1 nb_train_steps += loss.backward() torch.nn.utils.clip_grad_norm_(BERT_SA.parameters(), 1.0) optimizer.step() avg_train_loss = total_loss / len(train_dataloader) print(" Accuracy: {0:.4f}".format(train_accuracy/nb_train_steps)) print(" F1 score: {0:.4f}".format(train_f1/nb_train_steps)) print(" Average training loss: {0:.4f}".format(avg_train_loss)) print("Running Validation ") BERT_SA.eval() eval_loss, eval_accuracy = 0, nb_eval_steps, nb_eval_examples = 0, eval_f1 = for batch in tqdm_notebook(val_dataloader): batch = tuple(t.to(device) for t in batch) b_input_ids, b_input_mask, b_labels = batch with torch.no_grad(): outputs = BERT_SA(b_input_ids, token_type_ids=None, attention_mask=b_input_mask) logits = outputs[0] logits = logits.detach().cpu().numpy() label_ids = b_labels.to('cpu').numpy() tmp_eval_accuracy, tmp_eval_f1 = flat_accuracy(logits, label_ids) eval_accuracy += tmp_eval_accuracy eval_f1 += tmp_eval_f1 nb_eval_steps += print(" Accuracy: {0:.4f}".format(eval_accuracy/nb_eval_steps)) print(" F1 score: {0:.4f}".format(eval_f1/nb_eval_steps)) print("Training complete!") Kết thưc ======== Epoch / 10 ======== Training Accuracy: 0.8370 F1 score: 0.8262 Average training loss: 0.3511 Running Validation Accuracy: 0.9118 F1 score: 0.9087 ======== Epoch / 10 ======== Training Accuracy: 0.9071 F1 score: 0.9025 Average training loss: 0.2348 Running Validation Accuracy: 0.9167 F1 score: 0.9131 ======== Epoch / 10 ======== Training Accuracy: 0.9261 F1 score: 0.9223 Average training loss: 0.1954 Running Validation Accuracy: 0.9148 F1 score: 0.9113 ======== Epoch / 10 ======== Training Accuracy: 0.9390 F1 score: 0.9358 Average training loss: 0.1662 Running Validation Accuracy: 0.9167 F1 score: 0.9138 ======== Epoch / 10 ======== Training Accuracy: 0.9510 F1 score: 0.9482 Average training loss: 0.1443 Running Validation Accuracy: 0.9148 F1 score: 0.9113 ======== Epoch / 10 ======== Training Accuracy: 0.9587 F1 score: 0.9566 Average training loss: 0.1271 Running Validation Accuracy: 0.9167 F1 score: 0.9127 ======== Epoch / 10 ======== Training Accuracy: 0.9645 F1 score: 0.9625 Average training loss: 0.1099 Running Validation Accuracy: 0.9142 F1 score: 0.9103 KẾT LUẬN Trong thời gian làm đồ án này, kiến thức học trường cùng với sư hướng dẫn tận tình của các thầy và bạn bè, giúp em vận dụng và hoàn thành đê tài và đồ án tốt nghiệp thời gian quy định Trong quá trình thưc đê tài em học hỏi và tìm hiểu khái niệm vê xử lý ngơn ngư tư nhiên, mơ hình ngơn ngư BERT, PhoBer, ngơn ngư lập trình Python, sử dụng các thư viện Tensorflow Đồ án cài đặt thử nghiệm bài toán phân tích quan điểm bình luận Tiếng Việt dưa mơ hình ngơn ngư PHoBERT huấn luyện trước và công cụ phân loại văn Keras Dư liệu cho bài toán thưc nghiệm là các bình luận thu thập từ thi Phân tích quan điểm bình luận Tiếng Việt Bộ dư liệu gồm 16087 câu bình luận gắn nhãn, dư liệu đánh giá gồm 10981 câu bình luận sử dụng để đánh giá chất lượng của mô hình học Bộ dư liệu gồm bình luận và nhãn của bình luận Bình luận tích cưc gắn nhãn 0, còn bình luận tiêu cưc gắn nhãn Trong thời gian 12 tuần thưc đê tài, kiến thức còn hạn hẹp, nên đồ án tốt nghiệp của em khơng thể tránh khỏi thiếu sót, em mong nhận đóng góp của các thầy cô và các bạn để đồ án của em trở lên hoàn thiện TÀI LIỆU THAM KHẢO Python Machine Learning By Example by Yuxi Liu, 2017 Neural Network Embeddings Explained by Will Koehrsen, 2018 Deep Learning: Recurrent Neural Networks in Python: LSTM, GRU, and more RNN machine learning architectures in Python and Theano, 2016 Andrew Ng, Machine Learning course, 2020 https://viblo.asia/ Christopher Olah (2015), Understanding LSTM networks in Colah’s blog RoBERTa: A Robustly Optimized BERT Pretraining Approach by Yinhan Liu, Myle Ott, Naman Goyal, Jingfei Du, Mandar Joshi, Danqi Chen, Omer Levy, Mike Lewis, Luke Zettlemoyer, Veselin Stoyanov Attention Is All You Need by Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Lukasz Kaiser, Illia Polosukhin How to Fine-Tune BERT for Text Classification? by Chi Sun, Xipeng Qiu, Yige Xu, Xuanjing Huang 10 Yiming Cui, Wanxiang Che, Ting Liu, Bing Qin, Ziqing Yang, Shijin Wang, and Guoping Hu 2019 Pre-Training with Whole Word Masking for Chinese BERT arXiv preprint, arXiv:1906.08101 11 Wietse de Vries, Andreas van Cranenburgh, Arianna Bisazza, Tommaso Caselli, Gertjan van Noord, and Malvina Nissim 2019 BERTje: A Dutch BERT Model arXiv preprint, arXiv:1912.09582 12 Byte-Pair encoding (BPE) methods (Sennrich et al., 2016; Kudo and Richardson, 2018) 13 Xuan-Son Vu, Thanh Vu, Son Tran, and Lili Jiang 2019 ETNLP: A visualaided systematic approach to select pre-trained embeddings for a downstream task In Proceedings of RANLP, pages 1285–1294 14 Louis Martin, Benjamin Muller, Pedro Javier Ortiz Suárez, Yoann Dupont, Laurent Romary, Éric Villemonte de la Clergerie, Djamé Seddah, and Benoˆıt Sagot 2020 CamemBERT: a Tasty French Language Model In Proceedings of ACL, pages 7203– 7219 15 Dat Quoc Nguyen, Dai Quoc Nguyen, Son Bao Pham, Phuong-Thai Nguyen, and Minh Le Nguyen 2014b From Treebank Conversion to Automatic Dependency Parsing for Vietnamese In Proceedings of NLDB 16 Thomas Wolf, Lysandre Debut, Victor Sanh, Julien Chaumond, Clement Delangue, Anthony Moi, Pier-ric Cistac, Tim Rault, R’emi Louf, Morgan Funtowicz, and Jamie Brew 2019 HuggingFace’s Transformers: State-of-theart Natural Language Processing 17 Thanh Vu, Dat Quoc Nguyen, Dai Quoc Nguyen, Mark Dras, and Mark Johnson 2018 VnCoreNLP: A Vietnamese Natural Language Processing Toolkit In Proceedings of NAACL: Demonstrations 18 Myle Ott, Sergey Edunov, Alexei Baevski, Angela Fan, Sam Gross, Nathan Ng, David Grangier, and Michael Auli 2019 fairseq: A Fast, Extensible Toolkit for Sequence Modeling In Proceedings of NAACL-HLT 2019: Demonstrations 19 Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova 2019 BERT: Pre-training of deep bidirectional transformers for language understanding In Proceedings of NAACL, pages 4171– 4186 20 Alexis Conneau and Guillaume Lample 2019 Crosslingual Language Model Pretraining In Proceedings of NeurIPS, pages 7059–7069 21 Dat Quoc Nguyen, Dai Quoc Nguyen, Thanh Vu, Mark Dras, and Mark Johnson 2018 A Fast and Accurate Vietnamese Word Segmenter In Proceedings of LREC, pages 2582–2587 22 Huyen Nguyen, Quyen Ngo, Luong Vu, Vu Tran, and Hien Nguyen 2019a VLSP Shared Task: Named Entity Recognition Journal of Computer Science and Cybernetics, 34(4):283–294 23 Thomas Wolf, Lysandre Debut, Victor Sanh, Julien Chaumond, Clement Delangue, Anthony Moi, Pierric Cistac, Tim Rault, R’emi Louf, Morgan Funtowicz, and Jamie Brew 2019 HuggingFace’s Transformers: State-of-theart Natural Language Processing arXiv preprint, arXiv:1910.03771 24 Myle Ott, Sergey Edunov, Alexei Baevski, Angela Fan, Sam Gross, Nathan Ng, David Grangier, and Michael Auli 2019 fairseq: A Fast, Extensible Toolkit for Sequence Modeling In Proceedings of NAACL-HLT 2019: Demonstrations, pages 48–53 25 Yinhan Liu, Myle Ott, Naman Goyal, Jingfei Du, Mandar Joshi, Danqi Chen, Omer Levy, Mike Lewis, Luke Zettlemoyer, and Veselin Stoyanov 2019 RoBERTa: A Robustly Optimized BERT Pretraining Approach arXiv preprint, arXiv:1907.11692 26 Thanh Vu, Dat Quoc Nguyen, Dai Quoc Nguyen, Mark Dras, and Mark Johnson 2018 VnCoreNLP: A Vietnamese Natural Language Processing Toolkit In Proceedings of NAACL: Demonstrations, pages 56–60 27 Dat Quoc Nguyen, Thanh Vu, Dai Quoc Nguyen, Mark Dras, and Mark Johnson 2017 From word segmentation to POS tagging for Vietnamese In Proceedings of ALTA, pages 108–113 28 Xuezhe Ma and Eduard Hovy 2016 End-to-end sequence labeling via bidirectional LSTM-CNNsCRF In Proceedings of ACL, pages 1064–1074 29 Alexis Conneau and Guillaume Lample 2019 Crosslingual Language Model Pretraining In Proceedings of NeurIPS, pages 7059–7069 ... QUẢN LÝ VÀ CƠNG NGHỆ HẢI PHỊNG - TÌM HIỂU VỀ MƠ HÌNH NGƠN NGỮ PHOBERT CHO BÀI TỐN PHÂN LOẠI QUAN ĐIỂM BÌNH ḶN TIẾNG VIỆT ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY NGÀNH: CÔNG NGHỆ... Mơ hình BERT trình bày vê mơ hình BERT và các khái niệm liên quan, chương 2: Mơ hình PhoBERT trình bày vê các tìm hiểu cho mơ hình PhoBERT, Chương 3: Ứng dụng PhoBERT cho bài toán phân. .. Nội dung hướng dẫn: + Tìm hiểu vê mơ hình ngơn ngư PhoBert + Tìm hiểu vê bài toán phân tích quan điểm người dùng, phân loại quan điểm bình ḷn Tiếng Việt + Tìm hiểu vê ngơn ngư lập