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

Luận văn thạc sĩ Khoa học máy tính: Xây dựng và đánh giá hiệu suất chương trình phân tích cảm xúc tiếng Việt kết hợp khía cạnh bằng Vietnamese Treebank

58 0 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

Cấu trúc

  • CHƯƠNG 1 MỞ ĐẦU (12)
    • 1. Giới thiệu đề tài (12)
    • 2. Mục tiêu, giới hạn và đối tượng nghiên cứu (13)
    • 3. Phương pháp nghiên cứu (13)
    • 4. Cấu trúc của luận văn (14)
  • CHƯƠNG 2 CƠ SỞ LÝ THUYẾT (15)
    • 1. Định nghĩa vấn đề (15)
    • 2. Recursive Neural Network (RNN) (15)
    • 3. Matrix-Vector RNN (MV-RNN) (16)
    • 4. Recursive Neural Tensor Network (RNTN) (16)
    • 5. Hàm mục tiêu (17)
    • 6. Giải thuật huấn luyện mô hình RNTN của CoreNLP (18)
      • 6.1. Tiền điều kiện và giá trị ban đầu (18)
      • 6.2. Hàm chính (main) (19)
      • 6.3. Hàm tính đạo hàm của các câu trong một batch (22)
      • 6.4. Hàm tính cảm xúc của câu và những vector đại diện cho nó (23)
      • 6.5. Hàm tính đạo hàm và lỗi của từng nút trong câu (25)
    • 7. Mô hình phân tích cảm xúc của CoreNLP (27)
  • CHƯƠNG 3 PHƯƠNG PHÁP HIỆN THỰC (28)
    • 1. Tiền xử lý (28)
      • 1.1. Dữ liệu huấn luyện dành cho bộ phân tích cú pháp (29)
      • 1.2. Dữ liệu huấn luyện dành cho bộ phân tích cảm xúc (29)
    • 2. Tích hợp vnTokenizer vào CoreNLP (31)
    • 3. Tích hợp vnTagger để gán POS cho tiếng Việt vào CoreNLP (32)
    • 4. Tích hợp Syntactic Parsing cho tiếng Việt vào CoreNLP (32)
      • 4.1. VietnameseHeadFinder (33)
      • 4.2. VietnamesePennTreebankLanguagePack (35)
      • 4.3. VietnameseTreebankParserParams (36)
      • 4.4. EvaluateTreebank (36)
    • 5. Tích hợp bộ phân tích cảm xúc cho tiếng Việt vào CoreNLP (36)
      • 5.1. Đề xuất cơ sở dữ liệu cho Vietnamese Sentiment Treebank (37)
      • 5.2. Đề xuất các bước để tiến hành xây dựng Vietnamese Sentiment Treebank (40)
      • 5.3. Giải thuật để gán nhãn cảm xúc tự động (41)
      • 5.4. Giải thuật huấn luyện với khía cạnh (43)
  • CHƯƠNG 4 THỰC NGHIỆM (45)
    • 1. Dataset (45)
    • 2. Kết quả (47)
      • 2.1. Kết quả huấn luyện của bộ phân tích cú pháp (47)
      • 2.2. Kết quả huấn luyện của mô hình cảm xúc RNTN (48)
  • CHƯƠNG 5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN (50)
    • 1. Kết quả đạt được và những hạn chế (50)
    • 2. Hướng phát triển (51)
    • 1. Chương trình chính (53)
      • 1.1. Mã nguồn (53)
      • 1.2. Môi trường (53)
      • 1.3. Tiến hành cài đặt (53)
      • 1.4. Hướng dẫn chạy huấn luyện parser (56)
      • 1.5. Hướng dẫn chạy huấn luyện cảm xúc (56)
    • 2. Công cụ hỗ trợ (0)
      • 2.1. Giao diện website (56)
      • 2.2. Treeviewer (57)
      • 2.3. Tiện ích khác (57)

Nội dung

DANH MỤC CÁC HÌNH VẼ Hình 2.1 – Hình minh họa cách tính trên cây trong mô hình RNN Hình 2.2 – Quá trình phân tích một câu hay đoạn văn của CoreNLP [4] Hình 3.1 – Minh họa luồng chạy mới

CƠ SỞ LÝ THUYẾT

Định nghĩa vấn đề

Trước khi đi vào chi tiết chúng ta sẽ đi qua phần định nghĩa của bài toán để nắm bắt được mục tiêu và vấn đề mà đề tài này hướng đến để giải quyết Định nghĩa bài toán trong đề tài này được chúng tôi mở rộng từ định nghĩa của [2] như sau: “Cho trước tập câu L = {l 1 , l 2 , l 3 , }, khía cạnh A = {a0 ,a1, a2, } trong đó a0 là khía cạnh đặc biệt mang nghĩa đại diện cho toàn bộ câu và cảm xúc S = {s1, s2, }, xác định tập hợp các cặp khía cạnh - cảm xúc {(a0 i , s2 i ), (a1 i , s1 i ), (a2 i , s2 i ) } cho từng câu l i ”

Bài toán này được giải bằng Recursive Neural Model Ý tưởng cơ bản của mô hình này là mỗi một cụm từ (phrase) hay một câu sẽ được phân tích thành một cây nhị phân với mỗi một nút lá đại diện cho một từ, còn nút trong của cây này thể hiện sự kết hợp của những từ trong câu theo một cách nào đó Mỗi một từ sẽ được biểu diễn bằng một vector d-chiều và giá trị của chúng sẽ được khởi tạo một cách ngẫu nhiên hoặc từ tập huấn luyện trước Những vector này được xếp vào ma trận L, gọi là ma trận từ vựng, sẽ được học cùng với mô hình Chúng tôi sẽ tóm tắt về từng mô hình của Recursive Neural Model và sơ lược về quá trình phân tích cảm xúc của CoreNLP ở phần dưới đây.

Recursive Neural Network (RNN)

Đây là mô hình đầu tiên và cơ bản nhất Do vậy việc tính toán cũng khá đơn giản Dưới đây là công thức để tính toán cho từng nút trong hình 2.1

Trong đó hàm f = tanh là hàm phi tuyến trên từng phần tử (standard element- wise non-linearity) W là ma trận sẽ được học Những vector này sẽ được tính toán theo cách từ dưới lên (bottom-up) cho tới khi nào tới nút gốc thì ngừng

Hình 2.1 – Hình minh họa cách tính trên cây trong mô hình RNN

Matrix-Vector RNN (MV-RNN)

Đây là mô hình cải tiến của mô hình trên (RNN) Thay vì mỗi một nút chỉ có một vector để diễn tả ngữ nghĩa của từ đó trong văn phạm thì bây giờ trong mô hình MV-RNN sẽ dùng thêm một ma trân có kích thước kết hợp với một vector d- chiều để biểu diễn cho một từ Ma trận này được khởi tạo bằng cách dùng ma trận đơn vị cộng thêm nhiễu Gaussian

Lấy ví dụ trong hình 2.1, cho A, B, C, P1, P 2 là các ma trận biểu diễn ở từng nút có vector tương ứng là a, b, c, p 1 , p 2 Dưới đây là công thức tính toán cho vector p 1 và ma trận P1 trong hình minh họa 2.1

Trong đó f và W là những tham số đã được định nghĩa trong mô hình RNN Ma trận W M là ma trận cần học cùng với A, B, C Việc tính các vector còn lại cũng tương như trên.

Recursive Neural Tensor Network (RNTN)

Một thử thách của mô hình MV-RNN là số lượng ma trận và vector sẽ tăng lên tuyến tính cùng với số lượng từ trong bộ từ điển của chúng ta Giải quyết vấn đề này, một mô hình mới được đưa ra đó là RNTN [1] không a đẹp b lắm c

Mô hình RNTN dùng một tensor duy nhất được định nghĩa bởi multiple bilinear forms để thay thế cho toàn bộ những ma trận của mô hình MV-RNN Chúng ta tiếp tục lấy hình 2.1 làm ví dụ Việc tính vector p 1 , p 2 sẽ theo công thức như sau:

Trong đó V là một tensor được định nghĩa bởi multiple bilinear forms Mỗi một phần của tensor là ma trận biểu diễn một ngữ nghĩa phức hợp nào đó của các từ với nhau theo từng chiều.

Hàm mục tiêu

Các phần trên ta chỉ mới giới thiệu về cách tính giá trị của các nút vector chứ chưa bàn về hàm mục tiêu, trong phần này chúng ta sẽ mô tả chi tiết hơn

Trước khi nói về hàm mục tiêu, ta thấy rằng chúng ta chỉ mới có giá trị của nút vector và giá trị này chưa nói lên được làm sao để phân loại nút này sẽ thuộc lớp cảm xúc nào Vì vậy ta cần một công thức để phân loại cảm xúc:

Trong đó, Ws là ma trận phân loại, là vector dự báo (predicted vector) tại nút gốc của một cụm từ hay câu i, C là số lượng lớp cảm xúc cần phân loại

Ngoài ra ta còn định nghĩa thêm một vector mục tiêu (target distribution vector)

Vector này có trị là 1 tại chiều ứng với nhãn đúng thực sự của cụm từ hay câu i và ngược lại sẽ là 0

Mục tiêu của chúng ta là tối thiểu khoảng cách giữa hai phân bố vector này Vì vậy hàm mục tiêu của chúng ta cần tối thiểu là:

- Trong đó, đối với mô hình RNTN thì thông số cần học θ = (V, W, W s , L)

Các tham số V, W đã được trình bày trong mục 4 ở trên, W s như đã nói là mà trận phân loại và L là ma trận chứa tất cả vector của từng từ trong từ điển

- Đối với mô hình của bài [2], trong quá trình huấn luyện, lỗi toàn cục của hàm phân loại Ws sẽ được truyền từ nút gốc cho tới nút lá và vì vậy dẫn tới một vấn đề là lỗi được truyền xuống cho những nút có thể không chứa khía cạnh nào đó Ví dụ, ta có câu "Iphone 8 nhìn thật tuyệt vời!" và ta thấy rằng cặp (thiết kế, tích cực) là khía cạnh và cảm xúc của câu này Tuy nhiên, bản thân cụm "Iphone 8" thì không có liên quan tới cảm xúc cũng như là khía cạnh cả nên nếu ta lan truyền hàm lỗi cho những nút này thì không được chính xác Do vậy, phương pháp của bài [2] dùng heuristic là chỉ truyền lỗi của hàm phân loại xuống tới mức(level) log 2 N với N là chiều cao của cây.

Giải thuật huấn luyện mô hình RNTN của CoreNLP

Trong phần này, chúng tôi sẽ trình bày chi tiết hơn giải thuật đã được CoreNLP dùng để huấn luyện một mô hình RNTN dựa vào các lý thuyết đã nêu ở trên Giải thuật này gồm có các phần như sau:

6.1 Tiền điều kiện và giá trị ban đầu :

Bắt cứ một giải thuật nào điều cần có một số điều kiện, giá trị biến ban đầu để đảm bảo chương trình có thể chạy được Vì vậy, trong phần tiếp theo đây, chúng tôi sẽ trích một số điều kiện cũng như thông số của chương trình mà chúng ta cần lưu ý đến:

- Giá trị của vector của từng từ (word vector) được sinh ngẫu nhiên từ phân phối Gaussian ( )

- Giá trị của bias trong khoảng (0,1)

- f(x) = tanh(x) là standard element-wise nonlinearity function

- Trong giải thuật này Sentiment Model tương đương với RNTN model

- Mỗi câu sẽ là một cây (Sentiment Tree)

- Ví dụ một số tham số quan trọng của training options:

Bảng 2.1 – Một số tham số quan trọng trong giải thuật huấn luyện cảm xúc của

Tên tham số Giá trị mặc định Ý nghĩa numHid 2 Số Chiều hay kích thước word vectors numClasses 5 Số lượng lớp phân loại classNames Very negative,

Negative, Neutral, Positive, Very positive

Tên của lớp phân loại tương ứng với 5 lớp: rất tiêu cực, tiêu cực, trung tính, tích cực, rất tích cực batchSize 27 Số lượng câu trên một batch huấn luyện

Epochs 400 Số chu kỳ huấn luyện debugOutputEpochs 8 Số chu kỳ để xuất kết quả huấn luyện ra màn hình maxTrainTimeEpochs 86400 Thời gian huấn luyện tối đa là một ngày tương đương 86400 giây learningRate 0.01 Xác định tốc độ học của giải thuật adagradResetFrequency 1 Xác định số chu kỳ để cập nhật lại tổng bình phương của feature về giá trị khởi động ban đầu

6.2 Hàm chính (main): trainSentimentModel(trainingOptions)

Sau khi đã nắm được những điều kiện cũng như một số thông số quan trong ban đầu Bây giờ chung ta sẽ đi vào hàm chính của quá trình huấn luyện phân tích cảm xúc Trong hàm này sẽ bao gồm những bước xử lý sau:

Bước 1 Khởi tạo Sentiment Model với giá trị tham số truyền vào Model gồm các phần tử cơ bản sau:

 Ma trận classification(Ws) kích thước: numClasses x (numHid + 1) với giá trị được sinh ngẫu nhiên

 Ví dụ: Ma trận W s có kích thước theo cấu hình trong bảng 2.1

 Cột cuối của ma trận này là bias

 Ma trận W kích thước numHid x (2 * numHid + 1) với giá trị được sinh ngẫu nhiên

 Ở đây cột cuối thêm vào để cho phép nhân ma trận khả dĩ nên chúng ta sẽ không quan tâm cột này

 Tensor (V) kích thước (2 * numHid) x (2 * numHid) x numHid với giá trị được sinh ngẫu nhiên

 Ví dụ: Giá trị của tensor (V)

 Một danh sách các word vector từ dữ liệu huấn luyện với giá trị được sinh ngẫu nhiên

 Ví dụ: Giá trị của các cột vector trong ma trận từ điển L

Bước 2 Dùng giải thuật AdaGrad [3] để huấn luyện Sentiment Model double[] sumGradSquare = new double[SentimentModel.totalParamSize()];

 Ở đây hàm model.totalParamSize() trả về kích thước của model hiện tại bao gồm kích thước của 2 ma trận W s , W, một tensor(V) và các word vector

Bước 3 Lặp qua các chu kỳ (trainingOptions.epochs)

Bước 3.1 Gán các phần tử của mảng sumGradSquare về bằng 0

Bước 3.2 Trộn các câu từ tập huấn luyện và chia các câu thành các batch theo trainingOptions.batchSize

Bước 3.3 Lặp qua từng batch

Bước 3.3.1 Chuyển tất cả các phần tử của model(W s , W, V, các word vector) thành một vector với kích thước là tổng của các thành phần trên: [numClasses

* (numHid + 1)] * [ numHid * (2 * numHid + 1)] * [(2 * numHid) * (2 * numHid) * numHid] * [(số lượng từ trong tập training) * numHid] double[] theta = model.paramsToVector();

Bước 3.3.2 Mỗi một phần tử hay chiều của vector này được gọi là một feature trong giải thuật Và nhiệm vụ của giải thuật sẽ là huấn luyện các feature này

Trong bước tiếp theo này sẽ tính lỗi của theta hay model so với batch hiện tại

SentimentCostAndGradient(model, trainingBatch); double[] gradf = gcFunc.calculateDerivatives();

Bước 3.3.3 Với mỗi một lỗi của feature hay phần tử trong gradf tính lại feature theo công thức sau:

√ [ ] Với = 0.001 là hằng số của giả thuật AdaGrad

Bước 3.3.4 Chuyển các feature trong theta về lại các phần tử trong model

Bước 3.4 Sau một số chu kỳ nhất định(trainingOptions.debugOutputEpochs) sẽ đánh giá hiệu quả của Sentiment Model thông qua tập test và lưu model đó xuống file

6.3 Hàm tính đạo hàm của các câu trong một batch: calculateDerivatives()

Hàm này được gọi bởi hàm chính dùng để thực hiện ba việc chính sau:

- Tính cảm xúc và các vector đại diện cho các câu trong cùng một batch thông qua hàm con forwardPropTrees

- Tính lỗi và truyền lỗi xuống các nút con của những cây trên thông qua hàm con backpropDerivativesAndError

- Cuối cùng scale và regularize các lỗi giữa các câu trong batch Các bước thực hiện của hàm này được mô tả bên dưới:

Bước 1 Khởi tạo các giá trị ban đầu cho các đạo hàm là rỗng derivatives = new ModelDerivatives()

Bước 2 List forwardPropTrees = nil Bước 3 for tree in trainingBatch

Bước 3.1 forwardPropTrees.add(SentimentCostAndGradient.forwardPropagateTre e(tree))

Bước 4 for tree in forwardPropTrees

Bước 5 chia lỗi điều trên số lượng câu scale = (1.0 / trainingBatch.size())

Bước 6 scale và regularize các đạo hàm

 Lưu ý: Trước khi tính đạo hàm, W s sẽ cập nhật lại cột bias bằng không

6.4 Hàm tính cảm xúc của câu và những vector đại diện cho nó: forwardPropagateTree(tree)

Nhưng đã trình bày ở trên hàm này được dùng để tính cảm xúc và các vector đại diện cho cây và bao gồm các bước sau:

Bước 1 Nếu tree là từ (nút lá) thì node vector của từ đó được tính theo công thức nodeVector = f(wordvector) = tanh(wordvector)

Bước 2 Nếu tree không phải nút lá thì nodeVetor của nút đó được tính như sau

Bước 2.1 Gọi đệ quy tính con bên trái và con bên phải forwardPropagateTree(tree.leftChild) forwardPropagateTree(tree.rightChild)

 nodeVector của con bên trái (LeftNodeVector)

 nodeVector của con bên phải (RightNodeVector)

 Ở đây hàng cuối là bias

Bước 2.3 Tính nodeVector = tanh((tensorIn) T x V x (tensorIn) + W x (childrenVector))

 Ở đây, phép nhân giữa (tensorIn) T x V x (tensorIn) là bilinear product

 Ví dụ tính bilinear product cho tensor V có 2 slice Lấy childrenVector và tensor V như ví dụ ở trên

Bước 3 Tính vector dự báo (y i hay predictions) tại node i

 Ở đây nodeVector i còn được nối thêm hàng bias trước khi thực hiện phép nhân ma trận

 Ví dụ output của vector predictions

6.5 Hàm tính đạo hàm và lỗi của từng nút trong câu: backpropDerivativesAndError(tree, , , , , )

Tương tự hàm trên hàm này được gọi bởi calculateDerivatives dùng để lan truyền lỗi từng nút trong cây, bao gồm các bước sau:

Bước 1 Xây dựng vector ( t i ) là vector chứa nhãn thực tế tại node i

Ví dụ: từ có cảm xúc là 2 (Neutral) thì vector t i sẽ là

Bước 3 Tính đạo hàm của ma trận phân loại ( Ws) tại node i

Bước 4 Tính đạo hàm tổng của Ws tại node i

Bước 5.1 Nếu tree không phải là nút lá thì Bước 5.1.1 Tính lỗi của hàm softmax tại node i

Bước 5.1.2 Tính lỗi toàn cục (complete incoming error messages) của node i

Bước 5.1.3 Tính đạo hàm của W tại node i

Bước 5.1.4 Tính đạo hàm tổng của W tới nút i

Bước 5.1.5 Tính đạo hàm của V tại node i

 Với là đạo hàm tại slice k của tensor, là phần tử thứ k của vector

Bước 5.1.6 Tính đạo hàm tổng của V tới node i

Bước 5.1.7 Tính lỗi truyền xuống cho nút con

 Lỗi của con bên trái lấy tử phần tử thứ 1 đến phần tử thứ numHid và ký hiệu là [ ]

 Tương tự của con bên trái, lỗi của con bên phải là [ ]

Bước 5.1.8 Gọi đệ quy tính cho những nút con backpropDerivativesAndError(leftChild, , , , [ ] ) backpropDerivativesAndError(rightChild, , , , [ ])

Bước 5.2 Nếu tree là nút lá thì Bước 5.2.1 Tính lỗi của hàm softmax tại nút i

Bước 5.2.2 Tính lỗi toàn cục của nút i

Bước 5.2.3 Tính đạo hàm tổng của từ tại nút lá

Mô hình phân tích cảm xúc của CoreNLP

Sau khi đã huấn luyện được mô hình để phần tích cảm xúc thì vấn đề còn lại là vận dụng mô hình đó để phân tích và dự báo kết quả của một câu văn Đại học Standford đã đưa ra những bước cần thiết để làm việc này Trong phần này chúng tôi trình bày sơ lược những bước này cũng như những thành phần cần được cập nhật lại cho tiếng Việt

Hình 2.2 – Quá trình phân tích một câu hay đoạn văn của CoreNLP [4]

Trong hình 2.2 đã minh họa cách mà một câu hay một đoạn văn được phân tích Đầu tiên từ một câu hay đoạn văn ban đầu, chương trình sẽ chuyển nó thành một đối tượng (Annotation Object) Bước tiếp theo những thành phần khác của chương trình (tokenization, sentence splitting …) sẽ thao tác trên đối tượng này Cuối cùng là trả kết

Sentiment Analysis (sentiment) đã được phân tích về Đối với phần phân tích cảm xúc thì ta chỉ quan tâm tới nhưng thành phần sau:

 Tokenization: tách từ trong từ điển thành những token Đối với tiếng Việt, chúng tôi sẽ thay thế bằng vnTokenizer [5]

 Sentence Splitting: chia những đoạn văn thành những câu bởi dấu “.” Đối với thành phần này thì ta không cần thay thế mà chỉ cần dùng lại

 Part-of-speech Tagging (POS): gán nhãn từ loại (ví dụ như tính từ, danh từ, liên từ …) của từ trong câu Thành phần này cũng phải được thay thế cho tiếng Việt Vì vậy chúng tôi sẽ dùng POS [6] cho Tiếng Việt

 Syntactic Parsing: phân tích cấu trúc của câu dựa vào Part-of-speech của phần trên Đối với thành phần này, chúng ta cần huấn luyện lại parser trên cây ngữ pháp tiếng Việt (Vietnamese Treebank 1 ) vì ở đây parser dùng giải thuật Probabilistic Context-Free Grammars (PCFGs)

 Sentiment: Dùng mô hình RNTN để phân loại cảm xúc Cũng giống như bộ phân tích cú pháp, nhiệm vụ chính của chúng ta trong thành phần này là huấn luyện mô hình RNTN cho tiếng Việt.

PHƯƠNG PHÁP HIỆN THỰC

Tiền xử lý

Như đã trình bày trong chương 2 mục 7 đó là ta sẽ huấn luyện cho bộ phân tích cú pháp và bộ phân tích cảm xúc Và để làm được chuyển này ta cần một bộ dữ liệu chuẩn đúng định dạng mà CoreNLP cần, nếu không việc huấn luyện sẽ cho kết quả không tốt, nên chúng tôi đã tiến hành tiền xử lý dữ liệu cho cả hai bộ này như sau

1 https://vlsp.hpda.vn/demo/?page=resources&lang=en

1.1 Dữ liệu huấn luyện dành cho bộ phân tích cú pháp Để huấn luyện parser chúng tôi đã dùng hơn 10.000 cây trong Vietnamese Treebank Tuy nhiên dữ liệu này còn nhiều phần chưa chính xác và chưa tương thích với CoreNLP nên chúng tôi đã tiến hành cập nhật cũng như chỉnh sửa lại dữ liệu này

Gồm các bước chính sau:

- Thêm ROOT là phần tử đầu tiên của câu

- Chỉnh sửa những nhãn từ loại, cú pháp bị gán sai ví dụ: X-P thành XP, dấu ' ' thành ",

- Loại bỏ nhãn không đúng định dạng của Penn Tree như *E*

- Thêm nhãn cú pháp -NONE- cho thành phần rỗng *T*

1.2 Dữ liệu huấn luyện dành cho bộ phân tích cảm xúc

Dữ liệu được lấy từ nhận xét của người dùng nên được viết không đúng quy cách, sai cú pháp, thêm ký tự đặc biệt (ví dụ: ^.^, :D, :P …) , một nhận xét bao gồm các câu nhỏ trên nhiều dòng, câu toàn ký tự in hoa, chiều dài các nhận xét thì khác nhau từ 4,5 từ tới hơn 100 từ …

Với những dữ liệu như vậy có thể ảnh hưởng đến hiệu suất của chương trình Đơn cử chiều dài của câu mà lớn hơn 100 từ thì chương trình sẽ bị lỗi (hết RAM) Vì vậy chúng tôi phải viết một đoạn chương trình nhỏ để xử lý bán tự động dữ liệu này bên cạnh đó vẫn phải kiểm tra lại bằng tay để đảm bảo tính đúng đắng của dữ liệu

Dưới đây là bảng tóm tắt các bước đã làm của chương trình để loại bỏ dữ liệu thừa

Bảng 3.1 – Các bước đã làm để chuẩn hóa dữ liệu huấn luyện cho bộ phân tích cảm xúc

Bước Mô tả Biểu thức chính qui

1 Gom các câu ở nhiều dòng thành một câu /\s*\n+\s*/

2 Thay thế câu bắt đầu bằng – bởi dấu chấm “.” /^\s*-\s*/

3 Thay thế câu bắt đầu bằng + bởi dấu chấm “.” /\s*\+\s*/

4 Loại bỏ ký tự đặc biệt ^.^, :D, :P … Không có 5 Loại bỏ nhiều khoảng trắng bởi một khoảng trắng /\s+/S

6 Thay thế ký tự , bởi , /,\s+\.\s/

7 Thay thế dấu chấm ở đầu câu /^\s*\.\s*/

8 Thay thế nhiều dấu chấm than bởi một dấu chấm than

9 Thay thế nhiều dấu chấm hỏi bởi một dấu hỏi /\?\?+/

10 Thay thế những câu bắt đầu theo dạng 1 bởi dấu

11 Thay chuỗi có dạng : bởi : /\:\s+\.\s/

12 Thay chuỗi có dạng )) bởi /\s\.\s\)\)+/

13 Thay chuỗi có dạng ; bởi /\,\s*\.\s*[^.]/

14 Thay chuỗi có dạng , bởi /;\s+\./

15 Thay chuỗi có dạng : * bởi : /:\s*\*/

16 Thay chuỗi có dạng * bởi /\.\s*\*/

17 Thay nhiều dấu chấm gần nhau /[^.]\.\s*\.[^.]/

18 Thêm khoảng trắng cho dung lượng ví dụ như

19 Chuyển toàn bộ câu với số chữ in hoa hơn 10 thành chữ thường

20 Giới hạn số từ của câu là dưới 95 từ Không có

Ngoài việc loại bỏ phân tử nhiễu, chúng tôi còn đề xuất dùng đánh giá (rating) làm nhãn cảm xúc cho toàn bộ câu nhận xét Ví dụ hiện tại đánh giá của người dùng có giá trị từ 1 sao tới 5 sao nên chúng tôi đã chuyển nó thành nhãn cảm xúc như sau: đánh giá có giá trị 1 sao thì nhãn cảm xúc là 0 (rất tiêu cực – very negative), tương tự đánh giá có giá trị 2, 4, 5 sao thì nhãn cảm xúc lần lượt là 1(tiêu cực – negative) , 3 (tích cực – positive) , 4 (rất tích cực – very positive) Chỉ đặc biệt đối với đánh giá có giá trị 3 sao thì phải được kiểm tra và gán nhãn lại.

Tích hợp vnTokenizer vào CoreNLP

Sau khi đã có một dữ liệu tương đối ổn định việc cần làm tiếp theo là tách các từ thành các token Đối với tiếng Anh bộ tokenizer của CoreNLP sẽ tách từ bởi khoảng trắng và mỗi từ như vậy ta tính là một token Tuy nhiên đối với tiếng Việt thì không phải như vậy Khoảng trắng trong tiếng Việt dùng để tách âm tiết chứ không phải là một từ hay token Với vnTokenizer mà chúng ta sẽ tích hợp vào trong CoreNLP sẽ giúp giải quyết được vấn đề này

Vì vnTokenizer và CoreNLP được viết trên cùng ngôn ngữ là Java nên việc tích hợp cũng tương đối đơn giản, gồm các bước sau:

- Copy toàn bộ source code, thư viện, cấu hình của vnTokenizer vào CoreNLP

- Trước khi bộ tokenizer của CoreNLP tách từ bởi khoảng trắng thì ta thêm đoạn code gọi vnTokenizer để kết hợp các âm tiết thành một từ bởi dấu gạch dưới “_”

Ví dụ, như chuỗi nhập là “Rất đẹp, phù hợp với tôi” sau khi qua bộ vnTokenizer sẽ cho ra là “Rất đẹp, phù_hợp với tôi”

Các âm tiết được ghép lại thành một từ bởi _

Hình 3.1 – Minh họa luồng chạy mới sau khi thêm vnTokenizer vnTokenizer

Tích hợp vnTagger để gán POS cho tiếng Việt vào CoreNLP

Sau khi các từ đã được tách thành các token Nhiệm vụ tiếp theo là ta phải gán nhãn từ loại (POS) cho các token này Nhãn từ loại của CoreNLP cho tiếng Anh và vnTagger cho tiếng Việt gần như là không giống nhau Nên phải được thay thế hoàn toàn

Có một điều không may là bộ vnTagger được huấn luyện cũng bởi thư viện CoreNLP bảng cũ (2.0) Nên việc tích hợp khá khó khăn bởi vnTagger gọi những class trong CoreNLP nhưng class này đã thay đổi về cách hiện thực so với bảng trước Để giải quyết vấn đề này thì có hai cách Một là huấn luyện lại vnTagger với CoreNLP hiện tại (3.8) Hai là copy toàn bộ source code và đổi namespace của tất cả các class của vnTagger Cuối cùng, chúng tôi đã quyết định chọn cách hai vì dễ hiện thực và nhanh hơn cách một tuy nhiên với cách này code sẽ nhiều hơn và về lâu về dài sẽ khó để quản lý, nâng cấp

Ngoài ra, chúng tôi còn hiện thực một hàm mới tên là tagListCoreLabel trong vnTagger Hàm này hoàn toàn giống hàm tagList trong bản thân vnTagger ngoại trừ thông số nhận vào là một danh sách CoreLabel (List) thay vì danh sách String và kết quả trả về là danh sách của class TaggedWord để phù hợp với kết quả đầu ra của bộ POS cho tiếng Anh

Sau khi làm tất của những điều ở trên thì việc tích hợp khá đơn giản Ta chỉ cần thay hàm POS trong CoreNLP bằng hàm mới là tagListCoreLabel Như vậy là ta đã tích hợp xong vnTagger cho tiếng Việt vào CoreNLP.

Tích hợp Syntactic Parsing cho tiếng Việt vào CoreNLP

Bộ Syntactic Parsing là phần tiếp theo mà ta cần cập nhật để phù hợp cho tiếng Việt Mục đích chính của bộ này là để gán nhãn cú pháp của câu theo định dạng của Penn Tree Bên cạnh đó, vì bộ phân tích cảm xúc cần một cây cú pháp nhị phân làm đầu nhập nên bộ Syntactic Parsing cũng phải làm được điều này

Thật ra Syntactic Parsing cho tiếng Việt cũng đã hiện thực với tên là Vietnamese Syntactic Parser 2 Tuy nhiên cách hiện thực của nó hoàn toàn khác với CoreNLP nên việc tích hợp là rất khó, ngoài ra hiệu suất của nó do chúng tôi kiểm

2 https://vlsp.hpda.vn/demo/?page=resources chứng lại cũng không tốt (dưới 60%) Nên chúng tôi quyết định huấn luyện cho bộ Syntactic Parsing của CoreNLP để có thể gán nhãn cú pháp cho tiếng Việt đồng thời chuyển cây cú pháp đó về cây nhị phân Để huấn luyện cho bộ Parsing của CoreNLP không chỉ đơn giản là cung cấp một dataset của tiếng Việt là đủ mà còn cần định nghĩa lại cấu trúc của tiếng Việt thông qua việc tạo mới ba class: VietnameseHeadFinder,

VietnamesePennTreebankLanguagePack, VietnameseTreebankParserParams và chỉnh sửa lại cách Parsing đánh giá kết quả huấn luyện bởi class EvaluateTreebank Dưới đây chúng tôi sẽ mô tả chi tiết về các lớp này cũng như cách chúng tôi đã làm để chỉnh sửa chúng

Lớp này dùng để xác định thành phần con nào của nút có nhiều hơn hai con trở lên sẽ là thành phần chính (head) và về sau sẽ dùng thành phần này để tách nút đó thành nhị phân Hãy lấy một ví dụ để làm rõ hơn, ví dụ ta có một cụm NP gồm ba nút con là M, N, AP như hình minh họa bên dưới Rõ ràng nếu chỉ có một nút con như AP thì nút con này là thành phần chính Còn từ hai nút con thì việc xác định phải do chúng ta Trong trường hợp này N là thành phần con chính của NP

Hình 3.2 – Minh họa một nhánh đã được gán nhãn cú pháp Để định nghĩa một luật xác định thành phần chính phải tuần theo định dạng sau:

Tên thành phần {“loại tìm kiếm”, “Thành phần con 1”, “Thành phần con 2”,

…}, {luật 2 có những thành phần tương tự}, …

 Ở đây ta có bốn loại tìm kiếm: o “left”: tìm từ trái sang phải theo các thành phần trong luật rồi mới tìm trên cây

M N AP hai cùi_tay A lạ_đời o “leftdis”: tìm từ trái sang phải trên cây trước, rồi mới tới luật o “right”: tìm từ phải sang trái theo các thành phần trong luật rồi mới tìm trên cây o “rightdis”: tìm từ phải sang trái trên cây trước rồi mới tới luật

 Giải thuật về tìm thành phần chính 3 có thể được tìm hiểu rõ hơn trên trang tài liệu hướng dẫn của CoreNLP

 Ví dụ đối với thành phần AP có luật {"left", "A"} có nghĩa là tìm từ trái sang phải trên các nút con có thành A thì thành phần đó sẽ là thành phần chính

Các luật được chúng tôi định nghĩa lại cho tiếng Việt trong VietnameseHeadFinder như bảng dưới đây

Bảng 3.2 – Các luật tìm thành phần chính cho tiếng Việt

4 NP {"leftdis", "LBKT"}, {"right", "A"},{"left", "Nc",

7 ROOT {"left", "S", "SQ", "SINV", "SBAR", "FRAG"}

9 S {"leftdis", "C", "S", "SBAR", "AP", "NP", "VP",

3 https://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/trees/AbstractCollinsHeadFinder.html

13 VP {"left", "V", "R", "VP", "NP", "PP"}

Class này mô tả cấu trúc của dữ liệu đưa vào huấn luyện cũng như cấu trúc của tiếng Việt ví dụ như câu bắt đầu nhãn cú pháp gì (thường là ROOT), những ký tự nào là dấu câu (! : ,) , chuỗi ký tự nào là ký tự đã mã hóa (ví dụ: dấu mở ngoặc “ ( ” thành “LKBT” trong Penn Tree)

Hiện tại đối với class này chúng tôi chỉ copy toàn bộ code của EnglishPennTreebankLanuagePack và chỉnh sửa hai phần sau:

- Thêm vào hai ký tự mã hóa cho tiếng Việt là LKBT, RKBT tương ứng với dấu đóng và mở ngoặc ()

- Thay thế phương thức tìm thành phần chính bằng VietnameseHeadFinder

Trong class này thành phần quan trọng nhất là hàm transformTree Hàm này dùng các luật hay nét bổ sung thêm cho parser để nhằm tăng tính hiệu quả của giải thuật parsing Ví dụ, thêm giải thích cho nhãn cú pháp PP-LOC để chỉ rằng cụm giới từ này nói về vị trí

Do thời gian có hạn nên chúng tôi tạm thời chấp nhận những luật mà đã được định nghĩa mặc định cho tiếng Anh để dùng cho tiếng Việt

Class này được dùng để đánh giá kết quả huấn luyện của parser Gần như chúng tôi không thay đổi gì nhiều ở class này chủ yếu là thay bộ gán nhãn cú pháp của tiếng Anh bằng tiếng Việt thông qua việc viết mới hàm tagOneSentence.

Tích hợp bộ phân tích cảm xúc cho tiếng Việt vào CoreNLP

Một thành quan trọng nữa đã được chúng ta tích hợp thành công Cuối cùng ta chỉ còn một thành phần nữa mà thôi để tất việc tích hợp tiếng Việt cho CorNLP đó là bộ phân tích cảm xúc Trong bộ phân tích cảm xúc (sentiment) khi huấn luyện độc lập với khía cạnh thì chúng tôi không thay đổi bất cứ gì cả Đó là điều may mắn nhất Còn khi huấn luyện với khía cạnh thì chúng tôi phải chỉnh sửa ở dữ liệu nhập vào và cách đánh giá việc huấn luyện

Tương tự như bộ parser, bộ sentiment cũng cần được huấn luyện để có thế được dự báo được cho tiếng Việt Không may mắn cho bộ sentiment là hoàn toàn không có dữ liệu huấn luyện trước như là bộ parser nên chúng tôi tiến hành tạo, gán nhãn tự động cũng như tiến hành kiểm tra lại Và chúng tôi tạm gọi bộ dữ liệu này là

“Vietnamese Sentiment Treebank” hay “Ngân hành cây cảm xúc tiếng Việt”

Ví dụ về dữ liệu nhập cho huấn luyện cảm xúc được lấy từ Vietnamese Sentiment Treebank

(1 (3 (3 (3 (2 (2 cá_nhân) (2 mình)) (3 (2 lại) (3 (3 thích) (2 (2 (2 màn_hình) (2 Asus)) (2 này))))) (2 ,)) (2 (1 (2 đợt) (2 trước)) (1 (2 (2 dùng) (1 (2 con) (1 (2 HP) (2

(1 (1 (2 15,6) (2 '')) (2 res)) (1 (1 (2 1280) (2 *)) (2 720)))))) (3 (2 nhìn) (3 (2 chữ_nghĩa) (2 rõ_ràng)))))) (2 ))

Nếu có thể gán nhãn cảm xúc cho tất cả các từ cụm từ thì rất tốt nhưng chắc chắn rất tốn công sức và thời gian vì lượng cụm từ sẽ rất nhiều (khoảng hơn 100.000 là bình thường) nên chúng tôi đề xuất một phương pháp khác đó là dùng máy hỗ trợ gán nhãn cảm xúc mà được trình bày chi tiết trong mục 5.1, 5.2, 5.3 và trong mục 5.4 chúng tôi sẽ giới thiệu việc cải tiến giải thuật để có thể huấn luyện cùng khía cạnh thiết kế

5.1 Đề xuất cơ sở dữ liệu cho Vietnamese Sentiment Treebank

Việc huấn luyện cho bộ phân tích cảm xúc cần một khối lượng dữ liệu lớn để xử lý bên cạnh đó bộ phân tích cú pháp cũng cần tiền xử lý nên cần một cơ sở dữ liệu để cho việc xử lý, cập nhật được dễ dàng hơn Ngoài ra chúng ta còn có thể hiện thực chương trình nhỏ dựa trên cơ sở dữ liệu này để dành cho việc kiểm tra, thống kê kết quả huấn luyện

Chúng tôi đề xuất năm bảng gồm: products, reviews, accessory, words, tmp để lưu trữ những thông tin của ngân hành cây cảm xúc Dưới đây là bảng mô tả chi tiết từng bảng trong cơ sở dữ liệu

- Bảng products được dùng để lưu trữ sản phẩm và nhận xét về chúng trước khi xử lý

Bảng 3.3 – Thông tin về các cột trong bảng products

Tên cột Ý nghĩa id Khóa chính category Loại sản phẩm như smartphone , camera… link Đường dẫn tới sản phẩm đó trên website comment Những nhận xét về sản phẩm đó ở dạng JSON num_comment Số lượng câu nhận xét

- Bảng reviews được dùng để lưu trữ nhận xét lúc đã được tiền xử lý

Bảng 3.4 – Thông tin về các cột trong bảng reviews

Tên cột Ý nghĩa id Khóa chính category Loại sản phẩm như smartphone , camera… link Đường dẫn tới sản phẩm đó trên website content Nội dung của nhận xét sentiment Giá trị cảm xúc của câu và được khởi tạo ban đầu bằng giá trị rating design_sentiment Nhãn cảm xúc về khía cạnh thiết kế length Số lượng từ trên câu nhận xét này product_id Là khóa ngoại tới id trong bảng product is_verified Trường này xác định rằng nhận xét này đã được kiểm tra lại bằng tay hay chưa - Bảng accessory được dùng để lưu trữ nhận xét về phụ kiện mà đã được tách thành từng từ, cụm từ và gán nhãn cú pháp cũng như cảm xúc tự động

Bảng 3.5 – Thông tin về các cột trong bảng accessory

Tên cột Ý nghĩa id Khóa chính parent id của từ hoặc cụm từ chứ từ hoặc cụm từ này category Nhãn cú pháp của từ hay cụm từ này là gì content Nội dung của từ hay cụm từ sentiment Giá trị cảm xúc của từ hay cụm từ predicted_sentiment Nhãn cảm xúc dự báo về từ hay cụm từ is_verified Trường này xác định rằng từ hay cụm từ này đã được kiểm tra lại bằng tay hay chưa is_in_dict Trường này xác định rằng từ hay cụm từ này đã tồn tại trong từ điển cảm xúc (bảng words) hay chưa reviews_id Là khóa ngoại tới id trong bảng reviews

- Bảng words được dùng để lưu trữ những từ, cụm từ đã được gán nhãn cảm xúc và kiểm tra bằng tay

Bảng 3.6 – Thông tin về các cột trong bảng words

Tên cột Ý nghĩa id Khóa chính content Nội dung của từ hay cụm từ sentiment Giá trị cảm xúc của từ hay cụm từ

- Bảng tmp được dùng lưu trữ tạm dữ liệu dùng cho website và có cấu trúc tương tự như bảng accessory Nhưng ở đây chỉ lưu những từ hay cụm từ mà có sự khác nhau giữa nhãn cảm xúc và nhãn dự báo

5.2 Đề xuất các bước để tiến hành xây dựng Vietnamese Sentiment Treebank Để có thể gán nhãn cảm xúc tự động một cách hiệu quả chúng tôi đã đưa ra một qui trình gồm các bước dưới đây:

Bước 1 Tiền xử lý như đã mô tả ở mục V.1.2 và dùng đánh giá (rating) cho nhãn cảm xúc Sau đó sẽ nhập kết quả đó vào bảng reviews

Bước 2 Dùng bộ parser của tiếng Việt để tách từ, cụm từ và gán nhãn cảm xúc tự động bằng bộ sentiment Cuối cùng, xóa toàn bộ dữ liệu trong accessory và thêm mới kết quả vào bảng accessory (vì ở đây chúng tôi chỉ dùng những sản phẩm liên quan tới phụ kiện cho việc huấn luyện và kiểm tra)

Bước 3 Từ bảng accessory sẽ tạo ra dữ liệu huấn luyện giống định dạng ở trên

Bước 4 Chia bộ accessory theo tỉ lệ 9:1 (10-fold cross validation) để huấn luyện và kiểm tra Nhập giá trị vào cột predicted_sentiment của bảng accessory cho dữ liệu test

Bước 5 Kiểm tra sự khác nhau giữa nhãn cảm xúc và nhãn thực tế Nếu khác nhau thì sẽ thêm vào bảng tmp để được kiểm tra lại bằng tay thông qua giao diện website

Bước 6 Sau khi kiểm tra nhãn cảm xúc trên giao diện website thì những từ, cụm từ này sẽ được cập nhật vào bảng words

Bước 7: Tiến hành huấn luyện lại bộ sentiment với dữ liệu đã được kiểm tra

Sau đó lặp lại bước 2 với bộ sentiment mới này cho tới đạt được độ chính xác như mong muốn

Hình 3.3 – Minh họa các bước để gán nhãn cảm xúc tự động

5.3 Giải thuật để gán nhãn cảm xúc tự động

Trong mục này chúng tôi sẽ trình bày chi tiết giải thuật mà đã được mô tả trong các bước 2,3,4 ở mục trên Giải thuật này bao gồm hai hàm

- Hàm chính dùng để khởi tạo các biến và chạy dự báo cảm xúc và các bước của giải thuật được mô tả bên dưới

Bước 1 Khởi tạo một pipeline mới để xử lý văn bản gồm: tokenizer, sentence split, pos, parser, sentiment

Khởi tạo danh sách câu nhân xét Khởi tạo danh sách giá trị cảm xúc Khởi tạo giá trị index bằng 0 Khởi tạo giá trị index2 bằng 0

Bước 2 While vẫn còn dữ liệu từ database (reviews)

Bước 2.1 danh sách câu nhận xét[index] = câu nhận xét từ database

Bước 2.2 danh sách giá trị cảm xúc[index] = cảm xúc của câu nhận xét này từ database

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

2 Dự báo nhãn cảm xúc

3 Tạo dữ liệu huấn luyện từ bảng accessory

4 Huấn luyện và thêm kết quả dự báo vào bảng accessory

5 Kiểm tra nếu có sự khác biệt giữa nhãn dự báo và thực tế thì thêm vào bảng tmp 6 Kiểm tra lại sự khác biệt này thông qua giao diên website 7 Huấn luyện lại với dữ liệu mới Lặp lại các bước cho tới khi đạt độ chính xác mong muốn

Bước 3 Dùng pipline ở trên để xử lý danh sách câu nhận xét Kết quả trả về là một danh sách các cây đã được gán nhãn cảm xúc lên tưng nút

Bước 4 While kết quả trả về của pipeline không rỗng Bước 4.1 Lấy ra từng cây trong danh sách

Bước 4.2 Gọi đệ qui hàm SubTree(một cây, danh sách giá trị cảm xúc

THỰC NGHIỆM

Dataset

Như đã đề cập ở chương trước dữ liệu huấn luyện cho bộ phân tích cú pháp dùng Vietnamese Treebank, tuy nhiên ngân hàng cây này đã được chúng tôi chỉnh sửa cho phù hợp và dưới đây là thống kê chi tiết của Vietnamese Treebank mà chúng tôi đã dùng

Bảng 4.1 – Thống kê dữ liệu huấn luyện của Vietnamese Treebank

Còn đối với việc huấn luyện cho sentiment, chúng ta cần phải có ngân hàng cây

(treebank) mà đã được gán nhãn cảm xúc Chi tiết về Vietnamese Sentiment Treebank được mô tả như sau:

 Dùng 4.884 câu nhận xét (với số lượng từ tối đa trên một câu là 94 từ) về phụ kiện trên tiki.vn

 Kiểm tra và gán nhãn cảm xúc cho 21.271 câu và cụm trên 182.018 (của 4.884 câu)

Tổng số cây Số lượng cây có tối đa 40 từ

Tập kiểm tra huấn luyện (dev)

 Kiểm tra và gán nhãn cảm xúc cho khía cạnh thiết kế của 4884 câu với mặc định giá trị cảm xúc là 2 cho câu nào không có giá trị cảm xúc cho khía cạnh đó

Hình 4.1 – Minh họa một nhánh của cây trong Vietnamese Sentiment Treebank

 Dưới dây là thông tin chi tiết hơn của Vietnamese Sentiment Treebank

Bảng 4.2 – Bảng thống kê chi tiết của Vietnamese Sentiment Treebank

Loại (category) Phụ kiện (accessory)

Tổng số lượng nhận xét (cây) 4.884 Số từ tối đa trên một nhận xét (cây) 94 Tổng lượng nhãn cảm xúc 182.018

Số lượng nhãn cảm xúc có giá trị 0,1,2,3,4

Số lượng nhãn cảm xúc kết hợp {0,1}, 2, {3,4}

Số lượng nhãn cảm xúc có khía cạnh thiết kế

Kết quả

Sau khi đã có dữ liệu huấn luyện Việc cần làm tiếp theo là tiến hành cài đặt chương trình (có thể xem ở phần phụ lục), chạy thực nghiệm và kiểm tra kết quả

Trong phần này chúng tôi sẽ trình bày kết quả đó cùng với những đánh giá cũng như nhận xét của mình Bên cạnh đó, để cho thuận tiện trong việc biểu diễn và theo dõi, tất cả kết quả trong phần thực nghiệm ở dưới đây điều dùng đơn vị là phần trăm (%) và chúng tôi sẽ không viết lại ký hiệu này vào sau kết quả Nếu có bất cứ đại lượng nào khác được dùng trong bảng sẽ được chúng tôi chú thích riêng

2.1 Kết quả huấn luyện của bộ phân tích cú pháp:

Chúng tôi chia Vietnamese Treebank theo tỷ lệ 9:1 để huấn luyện parser Độ chính xác của POS là trên 90%, độ chính xác hoàn toàn của cây dự báo trung bình khoảng 8%, F-measure của cây dự báo trung bình khoảng 58% Theo như kết quả hiện tại ta thấy rằng đối với parser thì kết quả huấn luyện chưa được tốt Kết quả huấn luyện chi tiết hơn của bộ phân tích cú pháp có thể tìm thêm ở bảng bên dưới

Bảng 4.3 – Bảng tổng hợp kết quả chi tiết kết quả huấn luyện bộ phân tích cú pháp

F- measure Độ chính xác hoàn toàn

Giới hạn số từ của câu nhỏ hơn 40 từ

2.2 Kết quả huấn luyện của mô hình cảm xúc RNTN

Trong thực nghiệm cho bộ phân tích cảm xúc có một số lưu ý như sau:

- Số chu kỳ huấn luyện được chọn là 100 chu kỳ với 163 batch, kích thước của từng batch là 27 câu

- Đối với nghĩa toàn cục thì được phân làm 5 lớp (rất tích cực/ tích cực/ trung tính/ tiêu cực/ rất tiêu cực) và khía cạnh giá thì chỉ dùng 3 lớp (tích cực / trung tính/ tiêu cực) như đã đề cập ở chương 3 mục 5.4

- Ngoài ra, chúng tôi đã dùng “Confusion matrix” để làm thước đo để tính độ chính xác của kết quả thực nghiệm và một số thông số ước lượng Những thông số này được mô tả như sau:

 Độ chính xác của nghĩa toàn cục: là độ chính xác dự báo của nhãn cảm xúc của toàn bộ câu Đặc biệt đối với 3 lớp thì độ chính xác này được ước lượng từ trung bình cộng của 5 lớp như sau: ({rất tích cực, tích cực} + {rất tiêu cực, tiêu cực}) / 2

 Độ chính xác của tất cả nhãn: là độ chính xác của dự báo tất cả các nhãn cảm xúc của những từ, cụm từ trong câu Đối với 3 lớp cũng được tính tương tự như công thức trên

 Độ chính xác của nút gốc (khi huấn luyện với khía cạnh): là độ chính xác khi dự báo đúng cả nhãn cảm xúc của câu và khía cạnh của nó

- Sau cùng, với những lưu ý cũng như những độ đo ở trên, chung tôi đã tổng hợp thành bảng kết quả chi tiết và được thể hiện ở các bảng bên dưới đây

Bảng 4.4 – Bảng thống kê kết quả huấn luyện độc lập (không có khía cạnh) với số chiều khác nhau

Bảng 4.5 – Bảng thống kê kết quả huấn luyện kết hợp khía cạnh với số chiều khác nhau

Số chiều Độ chính xác của nghĩa toàn cục Độ chính xác của tất cả nhãn

Số chiều Độ chính xác của nút gốc Độ chính xác của nghĩa toàn cục Độ chính xác của tất cả nhãn Độ chính xác của khía cạnh 5 lớp 3 lớp 5 lớp 3 lớp 3 lớp

Từ những kết quả đã trình bay ở trên có thể đưa ra một số kết luận như sau:

 Độ chính xác cảm xúc của toàn bộ câu cho 5 lớp không cao (cao nhất là 48.20%) còn 3 lớp thì tốt hơn nhiều 86.21% đối với trường hợp tốt nhất

 Độ chính xác của tất cả các từ, cụm từ cũng không cao khoảng 67% đối với 5 lớp Còn đối với 3 lớp là 80%

 Độ chính xác của cảm xúc toàn bộ câu khi huấn luyện cùng với khía cạnh không ảnh hưởng nhiều Tuy nhiên độ chính xác của khía cạnh thì không tốt (13.20%)

 Độ chính xác dự báo đúng đồng thời cảm xúc toàn bộ câu cùng khía cạnh gần như hoàn toàn không chính xác (0.8%)

Ngày đăng: 09/09/2024, 02:53