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: Hệ thống hỗ trợ môn học ngôn ngữ lập trình

66 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

  • 1.1 Lý do chọn đề tài (10)
  • 1.2 Mục đích nghiên cứu (10)
  • 1.3 Đối tượng và phạm vi nghiên cứu (10)
  • 1.4 Phương pháp nghiên cứu (11)
  • 1.5 Kết quả đạt được (11)
  • 1.6 Cấu trúc của luận văn (11)
  • 2.1 Tìm hiểu về xử lý ngôn ngữ tự nhiên (12)
    • 2.1.1 Một số đặc điểm của ngôn ngữ tự nhiên (12)
    • 2.1.2 Xử lý ngôn ngữ tự nhiên (13)
  • 2.2 Tìm hiểu mô hình học máy (13)
    • 2.2.1 Học máy là gì? (13)
    • 2.2.2 Các phương pháp học (14)
    • 2.2.3 Neural Network nhân tạo (14)
  • 2.3 Học máy trong Xử Lý Ngôn Ngữ Tự Nhiên (XLNNTN) (18)
    • 2.3.1 Toán xác suất (18)
    • 2.3.2 Neural Network truyền thống (19)
  • 3.1 Tìm hiểu các kiến thức liên quan (20)
    • 3.1.1 Word Vector (20)
    • 3.1.2 Recurrent Neural Network (RNN) (25)
    • 3.1.3 Long Short Term Memory networks (LSTM) (27)
    • 3.1.4 Gated Recurrent Unit (GRU) (32)
    • 3.1.5 Bidirectional RNN (BRNN) (32)
  • 3.2 Tham khảo các hệ thống liên quan đến ngữ nghĩa (33)
  • 4.1 Giải pháp trả lời tự động (34)
  • 4.2 Giải pháp phân nhóm các câu hỏi dựa trên câu trả lời (34)
    • 4.2.1 Phương pháp phân nhóm tuyệt đối (35)
    • 4.2.2 Phương pháp phân nhóm tương đối (36)
  • 4.3 Giải pháp phân nhóm câu hỏi dựa trên đặc trưng topic (38)
  • 4.4 So sánh ngữ nghĩa của cặp câu hỏi (39)
  • 5.1 Mô hình encode độc lập câu hỏi và câu trả lời (41)
    • 5.1.1 Dữ liệu (41)
    • 5.1.2 Mô hình huấn luyện (43)
    • 5.1.3 Thực hiện và kiểm thử (44)
    • 5.1.4 Nhận xét và đánh giá (47)
  • 5.2 Mô hình gắn kết câu trả lời và câu hỏi trước khi encode (47)
    • 5.2.1 Dữ liệu (47)
    • 5.2.2 Mô hình huấn luyện (47)
    • 5.2.3 Thực hiện và kiểm thử (49)
    • 5.2.4 Nhận xét và đánh giá (50)
  • 5.3 Mô hình phân nhóm câu hỏi dựa trên đặc trưng topic (50)
    • 5.3.1 Dữ liệu (50)
    • 5.3.2 Mô hình huấn luyện (51)
    • 5.3.3 Huấn luyện và kiểm thử (51)
    • 5.3.4 Nhận xét và đánh giá (52)
  • 5.4 Mô hình so sánh ngữ nghĩa giữa hai câu hỏi (53)
    • 5.4.1 Dữ liệu (53)
    • 5.4.2 Mô hình huấn luyện (53)
    • 5.4.3 Huấn luyện và kiểm thử (55)
    • 5.4.4 Nhận xét và đánh giá (57)
  • 6.1 Chọn phương án khả thi (58)
  • 6.2 Những mục đã làm được (60)
  • 6.3 Những mục chưa đạt được và hướng nghiên cứu tiếp theo (60)

Nội dung

1.4Phương pháp nghiên cứuTập trung tìm hiểu các nghiên cứu xung quanh bài toán Hỏi Đáp Q&A, tìm hiểu nhữngkiến thức nền tảng về xử lý ngôn ngữ tự nhiên văn bản nói chung, mô hình học máy

Mục đích nghiên cứu

Tìm hiểu các kiến thức nền tảng, đặc trưng của Ngôn Ngữ Tự Nhiên (NNTN) và những kỹ thuật xử lý liên quan, sau đó tìm hiểu sâu vào phần trả lời tự động Chúng ta phân tích bài toán của luận văn và dựa trên kiến thức đã tìm hiểu để đưa ra giải pháp Cuối cùng là chúng ta sẽ thực hiện, so sánh đánh giá các giải pháp để đề xuất phương án khả thi

Phương pháp nghiên cứu

Tập trung tìm hiểu các nghiên cứu xung quanh bài toán Hỏi Đáp (Q&A), tìm hiểu những kiến thức nền tảng về xử lý ngôn ngữ tự nhiên (văn bản) nói chung, mô hình học máy Neural Network trong xử lý ngôn ngữ tự nhiên,

Chọn lựa hướng tiếp cận giải quyết, sau đó hiện thực và đánh giá mô hình, áp dụng trên bài toán cụ thể của luận văn là xây dựng hệ thống “Hỗ Trợ Môn Học Ngôn Ngữ Lập Trình”.

Kết quả đạt được

• Xây dựng được bộ phân tích ngữ nghĩa của câu hỏi.

• Xây dựng được hệ thống trả lời tự động dựa trên dữ liệu thu thập được trước đó.

Cấu trúc của luận văn

Phần còn lại của luân văn này được tổ chức theo cấu trúc sau:

Chương 2: Giới thiệu về NNTN, đặc thù và tính chất của NNTN, đồng thời giới thiệu một số kiến thức và kỹ thuật xử lý NNTN.

Chương 3 sẽ đề cập đến các phương pháp nghiên cứu và các kiến thức liên quan đến XLNNTN nói chung và tập trung và phân tích ngữ nghĩa, bên cạnh đó sẽ tham khảo các hệ thống/phương pháp liên quan đến bài toán trong luận văn.

Chương 4 sẽ phân tích bài toán của luận văn, đưa ra các giải pháp, các ưu nhược điểm của từng giải pháp.

Chương 5 sẽ trình bày cách hiện thực các giải pháp đã nêu với những mô hình Neuron Net- work khác nhau để kiểm thử kết quả thực tế.

Chương 6: Tổng kết và so sánh các phương pháp, chọn phương án khả thi Rút kết những việc đã đạt được và hướng phát triển tiếp theo Cuối cùng là danh mục tài liệu tham khảo.

Chương 2 KIẾN THỨC NỀN TẢNG Để thực hiện đề tài, yêu cầu phải có kiến thức về xử lý ngôn ngữ tự nhiên cơ bản và ứng dụng mạng Neural Network trong việc xử lý ngôn ngữ tự nhiên Trong luận văn này, chúng ta đi vào một nhánh trong xử lý ngôn ngữ tự nhiên là “Tìm các câu hỏi có cùng ngữ nghĩa” để trả lời tự động.

Tìm hiểu về xử lý ngôn ngữ tự nhiên

Một số đặc điểm của ngôn ngữ tự nhiên

• Từ kép: ngoài các từ đơn ta còn có nhiều từ hợp lại để diễn tả một nghĩa, ví dụ: find out, break out, burn down .

• Từ đồng nghĩa: khác với xử lý ảnh, các từ hoàn toàn khác nhau nhưng lại có nghĩa giống nhau, ví dụ: good, awesome .

• Các từ mới phát sinh liên tục: tiếng lóng, các từ được phát sinh trong đời sống hàng ngày, ví dụ: rock (good)

• Nghĩa của các từ còn phụ thuộc vào các từ xung quanh (ngữ cảnh), ví dụ: "Tom pushed Marry, then she (went/fell )" Từ “she” là Tom hay Marry phụ thuộc vào từ sau là “went” hay “fell”.

• Các câu khác nhau (về số từ, và thứ tự các từ) nhưng có cùng ngữ nghĩa, ví dụ: “What are the best ways to lose weight?”, “How can a person reduce weight?” và “What are effective weight loss plans?”

• Các câu hầu như giống nhau (về số từ, và thứ tự các từ) nhưng có ngữ nghĩa khác nhau, ví dụ: "What is the step by step guide to invest in share market in India?" và "What is the step by step guide to invest in share market?"

• Lỗi văn phạm, ví dụ: He GO (went) this morning Hes (He’s) a doctor

• Lỗi chính tả, ví dụ: HES (He’s) a doctor

• Cách viết, ví dụ: color và colour (theo US và UK)

Xử lý ngôn ngữ tự nhiên

Theo WikiPedia 1 định nghĩa như sau: Xử lý ngôn ngữ tự nhiên (Natural Language Process- ing - NLP) là một nhánh của trí tuệ nhân tạo tập trung vào các ứng dụng trên ngôn ngữ của con người Trong trí tuệ nhân tạo thì xử lý ngôn ngữ tự nhiên là một trong những phần khó nhất vì nó liên quan đến việc phải hiểu ý nghĩa ngôn ngữ - công cụ hoàn hảo nhất của tư duy và giao tiếp.

Xử lý ngôn ngữ tự nhiên bao gồm các phần sau: phân tích hình thái, phân tích cú pháp, phân tích ngữ nghĩa, tích hợp văn bản, phân tích thực nghĩa.

Các bài toán được ứng dụng: nhận dạng chữ viết, chuyển tiếng nói thành văn bản và ngược lại, tự động dịch, tìm kiếm thông tin (hỏi đáp), tóm tắt văn bản, khai phá dữ liệu và phát triển tri thức.

Có rất nhiều ứng dụng trong đời sống như: các trợ lý ảo trong các hệ điều hành, dịch văn bản sang ngôn ngữ khác (Google Translate), phân tích cảm xúc trên các trang mạng xã hội.

Trong luận văn này, chúng tôi ứng dụng xử lý ngôn ngữ tự nhiên theo nhánh “Hỏi đáp dựa trên dữ liệu có sẵn” bằng cách so trùng các câu hỏi đã được hỏi trước đó Do đặc tính NNTN khá phức tạp (đã trình bày ở phần trên), chúng ta không thể đơn giản so các từ và cụm từ để xác định hai câu có trùng nhau không, mà chúng ta phải có phương pháp so sánh ngữ nghĩa Học máy là một trong những phương pháp hiệu quả tại thời điểm này.

Tìm hiểu mô hình học máy

Học máy là gì?

Học máy (Machine learning) là một lĩnh vực của trí tuệ nhân tạo liên quan đến việc phát triển các kĩ thuật cho phép các máy tính có thể "học" Cụ thể hơn, học máy là một phương pháp để tạo ra các chương trình máy tính bằng việc phân tích các tập dữ liệu Học máy có liên quan lớn đến thống kê, vì cả hai lĩnh vực đều nghiên cứu việc phân tích dữ liệu, nhưng khác với thống kê, học máy tập trung vào sự phức tạp của các giải thuật trong việc thực thi tính toán.

1 Xem htt ps : //vi.wikipedia.org/wiki/X %E1%BB%AD_l%C3%BD_ng%C3%B4n_ng%E1%BB%AF _t%E1

Học máy có tính ứng dụng rất cao bao gồm máy truy tìm dữ liệu, chẩn đoán y khoa, phát hiện thẻ tín dụng giả, phân tích thị trường chứng khoán, phân loại các chuỗi DNA, nhận dạng tiếng nói và chữ viết, dịch tự động, chơi trò chơi và rất nhiều ứng dụng khác.

Các phương pháp học

Có hai phương pháp học cơ bản đó là học có giám sát (supervied learning) và học không giám sát (unsupervied learning).

Trong học có giám sát, người ta cho trước một tập các dữ liệu đầu vào và các kết quả đầu ra tương ứng Chương trình học phải xây dựng một hàm ánh xạ về mối quan hệ giữa dữ liệu đầu vào và dữ liệu đầu ra.

Có 2 loại bài toán được quan tâm là: "hồi quy" (regression) và "phân loại" (classification). Đối với bài toán hồi quy, ta mong muốn dự đoán kết quả đầu ra ở dạng liên tục, có nghĩa là ta xây dựng hàm đầu ra liên tục tương ứng với biến đầu vào Đối với bài toán phân loại, kết quả đầu ra ở dạng rời rạc.

Khác với học có giám sát, học không giám sát ít hoặc không quan tâm đến kết quả đầu ra như thế nào Ta chỉ quan tâm đến việc đưa ra cấu trúc dữ liệu bằng cách "phân cụm" dữ liệu dựa trên các biến liên hệ trong tập dữ liệu đó.

Với học không giám sát, ta không có phản hồi dựa trên kết quả dự đoán, tức là, không có người giám sát kết quả đúng sai mà chỉ là việc phân cụm dữ liệu.

Neural Network nhân tạo

Neural Network nhân tạo (Artificial Neural Network- ANN) là mô hình xử lý thông tin được mô phỏng dựa trên hoạt động của hệ thống thần kinh của sinh vật, bao gồm số lượng lớn các neural được gắn kết để xử lý thông tin ANN giống như bộ não con người, được học bởi kinh nghiệm (thông qua huấn luyện), có khả năng lưu giữ những kinh nghiệm hiểu biết (tri thức) và sử dụng những tri thức đó trong việc dự đoán các dữ liệu chưa biết.

Các ứng dụng của Neural Network được sử dụng trong rất nhiều lĩnh vực để giải quyết các bài toán có độ phức tạp và đòi hỏi có độ chính xác cao như điều khiển tự động, khai phá dữ liệu, nhận dạng, .

Neural Network được tạo nên từ nhiều nốt (node), mỗi nốt tương ứng với một nơron (xem hình 2.1) và chúng được kết nối với nhau bằng các liên kết (link) Mỗi liên kết được gắn với một trọng sốW ji , đây là thành phần rất quan trọng của một ANN, nó thể hiện độ quan trọng (độ mạnh) của dữ liệu đầu vào đối với quá trình xử lý thông tin Quá trình học (learning process) của ANN thực ra là quá trình điều chỉnh các trọng số của các dữ liệu đầu vào để có được kết quả mong muốn Kết quả đầu ra tại nốt i haya i là kết quả của hàm chuyển đổi (activation function) với thông số đầu vào là kết quả của hàm tổng (summation function) được tính toán từ các dữ liệu đầu vào và các trọng số tương ứng Hàm tổng được tính bằng công thức sau: in i n

Sau đó dùng kết quả của hàm tổng để đưa vào hàm chuyển đổi tính toán để ra được kết quả đầu ra tại neural i Công thức của hàm chuyển đổi như sau: a i =g(in i ) =g n j=0 ∑

Việc lựa chọn hàm chuyển đổi có tác động lớn đến kết quả của ANN Hàm chuyển đổi phi tuyến được sử dụng phổ biến trong ANN là hàm Sigmod (công thức 2.3). y= 1

- x là kết quả của hàm tổng.

Kết quả của hàm Sigmoid thuộc khoảng [0,1] nên còn gọi là hàm chuẩn hóa (Normalized Function) (xem hình 2.2).

Hình 2.1: Mô hình toán học của một neural.

Neural Network nhân tạo có 2 kiến trúc chính: mạng lan truyền thẳng (feed-forward net- works) và mạng lan truyền ngược (recurrent networks) Một mạng lan truyền thẳng biểu diễn cho một ánh xạ của giá trị đầu vào hiện tại của nó, do đó nó không có trạng thái cục bộ nào khác ngoài các trọng số của chính nó Ngược lại, đối với mạng lan truyền ngược, nó đưa ngược các giá trị đầu ra trở lại như một giá trị đầu vào của nó Điều này có nghĩa rằng các mức độ kích hoạt của mạng hình thành một hệ thống động mà có thể đạt được một trạng thái ổn định, giao động hay thậm chí là hỗn loạn Hơn nữa, kết quả của mạng với một đầu vào cho trước phụ thuộc vào trạng thái ban đầu của nó, mà có thể phụ thuộc vào giá trị đưa vào trước đó Do đó, các mạng lan truyền ngược (không giống như mạng lan truyền thẳng) có thể hỗ trợ bộ nhớ ngắn hạn Điều này làm chúng thú vị như mô hình bộ não, nhưng cũng khó hiễu hơn Dưới đây chúng tôi sẽ tập trung giới thiệu về mạng lan truyền thẳng.

Một Neural Network truyền thẳng có kiến trúc tổng quát như hình 2.3 gồm 3 thành phần: tầng dữ liệu đầu vào (input layer), tầng ẩn (hidden layer) và tầng kết quả (output layer).

Hình 2.3: Kiến trúc tổng quát của một ANN.

- Tầng dữ liệu đầu vào bao gồm các neural tương ứng với các dữ liệu được đưa vào ANN.

Mỗi Input tương ứng với 1 thuộc tính (attribute) của dữ liệu (patterns) Ví dụ như trong ứng dụng của ngân hàng xem xét có chấp nhận cho khách hàng vay tiền hay không thì mỗi Input là một thuộc tính của khách hàng như thu nhập, nghề nghiệp, tuổi, số con, .

- Tầng ẩn bao gồm các neural nhận dữ liệu từ các neural ở tầng trước đó và chuyển đổi các dữ liệu này cho các tầng tiếp theo xử lý Trong một ANN có thể có nhiều tầng ẩn.

- Tầng kết quả (Output) bao gồm các neural nhận dữ liệu từ các neural ở tầng ẩn và tính toán cho ra kết quả cuối cùng Kết quả của một ANN là một giải pháp cho một vấn đề, ví dụ như với bài toán xem xét chấp nhận cho khách hàng vay tiền hay không thì output là yes (cho vay) hoặc no (không cho vay).

Quá trình học của ANN

Quá trình học của một ANN được mô tả gồm các bước như sau (xem hinh 2.4):

2 So sánh output với giá trị mong muốn (desired value).

3 Nếu chưa đạt được giá trị mong muốn thì hiệu chỉnh trọng số (weights) và lặp lại bước 1.

Hình 2.4: Quá trình học của mạng ANN.

Giả sử sau khi tính toán từ các giá trị đầu vào đã cho, ta có output là Y Giá trị mong muốn là Z đã biết trước Sự chênh lệch giữa Y và kết quả mong muốn Z được biểu diễn bởi tham số delta (gọi là lỗi) = Z - Y Mục đích của việc học là làm sao cho giá trị lỗi càng nhỏ càng tốt (nếu delta

= 0 là hoàn hảo nhất) bằng cách điều chỉnh trọng số (weights) của các dữ liệu vào (xem hinh 2.5).

Ta có giá trị lỗi tại neural j như sau:δ=Z j −Y j Tiến hành hiệu chỉnh trọng số cho các đầu vào nhận từ neural ở tầng trước với công thức sau:

-W i j là trọng số của giá trị đầu vào từ neural i vào neural j.

-αlà hệ số học (learning rate).

-x i là giá trị output từ neural i.

Hình 2.5: Quá trình học của một neural.

Học máy trong Xử Lý Ngôn Ngữ Tự Nhiên (XLNNTN)

Toán xác suất

Phương pháp này áp dụng các nghiên cứu, công thức trong môn xác xuất để xác định xác xuất để giả thiết có thể xảy ra (bao gồm xác xuất có điều kiện) Trong lĩnh vực học máy có hai phương pháp xác xuất phổ biển là Naive Bayes và Latent Dirichlet Allocation

Naive Bayes Phương pháp này được dùng phổ biến trong các bài toán phân lớp Mặc dù rất đơn giản nhưng cũng rất hiệu quả Với phương pháp huấn luyện có giám sát, hệ thống sẽ học được xác suất của các từ để kết luận một chủ đề thuộc vào nhóm nào Khi có một chủ đề cần phân loại, hệ thống sẽ tính tổng xác suất của từng từ trong chủ đề để phân loại chủ đề đó (xem phần tham khảo [2]).

Chú ý: phương pháp này bỏ qua thứ tự của các từ, chỉ quan tâm đến tần suất các từ xuất hiện trong văn bản (còn gọi là Bag of words) Với phương pháp này, hai câu sau đây là tương đương:"John likes Mary" và "Mary likes John".

Latent Dirichlet Allocation (LDA) Phương pháp này được dùng trong text mining, với các bài toán như khám phá các mẫu chủ đề ẩn (Discovering hidden topical patterns) trong kho dữ liệu, gom cụm các tài liệu (document) theo chủ đề Sau khi huấn luyện, hệ thống sẽ học được xác suất của các từ đóng góp trong mỗi chủ đề.

Hạn chế của phương pháp này đối với XLNNTN là kKhông xét đến các thứ tự từ trong câu và không xét đến ngử cảnh của câu.

Neural Network truyền thống

Ngoài mô hình xác xuất, ta còn có thể áp dụng mô hình Neuron Network được giới thiệu ở trên Những dạng Neuron Network ở trên còn gọi là Neural Network truyền thống, ngoài ra còn có Deep Learning như Convolutional Neural Networks (CNN) Tất cả các dạng Neural Network này đều rất mạnh và rất hữu ý trong các bài toán như xử lý ảnh, phân lớp Nhưng đối với XLNNTN thì chúng có một số nhược điểm sau:

• Không xét đến các thứ tự từ trong câu.

• Không xét đến ngử cảnh của câu.

• Số lượng các neuron và lớp sẽ rất lớn (thông số cần tìm sẽ rất lớn).

Do đó các dạng Neuron Network và Toán Xác Xuất nêu trên không hiệu quả cho XMN-NTN (đặc biệt là hệ thống Hỏi Đáp) Để XLNNTN ta phải tìm một mô hình Neuron Network khác khắc phục được những các nhược điểm trên Hiện nay, ta phương pháp phổ biến là dùngRecurrent Neural Network (RNN) sẽ được trình bày ở phần sau.

NGHIÊN CỨU VÀ THAM KHẢO CÁC GIẢI PHÁP LIÊN QUAN

Tìm hiểu các kiến thức liên quan

Word Vector

Như chúng ta cũng biết đơn vị trong câu là từ Vậy muốn vector hóa văn bản/câu thì ta phải vector hóa được từ Có một số cách vector hóa từ,

Cách đơn giản nhất là dùng “one-hot” vector với số chiều bằng với số lượng từ trong tự điển và tại vị trí của từ đó trong tự điển bằng 1 các giá trị còn lài bằng 0.

Hình 3.1: Minh họa one-hot vector.

Với cách này không nói lên được độ quan trọng của các từ trong tự điển (vì tất cả giá trị đều bằng 1 tại vị trí index của nó) Ví dụ trong lĩnh vực information retrieve, câu truy vấn là "a book" nhưng kết quả chấp nhận được là "the book", "programing book" có nghĩa là chữ "book" quan trọng hơn chữ "a" Để khắc phục, chúng ta có phương pháp tftdf Thay vì tại vị trí index của các từ đều bằng nhau là 1, thì ta lưu giá trị thể hiện trọng số quan trọng của từ đó.

• số chiều rất lớn (một từ có số chiều bằng tổng số từ trong bảng từ vựng) không phù hợp cho Neuron Netwok.

• Các từ không thể hiện được ngữ nghĩa Ví dụ "hi" AND "hello" = 0, trong khi đó "hi" đồng nghĩa với "hello", có nghĩa là hai vector này phải bằng nhau hoặc gần bằng nhau Nếu xét trong không gian N chiều (N là độ dài của vector diễn tả từ) thì hai từ này phải trùng nhau hoặc gần nhau.

Ví dụ: khi câu truy vấn "parents" hệ thống có thể rả về "mother/father/mom/dad "

Hiện nay người ta dùng Neural Network để học các từ này, chuyển đổi nó thành vector với số chiều nhỏ hơn rất nhiều so với one-hot vector, đồng thời các từ đồng nghĩa có giá trị gần bằng nhau Phương pháp này gọi là Word Embedding 1 (Word Vector, Word2Vec 2 ) [3].

Có hai cách phổ biến để thực hiện Word Embedding: "Continuous Bag-of-Words Model"

(CBOW) và Skip-gram Model Cả hai cách đều quét văn bản với n ký tự (còn gọi là cửa sổ (window) với kích thước (size) là n) Có thể hiểu nôm na là có một cái cửa sổ sẽ trượt trên toàn bộ văn bản, và mỗi lần trượt ta sẽ tối đa xác suất để các từ trong của sổ ở cạnh nhau.

• Continuous Bag-of-Words Model (CBOW):

1 Xem htt ps : //en.wikipedia.org/wiki/Word_embedding

2 Xem htt ps : //en.wikipedia.org/wiki/Word2vec

Hình 3.2: CBOW, window size = 5, cho các từ lân cận đoán từ trung tâm.

Hình 3.3: CBOW, window size = 5, cho từ trung tâm đoán các từ liên lân cận.

Ví dụ cách huấn luyện cho phương pháp Skip-gram: ta có đoạn văn bản (source text): "The quick brown fox jumps over the lazy dog." Chọn window size là 5 Ở của sổ đầu tiên, chữ "The" là trung tâm sẽ là dữ liệu đầu vào Ta muốn hệ thống sẽ đoán đầu ra là "quick" hoặc "brown"

(các chữ còn lại trong cửa sổ) Do đó trong quá trình huấn luyện ta phải cực đại xác suất để đầu ra giống như ta mong muốn Xem hình minh họa sau.

Hình 3.4: Dữ Liệu skip-gram, window size = 5 Để huấn luyện skip-gram, người ta thường dùng Neural Network ba lớp.

• Đầu vào: có số nút bằng tổng số từ có trong từ điển (chiều của one-hot vector) Từ trung tâm của cửa sổ (one-hot vector) sẽ là dữ liệu đầu vào.

• Một lớp hidden: thường có 300 nốt (do thực nghiệm) Đây là lớp rất quan trọng, trọng số của lớp này chính là kết quả Word Embedding (lookup table) mà ta cần tìm.

• Đầu ra: có số nút bằng tổng số từ có trong từ điển Hàm activate có thể dùng Softmax, ReLu, Sigmod.

Sau khi huấn luyện, các giá trị thông số của tầng ẩn chính là Word Vector, hay còn gọi làLookup Table vì nếu lấy giá trị one-hot vector của một từ nào đó nhân với ma trận Word Vector thì ta được một vector tại ngay vị trí của từ đó (vì các vị trí khác của one-hot vector bằng 0) và có số chiều là số chiều của Word Vector (trong ví dụ như hình vẽ 3.6 là 300) nhỏ hơn rất nhiều so với tổng các từ trong từ điển (10,000 từ, theo ví dụ trong hình 3.6, rất phù hợp cho NeuronNetwork.

Hình 3.5: Mô hình skip-gram network

Hình 3.6: Kết quả skip-gram.

Ngoài giảm số chiều, còn một ưu điểm rất lớn của phương pháp này là các từ đồng nghĩa có giá trị vector gần bằng nhau Hay nói cách khác, nếu xét trong không gian N chiều (N = 300 như ví trong dụ hình vẽ 3.6) thì các từ này (được thể hiện bằng các điểm) nằm gần nhau Vậy trong Lookp table (còn gọi là Word Embedding) có chứa thông tin về ngữ nghĩa của các từ, tốt hơn rất nhiều so với one-hot vector.

Hình 3.7: Biểu diễn Word Vector trong theo không gian hai chiều.

Recurrent Neural Network (RNN)

Khác với Naive Bayes, LDA, CNN RNN 3 là phương pháp học máy có xét đến thứ tự của các từ trong câu (đây là một điểm rất quan trọng trong XLNNTN), không những thế RNN còn phân tích được ngữ cảnh của câu dựa vào các câu trước đó.

3 Xem RNN htt p : //www.wildml.com/2015/09/recurrent − neural − networks − tutorial − part − 1 − introduction −to −rnns/

Trong Neural Network truyền thống chúng ta giả định rằng tất cả lớp input layer, hidden layer, output layer đều độc lập với nhau, hay được biểu diễn bằng biểu thức sau: y t = f(x t )

Trong XLNNTN giả định trên không đúng, vì ngữ nghĩa của câu tại vị trí từ thứ t phụ thuộc vào các từ trước đó, có thể diễn đạt bằng biểu thức sau: y t = f(x,y t−1 )

Do đó RNN được nghĩ tới để giải quyết dạng bài toán này RNN có mô hình như hình vẽ dưới 3.8 RNN được gọi là lặp lại bởi vì chúng thực hiện cùng một nhiệm vụ cho mỗi phần tử của một chuỗi (câu), với đầu ra phụ thuộc vào tính toán trước đó, hay nói cách khác RNNs có một "bộ nhớ" để lưu lại ngữ cảnh đã được tính trước đó Theo lý thuyết, RNN có thể xử lý ngữ cảnh trong các đoạn văn dài, nhưng trên thực không hiệu quả Dưới đây là những gì một RNN điển hình như:

Hình 3.8: Kiến trúc tổng quát của một RNN.

• x t giá trị đầu vào bước t

• s t = f s (W x t +U s t−1 +b h )trạng thái (hidden state) ở bước t f có thể dùng tanh hoặc ReLU

• o t = f o (W s t +b o )đầu ra ở bước t, thường thì mỗi đầu ra ở bước t sẽ được activate bởi hàm so f tmax(V t ), nhưng cũng có thể tất cả đầu ra cùng chia sẽ một lớp softmax

Có một vài điều cần lưu ý:

• Có thể xems t như bộ nhớ ảo lưu lại thông tin về những gì đã xử lý trong tất cả các bước trước đó Đầu ra ở bướco t được tính toán dựa trên dữ liệu đầu vào x t và bộ nhớ tại thời điểm t (thực tếs t thường không thể nắm bắt được thông tin trong trường hợp các đoạn văn dài)

• Không giống như Neuron Network truyền thống, sử dụng các tham số khác nhau ở mỗi lớp, một RNN chia sẻ các thông số giống nhau (U, V, W) trên tất cả các bước Điều này phản ánh thực tế rằng chúng đang thực hiện cùng một nhiệm vụ ở mỗi bước, chỉ với các yếu tố đầu vào khác nhau Điều này làm giảm đáng kể tổng số thông số của mạng mà chúng ta cần phải tính.

• Tại mỗi thời điểm t ta có giá trị đầu ra lào t Nhưng không phải lúc nào ta cũng dùng giá trị này ở mỗi bước xử lý t, tùy thuộc vào mục đích của bài toán XLNNTN mà ta có các mô hình khác nhau Ví dụ, khi dự đoán ngữ nghĩa của một câu, chúng ta chỉ có thể quan tâm đến kết quả cuối cùng, có nghĩa là chúng ta cần phải xử lý nguyên câu, sau đó phân tích ngữ nghĩa chứ không phải phân tích ngữ nghĩa ngay sau xử lý mỗi từ.

RNN được dùng trong các bài toán như: phân tích ngữ nghĩa, nhận diện chữ số viết tay, nhận dạng tiếng nói, dịch từ ngôn ngữ này sang ngôn ngữ khác (Anh-Việt ), hệ thống hỏi đáp.

Trong luận văn này ta dùng RNN để phân tích ngữ nghĩa của các câu hỏi để xác định xem chúng có thật sự trùng nhau hay không.

RNN có một số hạn chế khi đoạn văn bản dài, lúc đó số lớp sẽ tăng đáng kể và dẫn tới hai vấn đề sau:

• Không thể nắm bắt được ngữ cảnh.

• Việc cập nhật các trọng số của các state (lan truyền ngược) cũng không hiệu quả.

Long Short Term Memory networks (LSTM)

Về lý thuyết RNN thuần túy có thể nắm bắt được ngữ cảnh Nhưng trong thực tế nó chỉ hoạt động tốt ở những đoạn văn ngắn Ví dụ, ta có câu: “She is a (GIRL/BOY)” thì RNN dễ dàng đoán đúng từ "GRIL vì dự vào từ "She" trước đó Nhưng trong trường hợp câu dài như "“I grew up in France, I had a lot of friends there so, I speak fluent (French/English).”, trong trường hợp này đoạn văn khá dài nên RNN không nắm bắt được ngữ cảnh "in France".

LSTM là một dạng đặc biệt của RNN, nó có khả năng học được các phụ thuộc xa LSTM được giới thiệu bởi Hochreiter & Schmidhuber (1997) [6] , và sau đó đã được cải tiến và phổ biến bởi rất nhiều người trong ngành Chúng hoạt động cực kì hiệu quả trên nhiều bài toán khác nhau nên dần đã trở nên phổ biến như hiện nay.

LSTM được thiết kế để tránh được vấn đề phụ thuộc xa Việc nhớ thông tin trong xuốt thời gian dài là đặc tính mặc định của chúng, chứ ta không cần phải huấn luyện nó để có thể nhớ được Tức là ngay nội tại của nó đã có thể ghi nhớ được mà không cần bất kì can thiệp nào. Để thuận tiện cho việc so sánh RNN chuẩn với LSTM ta xem hai hình sau

Hình 3.9: Kiến trúc RNN, biểu diễn dưới dạng cell thường thì là một tầng tanh.

Hình 3.10: Kiến trúc LSTM, biểu diễn dưới dạng cell.

Ta thấy kiến trúc mạng tổng thể thì giống nhau, nhưng khác nhau ở phần hiện thực chi tiết bên trong. Ở sơ đồ trên, mỗi một đường mang một véc-tơ từ đầu ra của một nút tới đầu vào của một nút khác Các hình trong màu hồng biểu diễn các phép toán như phép cộng véc-tơ chẳng hạn, còn các ô màu vàng được sử dụng để học trong các từng mạng nơ-ron Các đường hợp nhau kí hiệu việc kết hợp, còn các đường rẽ nhánh ám chỉ nội dung của nó được sao chép và chuyển tới các nơi khác nhau.

Chìa khóa của LSTM là trạng thái tế bào (cell state) - chính đường chạy thông ngang phía trên của sơ đồ hình vẽ 3.11.

Trạng thái tế bào là một dạng giống như băng truyền Nó chạy xuyên suốt tất cả các mắt xích (các nút mạng) và chỉ tương tác tuyến tính đôi chút Vì vậy mà các thông tin có thể dễ dàng truyền đi thông suốt mà không sợ bị thay đổi.

LSTM có khả năng bỏ đi hoặc thêm vào các thông tin cần thiết cho trạng thái tế báo, chúng được điều chỉnh cẩn thận bởi các nhóm được gọi là cổng (gate).

Các cổng là nơi sàng lọc thông tin đi qua nó, chúng được kết hợp bởi một tầng mạng sigmoid và một phép nhân.

Tầng sigmoid sẽ cho đầu ra là một số trong khoản [0,1], mô tả có bao nhiêu thông tin có thể được thông qua Khi đầu ra là 0 thì có nghĩa là không cho thông tin nào qua cả, còn khi là 1 thì có nghĩa là cho tất cả các thông tin đi qua nó.

Một LSTM gồm có 3 cổng như vậy để duy trì và điều hành trạng thái của tế bào.

Bước đầu tiên của LSTM là quyết định xem thông tin nào cần bỏ đi từ trạng thái tế bào.

Quyết định này được đưa ra bởi tầng sigmoid - gọi là “tầng cổng quên” (forget gate layer) Nó sẽ lấy đầu vào làh t−1 vàx t rồi đưa ra kết quả là một số trong khoảng [0, 1] cho mỗi số trong trạng thái tế bàoC t−1 Đầu ra là 1 thể hiện rằng nó giữ toàn bộ thông tin lại, còn 0 chỉ rằng toàn bộ thông tin sẽ bị bỏ đi.

Hình 3.13: LSTM, tính hệ số để giữ lại hoặc bỏ qua state.

Trong thự tế, ví dụ mô hình ngôn ngữ dự đoán từ tiếp theo dựa trên tất cả các từ trước đó, với những bài toán như vậy, thì trạng thái tế bào có thể sẽ mang thông tin về giới tính của một nhân vật nào đó giúp ta sử dụng được đại từ nhân xưng chuẩn xác Tuy nhiên, khi đề cập tới một người khác thì ta sẽ không muốn nhớ tới giới tính của nhân vật nữa, vì nó không còn tác dụng gì với chủ thế mới này.

Bước tiếp theo là quyết định xem thông tin mới nào ta sẽ lưu vào trạng thái tế bào Việc này gồm 2 phần Đầu tiên là sử dụng một tầng sigmoid được gọi là “tầng cổng vào” (input gate layer) để quyết định giá trị nào ta sẽ cập nhập Tiếp theo là một tầng tanh tanh tạo ra một véc-tơ cho giá trị mớiC˜ t nhằm thêm vào cho trạng thái Trong bước tiếp theo, ta sẽ kết hợp 2 giá trị đó lại để tạo ra một cập nhập cho trạng thái.

Hình 3.14: LSTM, tính hệ số cập nhật state mới.

Chẳng hạn với ví dụ mô hình ngôn ngữ, ta sẽ muốn thêm giới tính của nhân vật mới này vào trạng thái tế bào và thay thế giới tính của nhân vật trước đó.

Giờ là lúc cập nhập trạng thái tế bào cũC t−1 thành trạng thái mớiC t Ở các bước trước đó đã quyết định những việc cần làm, nên giờ ta chỉ cần thực hiện là xong.

Ta sẽ nhân trạng thái cũ với f t để bỏ đi những thông tin ta quyết định quên lúc trước Sau đó cộng thêmi t *C˜ t trạng thái mới thu được này phụ thuộc vào việc ta quyết định cập nhập mỗi giá trị trạng thái ra sao.

Hình 3.15: LSTM, cập nhật state mới.

Với bài toàn mô hình ngôn ngữ, chính là việc ta bỏ đi thông tin về giới tính của nhân vật cũ, và thêm thông tin về giới tính của nhân vật mới như ta đã quyết định ở các bước trước đó.

Cuối cùng, ta cần quyết định xem ta muốn đầu ra là gì Giá trị đầu ra sẽ dựa vào trạng thái tế bào, nhưng sẽ được tiếp tục sàng lọc Đầu tiên, ta chạy một tầng sigmoid để quyết định phần nào của trạng thái tế bào ta muốn xuất ra Sau đó, ta đưa nó trạng thái tế bào qua một hàm tanh để co giá trị nó về khoảng [-1, 1], và nhân nó với đầu ra của cổng sigmoid để được giá trị đầu ra ta mong muốn.

Hình 3.16: LSTM, xử lý dữ liệu ở đầu ra.

Gated Recurrent Unit (GRU)

GRU là một biến thể của LSTM, nhưng đơn giản hóa phần nhân để tính toán nhanh hơn Nó kết hợp các cổng loại trừ và đầu vào thành một cổng “cổng cập nhập” (update gate) Nó cũng hợp trạng thái tế bào và trạng thái ẩn với nhau tạo ra một thay đổi khác Kết quả là mô hình của ta sẽ đơn giản hơn mô hình LSTM chuẩn và ngày càng trở nên phổ biến.

Bidirectional RNN (BRNN)

Đối với RNN, tại thời điểm dự đoán t chúng ta phải tận dụng những dữ liệu trước đó để cho kết quả Có nghĩa là chúng ta chỉ tận dụng dữ liệu trong quá khứ để đoán hiện tại.

Trong Bidirectional RNN cho phép chúng ta dùng dữ liệu ở tương lai để dự đoán tại thời điểm hiện hành Điều này có vẽ vô lý, nhưng trong một số lĩnh vực thì làm được, cụ thể là trong XLNNTN.

Ví dụ: The sky is cloudy, it looks like rain Khi cần đoán chữ "rain", RNN sẽ phải xử lý tuần tự từ trái sang phải để đoán chữ "rain".

Giả sử cũng câu trên, chữ cần đoán là "cloudy" thì RNN không làm được vì RNN chỉ có thông tin của "The sky is", nhưng thông tin cần thiết là chữ "rain" lại ở cuối câu.

Nguyên tắc của BRNN là phân chia các nơron của RNN thông thường thành hai lớp, một cho hướng tiến tới (Forward), và một lớp đi ngược lại (backward) Hai lớp này hoàn toàn độc lập, giống như hai RNN độc lập, nhưng kết quả đầu ra tại thời điểm t thường được tính trên concatenate state của hai lớp tại thời điểm đó.

Tham khảo các hệ thống liên quan đến ngữ nghĩa

Để thực hiện được luận văn, điều đầu tiên chúng ta cần nghiên cứu và tham khảo là làm thế nào "Học Máy" có thể hiểu được Ngữ Nghĩa của văn bản Tiếp theo là phương pháp so sánh ngữ nghĩa của các đoạn văn bản nói chung và câu hỏi nói riêng.

• Hiện giờ có nhiều bài báo, website trình bày về các mô hình phân tích ngữ nghĩa bằng Neural Network, mô hình được đề cập đến nhiều nhất là dùng Recursive and Recurrent Neural Network để phân tích cảm xúc Bài toán đặc trưng của lớp này là "Đánh giá tính tích cực hoặc tiêu cực của bộ phim dựa trên các bình luận" [11].

• Hệ thống hỏi đáp (huấn luyện không giám sát):

– Dùng Paragraph Vector [4]: cũng tương tự như Word Vector, phương pháp này biểu diễn các câu bằng các vector có chiều dài bằng nhau (cũng tương tự như word em- bedding) Với phương pháp này vừa áp dụng cho "Truy Xuất Thông Tin" và "Hệ Thống Hỏi Đáp" bằng cách so trùng Vector câu truy vấn và các Vector đã được huấn luyện trong hệ thống.

– Dùng RNN [8] [9]: các câu hỏi và câu trả lời được gộp lại tạo thành giá trị đầu vào để huấn luyện.

• Hệ thống phân tích ngữ nghĩa (huấn luyện có giám sát):

– So sánh độ tương đồng ngữ nghĩa của câu, đoạn văn [12].

– Kiểm tra sự trùng lắp ngữ nghĩa của các câu hỏi [13] [14].

Sau khi tìm hiểu những thông tin liên quan và phân tích nhiệm vụ phải làm "So sánh ngữ nghĩa của câu hỏi" để đưa ra câu trả lời có sẵn Chúng tôi xin đề cập một số mô hình huấn luyệnNeuron Network đã được thử nghiệm theo mức độ phức tạp dần, được trình bày phần tiếp theo.

Chương 4 PHÂN TÍCH VÀ GIẢI PHÁP

Trước khi chọn mô hình cho bài toán, xin được nhắc lại nội dung của bài toán như ở mục 1.1 là:Xây dựng một hệ thống trả lời tự động (dựa trên dữ liệu có sẵn) Chương trình sẽ tự động dò tìm các câu hỏi mới có bị trùng lặp với câu hỏi trước đó và trả về cùng câu trả lời nếu có.

Sau khi tìm hiểu những thông tin liên quan chúng ta thấy có một số giải pháp sau:

Giải pháp trả lời tự động

Giải pháp trả lời tự động: khi có một câu mới hỏi được hỏi, thì hệ thống sẽ tự động rút trích thông tin và tự động trả lời dựa trên dữ liệu được huấn luyện (giống như các hệ thống Chat-bot, Question-Answer).

Phương pháp này không phù hợp với đề tài Vì trong thực tế, khi dạy một chủ đề diễn đàn được tạo ra cho chủ đề đó để thảo luận, các câu hỏi được sinh viên đưa ra và các Thầy/Cô sẽ trả lời cho từng câu hỏi Nhiệm vụ của hệ thống là xác định những câu hỏi trùng nhau để tự động trả lời (câu được trả lời là câu nguyên thủy của Thầy/Cô), chứ không phải rút trích thông tin và trả lời tự động (lúc này câu trả lời không phải câu nguyên thủy của Thầy/Cô) Còn những câu hỏi không trùng nhau thì được Thầy/Cô trả lời.

Giải pháp phân nhóm các câu hỏi dựa trên câu trả lời

Phương pháp phân nhóm tuyệt đối

Khi có một câu hỏi cần hỏi thì kết quả trả về bắt buộc phải thuộc về một nhóm và chỉ một mà thôi, giống hình vẽ 4.2.

Trong thực tế ta có trường hợp câu hỏi cần hỏi thật sự không trùng với tất cả câu hỏi trước đó Để giải quyết trường hợp này, ta tạo ra một nhóm mới với nhãn là UNKOWN để chứa những câu hỏi thật sự "mới" này Với phương pháp này thì mỗi câu hỏi sẽ chỉ có một câu trả lời hoặc không có câu trả lời nào hết.

Hình 4.2: Giải pháp phân nhóm câu hỏi tuyệt đối. Ưu điểm: Việc tính toán và cho kết quả nhanh khi có câu hỏi cần hỏi.

• Bộ dữ liệu để huấn luyện của các câu hỏi thuộc về một lớp phải thật sự rất nhiều thì máy mới học được đặc trưng của nhóm (thông qua câu hỏi).

• Khi có sự thay đổi nhóm (ví dụ như thêm, bớt nhóm), ta phải thực hiện huyến luyện lại.

Phương pháp phân nhóm tương đối

Với một câu hỏi được hỏi thì có khả năng hơn một câu trả lời được trả về (giống google search) Cách thực hiện như sau (xem hình vẽ 4.3).

Các câu hỏi thay vì chỉ trong một nhóm thì nay được sao chép ra cho toàn bộ các nhóm, nếu câu hỏi trùng khớp với câu trả lời thì nó có màu xanh (đánh label = 1), nếu không thì nó có màu hồng (đánh label = 0) Khi có câu hỏi mới cần hỏi thì ta sẽ xem khả năng câu hỏi mới sẽ thuộc về nhóm nào bằng cách đặt nó vào các nhóm, nếu nó màu xanh thì trả về câu trả lời của nhóm đó.

Hình 4.3: Giải pháp phân nhóm câu hỏi tương đối.

Với cách này thì có khả năng có những kết quả sau:

• Thuộc về một nhóm duy nhất, đây là trường hợp lý tưởng

• Không thuộc về nhóm nào (Unknow), có thể đây là câu hỏi mới

• Thuộc về nhiều nhóm (Recall), đây cũng không hẳn đã sai (xem ví dụ sau)

Ví dụ, trong corpus bạn phân nhóm các câu hỏi theo dạng"What", "How", "Where", "Who" và khi có câu hỏi cần hỏi là’What is the good way to study Java?’thì chắc chắn câu này thuộc về nhóm"What"với các topic như"What way, What method " Nhưng nếu bạn tiếp tục so trùng câu hỏi này vời những nhóm khác"How", "Where", "Who" thì kết quả bạn sẽ tìm được câu trả hỏi trùng là’How can I study Java well?’. Ưu điểm: không quá cực đoan như phương pháp tuyệt đối Có khả năng recall.

• Tính toán kết quả chậm, do phải so sánh câu hỏi với tất cả các nhóm trong corpus.

• Phải thực hiện huyến luyện lại khi có sự thay đổi nhóm (ví dụ như thêm, bớt nhóm).

Giải pháp phân nhóm câu hỏi dựa trên đặc trưng topic

Phương pháp này phân loại các câu hỏi dựa trên tiêu chí của topic (thay vì dựa trên câu trả lời như phương pháp ở mục 4.2 Với mỗi topic sẽ map với một tiêu chí, câu trả lời và các câu hỏi sẽ phải map với tiêu chí này Ví dụ như sau:

- Topic A nói về chủ’Definition C#’vậy những câu hỏi có dạng:

’What is the definition of C#’

- Topic B nói về chủ’Using NET’vậy những câu hỏi có dạng:

’What is the good way to use Pointer?’,

’When should I use NET well?’,

’How can I use Pointer well?’

Hình 4.4: Giải pháp phân nhóm câu hỏi tương đối dựa trên tiêu chí topic.

Với phương pháp này, máy sẽ học được ngữ nghĩa của câu hỏi tương ứng với topic Ví dụ các câu hỏi có chữ ’WHAT’ đa số sẽ thuộc lớp Definition, tương tự các câu hỏi có chữ ’HOW’ đa số sẽ thuộc vào lớp ’USING’.

Khi có câu hỏi muốn hỏi, ta chỉ cần phân lớp câu hỏi và ngay lập tức tìm được câu trả lời tương ứng.

Chú ý: cũng giống như mục 4.3, ta cũng có thể áp dụng phương pháp phân lớp tuyệt đối và phân lớp tương đối. Ưu điểm:

• Việc tính toán và cho kết quả nhanh khi có câu hỏi cần hỏi.

• Kết quả sẽ chính xác hơn phương pháp phân nhóm mục 4.3 vì có sự giám sát của con người bằng cách xác định sẵn những tiêu chí (label) cho cả câu hỏi và câu trả lời Theo phương pháp phân nhóm ở mục 4.3, các tiêu chi này được máy tự học trong câu trả lời.

• Phải thực hiện huấn luyện lại khi có một topic mới.

• Phải có bộ dữ liệu đủ lớn để có khả năng máy học ngữ nghĩa ẩn của các câu hỏi, đặc biệt trong lĩnh vực "Ngôn Ngữ Lập Trình" thì bộ dữ liệu này hoàn toàn chưa có.

• Việc xác định các chủ đề cũng không đơn giản vì sẽ có sự trùng lắp giữa ngữ nghĩa các chủ đề, ví dụ ta đã có chủ đề "USING C#" bây giờ ta lại muốn có chủ đề "USING NET",nhưng chúng ta cũng biết NET bao gồm cả C# do đó việc phân lớp sẽ không còn chính xác Vậy ta phải sửa tiêu chí chủ đề USING C# thành một chủ đề USING C#1 nào đó và USING NET1 sao cho chúng hoàn toàn không giao nhau về mặt ngữ nghĩa Điều này không phải dễ làm, vì chưa chắc làm được, ngoài ra người dùng cũng khó theo dõi khi tiêu chí của chủ đề bị thay đổi.

So sánh ngữ nghĩa của cặp câu hỏi

Thay vì phân nhóm câu hỏi thì ta so trùng ngữ nghĩa của các câu hỏi Hay nói cách khác cho máy học những đặc điểm của các câu hỏi trùng nhau, lúc đó máy có khả năng trả lời liệu hai câu hỏi A và B có trùng nhau không Vậy khi có một câu hỏi mới cần hỏi ta sẽ phải so sánh với tất cả câu hỏi trước đó để xem nó có trùng với câu nào hay không, nếu có trùng thì trả về câu trả lời của câu hỏi trùng (nếu có), nếu không thì sẽ được gửi đến Thầy/Cô Ví dụ dưới trích một phần từ "Quora Question Pairs Data Set".

Hình 4.5: Quora Question Pairs Data Set. Ưu điểm:

• Phương pháp đơn giản, khá sát với bài toán của đề tài.

• Không cần phải huấn luyện lại khi có chủ đề mới Vì máy chỉ học những đặc trưng của hai câu hỏi trùng nhau mà không quan tâm đến chủ đề hoặc câu trả lời.

• Phải có bộ dữ liệu cực lớn về cặp câu hỏi trùng nhau, dạng câu hỏi (yes/no, câu hỏi đuôi, what, where ) Không thể tận dụng các bộ dữ liệu so trùng ngữ nghĩa của hai đoạn văn (ở thể khẳng định).

Ví dụ: ở dạng khẳng định hai câu sau có ngữ nghĩa gần nhauThere is a man at the doorvà

There is a man near the door, đơn giản ta xét trên không gian Word-Vector sẽ thấy Khoảng cách giữa hai câu trên gần bằng nhau vì "at" và "near" cùng đều là giới từ Nhưng ở dạng câu hỏiWho is at the door vàWho is near the door là hai câu hỏi hoàn toàn khác, vì hỏi về hai chủ thể khác nhau.

• Tính toán kết quả chậm vì phải so sánh với tất cả câu hỏi trước đó.

Trong thực tế, việc phải so sánh với tất cả câu hỏi trong corpus cũng không xãy ra, vì theo khảo sát trên diễn đàn của khoa "Khoa Hoc Máy Tính" của trường Bách Khoa HCM, thì khi các thầy dạy một chủ đề nào đó thì diễn đàn của chủ đề đó được tạo ra, do đó các câu hỏi sẽ được gôm cụm trong diễn đàn đó Do đó ta chỉ cần so sánh trùng các câu hỏi trong cùng một diễn đàn.

Nếu không có câu trùng thì sẽ được gửi đến Thầy/Cô trả lời.

Chương 5 HIỆN THỰC VÀ KIỂM THỬ

Trong chương 4 chúng tôi đã phân tích và đưa ra một số giải pháp, nhưng vẫn chưa biết được phương pháp nào khả thi và phù hợp với bài toán của luận văn Trong chương này chúng tôi sẽ hiện thực các giải pháp trên Để học máy hiệu quả ta phải chú ý hai yếu tố chính là "Corpus" và

Corpus: tại thời điểm làm luận văn, chúng tôi đã vào diễn đàn của khoa "Máy Tính" để download tạo corpus, nhưng dữ liệu không đủ nhiều và các câu hỏi không phải câu hỏi đơn Do đó để huấn luyện và kiểm thử giải thuật, chúng tôi xin được dùng những corpus đã có sẵn (bằng tiếng anh) chuyên về XLNNTN của Stanford", "TREC dataset" và "Quora".

Giải thuật: hiện nay Python là ngôn ngữ phổ biến và rất mạnh về xử lý trong lĩnh vực trí tuệ nhân tạo, ngoài ra có rất nhiều thư viện chuyên xử lý Vector như numpy, thư viện chuyên xử lýNeuron Network như Tensorflow, các hàm IO xử lý dữ liệu như json, csv , điểm quan trọng nữa là chúng hỗ trợ GPU Do đó tôi xin chọn Python để hiện thực các giải pháp đã đề ra.

Mô hình encode độc lập câu hỏi và câu trả lời

Dữ liệu

Với giải pháp này tôi xin chọn bộ dữ liệu "Stanford Question Answering Dataset (SQuAD)" phiên bản 1.1.

Cấu trúc của corpus như sau: corpus được format dạng Json, được chia thành nhiều chủ đề

(University of Notre Dame, IPod, American Idol ).

Trong mỗi chủ đề có nhiều đoạn văn (context - trong corpus) viết về chủ đề đó ví dụ với chủ đề "IPod" có các đoạn văn sau:

- Context 1:The iPod is a line of portable media players and multi-purpose pocket computers designed and marketed by Apple Inc The first line was released on October 23, 2001, about

8 ˘00bd months after iTunes (Macintosh version) was released The most recent iPod redesigns were announced on July 15, 2015 There are three current versions of the iPod: the ultra-compact iPod Shuffle, the compact iPod Nano and the touchscreen iPod Touch.

- Context 2: Like other digital music players, iPods can serve as external data storage de- vices Storage capacity varies by model, ranging from 2 GB for the iPod Shuffle to 128 GB for the iPod Touch (previously 160 GB for the iPod Classic, which is now discontinued).

Trong mỗi đoạn văn (context) có khoảng 5-20 câu hỏi về nội dung của đoạn văn đó Ví dụ với Context 1 ở trên ta có các câu hỏi sau:

- Question 1:"Which company produces the iPod?"

- Question 2:"When was the original iPod released?"

Hình 5.1: Stanford Question Answering Dataset.

Dữ liệu huấn luyện và kiểm thử được xây dựng như sau:

- Xem các đoạn văn là câu trả lời cho các câu hỏi thuộc về đoạn văn đó.

- Các câu hỏi thuộc về cùng một đoạn văn được chia 3/4 (3 phần dùng để huấn luyện và 1 phần dùng để kiểm thử).

- Gán nhãn: kết nối các câu trả lời và câu hỏi của nó vào cùng một nhóm Để tạo dữ liệu negative (unknow) ta gán chéo các câu hỏi và câu trả lời khác nhóm Đối với phương pháp phân nhóm tuyệt đối số nhóm (giá trị label) bằng tổng số câu trả lời + 1 (nhóm unknow), đối với phương pháp phân nhóm tương đối thì giá trị label là 0 hoặc 1 (với 0 là câu hỏi và câu trả lời không khớp nhau, 1 là câu hỏi và câu trả lời khớp nhau).

Mô hình huấn luyện

Dùng Neuron Network để hiện thực mô hình học máy với cấu trúc sơ đồ khối như hình dưới

Hình 5.2: Mô hình encode câu trả lời và câu hỏi.

Các bước tiến hành như sau:

- Chuẩn hóa đầu vào: do chiều dài của các câu hỏi và các câu trả lời khác nhau, nên ta phải cắt bớt hoặc thêm vào ký tự đặc biệt cho chúng bằng nhau.

- Vectorized (embedding): câu trả lời và câu hỏi ở dạng văn bản (Text) được Vector hóa dựa trên bộ dữ liệu đã được huấn luyện trước của Google (GloVe) với số chiều 300, có nghĩa là một từ là một vector với số chiều là 300.

- Encode: câu trả lời và câu hỏi được BRNN encode (state của BRNN) Như hình vẽ trên ta có hai BRNN tách biệt, mỗi BRNN dùng cell GRU với 100 neurons.

- Concatenate: kết hợp hai phần encode của câu trả lời và câu hỏi lại thành một Vậy ta có một vector có độ dài bằng tổng chiều dài của hai vector encode (200).

- Classify: vector kết hợp encode của câu trả lời và câu hỏi được phân lớp thông qua một lớpNeuron Network dùng hàm Softmax để activate, giá trị đầu ra là giá trị label của câu trả lời.

Thực hiện và kiểm thử

Chi tiết được hiện thực trong file "two-encode-pair.py" Sau đây là một số điểm chính cần đề cập.

Các thông số của chương trình, bao gồm cả cách lấy dữ liệu và cấu hình Neuron Network.

Hình 5.3: Các giá trị thông số.

- GLOVE_VECTORS_FILE: giá trị Word-Embedding Trong luận văn này dùng GloVe do google huấn luyện trước.

- DATA_FILE: file corpus dưới dạng json.

- MAX_TOPIC: số lượng chủ đề dùng để học máy.

- MAX_CONTEXT_PER_TOPIC: số lượng tối đa câu trả lời (đoạn văn - context) trong một chủ đề Vì các đoạn văn trong một chủ đề có nội dung khá trung nhau dẫn đến kết quả phân nhóm sẽ không chính xác do dó ta gán giá trị này là 1, có nghĩa là mỗi một chủ đề ta chỉ lấy một câu trả lời để bảo đảm các câu trả lời không có nội dung trùng nhau (vì các đoạn văn trong các chủ đề khác nhau thì hoàn toàn khác nhau).

- MIN_QUESTION_PER_CONTEXT: số lượng tối thiểu câu hỏi có cho một câu trả lời.

Trong corpus có những câu trả lời chỉ có một hoặc hai câu hỏi, điều này sẽ làm kết quả không chính xác.

- NUM_NEGATIVE_PER_QUESTION: số lượng mẫu "Unknow" tạo ra cho mỗi câu hỏi, hay nói cách khác là số lần một câu hỏi sẽ kết hợp ngẫu nhiên với câu trả lời khác nhóm (mỗi epoch sẽ random lại) Chỉ số này rất quan trọng, vì nếu số này quá cao máy sẽ nghiêng về nhóm

- MIN_CONTEXT_LENGTH, MAX_CONTEXT_LENGTH: chiều dài tối thiểu và tối đa của câu trả lời Vì các câu trả lời không bằng nhau và có sự chênh lệch rất lớn do đó kết quả sẽ không chính xác, với thông số này chúng ta có thể khống chế dữ liệu được tuyển chọn để dùng.

- MIN_QUESTION_LENGTH, MAX_QUESTION_LENGTH: chiều dài tối thiểu và tối đa của câu trả lời.

- FORMAT_CONTEXT_BEFORE_QUESTION: ở bước concatenate để tạo vector encod- ing ta có hai cách Nếu giá trị này là true thì encode của câu trả lời đứng trước encode của câu hỏi, còn nếu giá trị này bằng false thì encode của câu hỏi đứng trước encode của câu trả lời.

Xây dựng Neuron Network bằng Tensorflow:

Hình 5.4: Hàm xây dựng RNN.

Dùng mô hình ở phần trên để huấn luyện và dừng khi đạt độ chính xác 95% hoặc max epoch.

Trong quá trình huấn luyện, nếu độ chính xác trên dữ liệu huấn luyện đạt trên 85% thì mỗi epoch ta sẽ kiểm tra độ chính xác (dựa trên 1/4 dự liệu còn lại) Kết quả sẽ lưu lại các giá trị thông số của Network ở lúc giá trị kiểm thử đạt cao nhất.

Nhận xét và đánh giá

Sau khi huấn luyện, kết quả chính xác tối đa trên dữ liệu kiểm thử đạt 25%.

Ta thấy độ chính xác không cao vì các câu hỏi và câu trả lời được encode độc lập nên thông tin liên quan giữa câu hỏi và câu trả lời không nhiều Mặc dù các nhóm được tách biệt khá rõ(độ chính xác 95% lúc huấn luyện), nhưng khi có câu hỏi mới thì máy không xác định đúng sự tương quan giữa câu hỏi mới với câu trả lời.

Mô hình gắn kết câu trả lời và câu hỏi trước khi encode

Dữ liệu

Với giải pháp này chúng tôi xin chọn bộ dữ liệu "Stanford Question Answering Dataset (SQuAD)" phiên bản 1.1, cấu trúc đã được mô tả ở mục 5.1.1.

Dữ liệu huấn luyện và kiểm thử được xây dựng như sau:

- Xem các đoạn văn là câu trả lời cho các câu hỏi thuộc về đoạn văn đó.

- Các câu hỏi thuộc về cùng một đoạn văn được chia 3/4 (3 phần dùng để huấn luyện và 1 phần dùng để kiểm thử).

- Gán nhãn: để tạo dữ liệu positive (label = 1) ta kết nối các câu trả lời và câu hỏi của nó Để tạo dữ liệu negative (label = 0) ta gán chéo các câu hỏi và câu trả lời khác nhóm.

Chú ý: với phương pháp này ta không có nhóm unknow Khi có câu hỏi cần hỏi ta sẽ ghép câu hỏi này lần lượt với tất cả các trả lời để xem nó khớp với nhau hay không, do đó sẽ có trường hợp recall (có nhiều hơn một câu trả lời), hoặc không khớp với bất kỳ câu trả lời nào (trường hợp câu hỏi mới).

Mô hình huấn luyện

Dùng Neuron Network để hiện thực mô hình học máy với cấu trúc sơ đồ khối như hình dưới

Hình 5.5: Mô hình encode câu trả lời và câu hỏi độc lập.

Các bước tiến hành như sau:

- Vectorized (embedding): câu trả lời và câu hỏi ở dạng văn bản (Text) được Vector hóa dựa trên bộ dữ liệu đã được huấn luyện trước của Google (GloVe) với số chiều 300, có nghĩa là một từ là một vector với số chiều là 300.

- Concatenate: kết hợp vector của câu trả lời và câu hỏi Vậy ta có một vector có độ dài bằng tổng chiều dài của hai vector thành phần Chú ý, chúng ta phải có ký tự đặc biệt để ngăn cách giữa câu trả lời và câu hỏi.

- Chuẩn hóa đầu vào: do chiều dài của các câu hỏi và câu trả lời khác nhau nên khi kết hợp chúng, ta cũng được các vector có chiều dài khác nhau do đó ta phải cắt bớt hoặc thêm vào các ký tự padding.

- Encode: vector kết hợp được BRNN encode (state của BRNN) Như hình vẽ trên ta có mộtBRNN dùng cell GRU với 100 neurons.

- Classify: vector kết hợp encode của câu trả lời và câu hỏi được phân lớp thông qua một lớpNeuron Network dùng hàm Softmax để activate, giá trị đâu ra là 0 hoặc 1 (0 là câu trả lời và câu hỏi không khớp với nhau và 1 là chúng khớp nhau).

Thực hiện và kiểm thử

Chi tiết được hiện thực trong file "one-encode-pair.py" Sau đây là một số điểm chính cần đề cập.

Các thông số của chương trình không có thay đổi so với mục 5.1.3.

Xây dựng Neuron Network bằng Tensorflow:

Hình 5.6: Hàm xây dựng RNN.

Dùng mô hình ở phần trên để huấn luyện và dừng khi đặt độ chính xác 90% hoặc max epoch.

Trong quá trình huấn luyện, nếu độ chính xác trên dữ liệu huấn luyện đạt trên 85% thì mỗi epoch ta sẽ kiểm tra độ chính xác (dựa trên 1/4 dự liệu còn lại) Kết quả sẽ lưu lại các giá trị thông số của Network ở lúc giá trị kiểm thử đạt tối đa.

Nhận xét và đánh giá

Nếu tập huấn luyện có từ 30 câu trả lời trở xuống thì cho kết quả kiểm thử đạt độ chính xác 80% Khi tập huấn luyện trên 100 câu trả lời thì kết quả huấn luyện gần như đứng yên (không hội tụ nếu tăng số lượng negative).

Ghi chú: nếu thông số NUM_NEGATIVE_PER_QUESTION nhỏ thì recall sẽ lớn, ngược lại unknow sẽ lớn (hoặc có thể không huấn luyện được).

Do câu trả lời được kết nối vào nhau trước khi encode, nên thông tin liên quan giữa chúng rõ hơn sau khi encode Nhưng khi số câu trả lời tăng lên nhưng do số lượng câu hỏi cho mỗi câu trả lời không đổi (từ 5 đến 20 câu cho một câu trả lời), ngoài ra phải tạo ra các câu có nhãn 0 nên thông tin liên quan giữa câu trả lời và câu hỏi càng yếu dần.

Mô hình phân nhóm câu hỏi dựa trên đặc trưng topic

Dữ liệu

Với giải pháp này chúng tôi xin chọn bộ dữ liệu "Text Retrieval Conference (TREC) Data".

Cấu trúc của corpus như sau: corpus được format dạng text, mỗi dòng dữ liệu có label và câu hỏi TREC tách riêng hai files huấn luyện và kiểm thử Dữ liệu huấn luyện gồm 5500 câu hỏi, dữ liệu kiểm thử gồm 500 câu hỏi Các câu hỏi được phân thành 50 chủ đề (gồm chủ đề chính và phụ).

Hình 5.7: Cấu trúc dữ liệu trong TREC.

Mô hình huấn luyện

Dùng Neuron Network để hiện thực mô hình học máy với cấu trúc sơ đồ khối như hình dưới

Hình 5.8: Mô hình phân lớp câu hỏi dựa trên features định sẵn.

Các bước tiến hành như sau:

- Chuẩn hóa đầu vào: do chiều dài của các câu hỏi khác nhau nên ta phải cắt bớt hoặc thêm padding vào để chúng có chiều dài bằng nhau.

- Vectorized (embedding): câu hỏi ở dạng văn bản (Text) được Vector hóa dựa trên bộ dữ liệu đã được huấn luyện trước của Google (GloVe) với số chiều 300, có nghĩa một từ là một vector với số chiều là 300.

- Encode: các vector câu hỏi được RNN encode (state của RNN).

- Classify: lớp cuối cùng dùng activate softmax để xác định đặc trưng của câu hỏi.

Huấn luyện và kiểm thử

Chi tiết được hiện thực trong các file "trec*.py".

Xây dựng Neuron Network bằng Tensorflow:

Hình 5.9: Xây dựng RNN cho phân lớp đặc tính câu hỏi.

Dùng mô hình ở phần trên để huấn luyện và dừng khi đặt độ chính xác 95% hoặc max epoch.

Trong quá trình huấn luyện, nếu độ chính xác trên dữ liệu huấn luyện đạt trên 85% thì mỗi epoch ta sẽ kiểm tra độ chính xác (dựa trên 500 câu hỏi trong file kiểm thử) Kết quả sẽ lưu lại các giá trị thông số của Network ở lúc giá trị kiểm thử đạt tối đa.

Nhận xét và đánh giá

Kết quả tối đa đạt độ chính xác 86.8% trên dữ liệu kiểm thử Với độ chính xác như vậy ta có thể áp dụng cho bài toán của luận văn Nhưng với những phân tích ưu điểm và khuyết điểm ở mục 4.3 thì chúng ta cần cân nhắc lại.

Mô hình so sánh ngữ nghĩa giữa hai câu hỏi

Dữ liệu

Với giải pháp này tôi xin chọn bộ dữ liệu "Quora Question Pairs Data Set".

Cấu trúc của corpus như sau: corpus được format dạng csv, mỗi dòng dữ liệu có hai câu hỏi để so sánh (cột question1 và question2), cột is_duplicate cho giá trị là 1 nếu hai câu hỏi trùng nhau và ngược lại là 0.

Hình 5.10: Cấu trúc dữ liệu trong Quora Question Pairs Data Set.

Mô hình huấn luyện

Dùng Neuron Network để hiện thực mô hình học máy với cấu trúc sơ đồ khối như hình dưới

Hình 5.11: Mô hình encode so trùng câu hỏi.

Các bước tiến hành như sau:

- Chuẩn hóa đầu vào: do chiều dài của các câu hỏi khác nhau nên ta phải cắt bớt hoặc thêm padding vào để chúng có chiều dài bằng nhau.

- Vectorized (embedding): câu hỏi ở dạng văn bản (Text) được Vector hóa dựa trên bộ dữ liệu đã được huấn luyện trước của Google (GloVe) với số chiều 300, có nghĩa một từ là một vector với số chiều là 300.

- Encode: mỗi vector câu hỏi được RNN encode độc lập (state của RNN) Như hình vẽ trên ta có hai RNN dùng cell GRU với 100 neurons.

- Concatenate: kết hợp vector của hai câu hỏi, ta có một vector có độ dài bằng tổng chiều dài của hai vector thành phần (chính là state của hai RNN - 200 neurons).

- Để học được những trường hợp phức tạp chúng tôi thêm hai lớp full connection với hàm activate ReLU.

- Classify: lớp cuối cùng dùng activate softmax để xác định trùng ngữ nghĩa hay không.

Huấn luyện và kiểm thử

Chi tiết được hiện thực trong file "duplicated-questions.py".

Có 404302 cặp câu hỏi trong corpus Dùng 85/100 (343656 cặp câu hỏi) để huấn luện và 15/100 (60646 cặp câu hỏi) để kiểm tra.

Xây dựng Neuron Network bằng Tensorflow:

Hình 5.12: Hàm xây dựng RNN cho duplicated questions.

Dùng mô hình ở phần trên để huấn luyện và dừng khi đặt độ chính xác 90% hoặc max epoch.

Trong quá trình huấn luyện, nếu độ chính xác trên dữ liệu huấn luyện đạt trên 85% thì mỗi epoch ta sẽ kiểm tra độ chính xác (dựa trên 15% dự liệu còn lại) Kết quả sẽ lưu lại các giá trị thông số của Network ở lúc giá trị kiểm thử đạt tối đa.

Nhận xét và đánh giá

Kết quả tối đa đạt độ chính xác 83.38% trên dữ liệu kiểm thử Với kết quả này và việc phân tích ưu điểm nhược điểm ở mục 4.4 thì phương án này hoàn toàn khả thi.

Chương 6 TỔNG KẾT VÀ KẾT LUẬN

Trong chương này, tôi xin tổng kết và so sánh các phương pháp đã phân tích và thử nghiệm,từ đó chọn ra phương án thích hợp nhất Đồng thời tổng kết lại các kiến thức và hiện thực đã đạt được trong quá trình làm luận văn, đối với những mục chưa đạt được chúng tôi xin đề xuất hướng nghiên cứu thêm để đạt được kết quả tốt hơn.

Chọn phương án khả thi

Dưới đây là kết quả so sánh của các phương pháp đã đề cập ở chương 4 và 5

PhươngphápDữLiệuKiểmthửƯuđiểmNhượcđiểm Phânnhómcâuhỏidựatrêncâutrả lời(Encodeđộclậpcâuhỏivàcâu trảlời)SQuAD25%KếtquảtínhtoánnhanhĐộchínhxácquáthấp Phânnhómcâuhỏidựatrêncâutrả lời(Gắnkếtcâuhỏivàcâutrảlời trướckhiencodeSQuAD80%KếtquảtínhtoánnhanhChỉápdụngđượckhisốlượngcâutrảlời dưới30 Phânnhómcâuhỏidựađặctrưng chủđềTREC86.8%Kếtquảtínhtoánnhanh

-Phảithựchiệnhuấnluyệnlạikhicó mộtchủđềmới -Phảicóbộdữliệuđủlớnđểcókhả năngmáyhọcngữnghĩaẩncủacáccâu hỏi,đặcbiệttronglĩnhvực"NgônNgữ LậpTrình"thìbộdữliệunàyhoàntoàn chưacó -Việcxácđịnhcácchủđềcũngkhông đơngiảnvìsẽcósựtrùnglắpgiữangữ nghĩacácchủđề SosánhngữnghĩacủacặpcâuhỏiQuora83.38%

-Phươngphápđơngiản,khá sátvớibàitoáncủađềtài -Khôngcầnphảihuấnluyện lạikhicóchủđềmới.Vìmáy chỉhọcnhữngđặctrưngcủa haicâuhỏitrùngnhaumà khôngquantâmđếnchủđề hoặccâutrảlờiTínhtoánkếtquảchậmvìphảisosánh vớitấtcảcâuhỏitrướcđó (Trongthựctế,việcphảisosánhvớitất cảcâuhỏitrongcorpuscũngkhôngxãy ra,vìtrongthựctế,khidạymộtchủđề nàođóthìdiễnđàncủachủđềđóđược tạora,dođócáccâuhỏisẽđượcgôm cụmtrongdiễnđànđó.Dođótachỉcần sosánhtrùngcáccâuhỏitrongcùngmột diễnđàn.Nếukhôngcócâutrùngthìsẽ đượcgửiđếnThầy/Côtrảlời.)

Với những so sánh ở trên, tôi xin chọn phương ánSo sánh ngữ nghĩa của cặp câu hỏi vì tính khả thi và thích hợp với luận văn.

Ngoài kết quả kiểm thử với bộ dữ liệu Quora, tôi cũng kiểm thử trên một số câu trong lĩnh vực "Ngôn ngữ lập trình" như ví dụ sau (kiểm tra sự trùng nhau giữa hai câu hỏi):

- Trường hợp 1: ’what is the good way to study java?’ và ’what is the good way to study net?’ Với kết quả này hệ thống trả về giá trị 0 (không trùng) => đúng với mục đích

- Trường hợp 2: ’what is the good way to study java?’và ’how can I study java well?’ Với kết quả này hệ thống trả về giá trị 1 (có trùng) => đúng mục đích

- Trường hợp 3: ’what is a pointer?’và ’what is the definition of pointer’ Với kết quả này hệ thống trả về giá trị 0 (không trùng) sai mục đích Nếu ta tìm kiếm lại trong corpus thì thấy không có dữ liệu huấn luyện liên quan giữa "definition và what is" Điều này có thể khắc phục vì khi áp dụng cho ngôn ngữ lập trình ta phải có bộ dữ liệu riêng cho lĩnh vực này.

Những mục đã làm được

Trong quá trình làm luận văn chúng tôi đã nghiên cứu, học tập và thử nghiệm và đã đạt được những việc sau:

Chúng tôi đã nắm bắt được kiến thức cơ bản và đặc trưng của ngôn ngữ tự nhiên, điểm khác biệt so với các lĩnh vực khác như "Xử Lý Ảnh" Bên cạnh đó chúng tôi đã tìm hiểu các phương pháp XLNNTN đặc biệt là hệ thống hỏi đáp, tìm hiểu về phương pháp ứng dụng "Toán Xác Xuất" cũng như "Neuron Network".

Riêng về Neuron Network, chúng tôi đã đi sâu vào nghiên cứu các dạng Neuron Network đặc thù cho XLNNTN như: RNN, LSTM, GRU, BRNN, Recursive RNN, Tree RNN Chúng tôi đã biết ứng dụng các mô hình Neuron Network cho các bài toán XLNNTN, decode - encode, auto encoding, question - answer Cuối cùng, chúng tôi đã Xây dựng được mô hình kiểm tra hai câu hỏi trùng ngữ nghĩa.

Những mục chưa đạt được và hướng nghiên cứu tiếp theo

Như đã để cập ở tiêu đề, đây là hệ thống hỗ trợ môn học ngôn ngữ lập trình cho sinh viên trong trường Đại Học Bách Khoa và có hỗ trợ tiếng Việt Nhưng do quá trình kiểm thử giải thuật, chúng tôi không thu thập đủ dữ liệu nên dùng corpus bằng tiếng Anh, do đó cần có bộ dữ liệu riêng cho lĩnh vực "Môn Học Ngôn Ngữ Lập Trình".

Trong luận văn tôi chưa đề cập đến phần tiền xử lý dữ liệu vì mỗi ngôn ngữ (Tiếng Việt,Tiếng Anh ) sẽ có những đặc tính riêng cần phải xử lý khác nhau Do đó để tăng độ chính xác ta có thể xử lý dữ liệu trước khi huấn luyện.

Ngoài ra để tăng độ chính xác ta có thể thay đổi cấu hình Neuron Network, số lượng cácLayer, Neuron, điều này phải thực hiện trong ứng dụng thực tế.

[1] Cao Hoàng Trụ, “Bài giảng môn Cơ sở tri thức,” Khoa Khoa Học và Kỹ Thuật Máy Tính, Đại Học Bách Khoa TPHCM, Hồ Chí Minh, 2014.

[2] Daniel Jurafsky, James H Martin, “Speech and Language Processing,” Stanford Univer- sity, USA, 2016, chapter 6.

[3] Bengio, Y., Ducharme, R., Vincent, P., Janvin, C (2003), “A Neural Probabilistic Lan- guage Model,” The Journal of Machine Learning Research, 3, 1137–1155.

[4] Quoc Le, Tomas Mikolov “Distributed Representations of Sentences and Documents,”

Google Inc, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA

[5] Ronan Collobert, JasonWeston, Leon Bottou, Michael Karlen, Koray Kavukcuoglu, Pavel Kuksa “Natural Language Processing (Almost) from Scratch,” NEC Laboratories America, 4 Independence Way, Princeton, NJ 08540, USA

[6] Sepp Hochreiterr, Jurgen Schmidhuber “LONG SHORT-TERM MEMORY,” Fakult at fur Informatik Technische Universit at Munchen 80290 Munchen, Germany

[7] Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, Jeffrey Dean “Distributed Rep- resentations of Words and Phrases and their Compositionality,” Google Inc, 1600 Am- phitheatre Parkway, Mountain View, CA 94043, USA

[8] Arushi Raghuvanshi, Patrick Chase “Dynamic Memory Networks for Question Answering,”

Dept of Computer Science Stanford University Stanford, CA - 94305, USA, USA

[9] Eylon Stroh, Priyank Mathur “Question Answering Using Deep Learning,” SCPD Student Stanford University Stanford, CA - 94305, USA, USA

[10] Sainbayar Sukhbaatar, Arthur Szlam, Jason Weston, Rob Fergus “End-To-End Memory

Networks,” Dept of Computer Science Stanford University Stanford, CA - 94305, USA,

[11] Aditya Timmaraju, Vikesh Khanna “Sentiment Analysis on Movie Reviews using Recur- sive and Recurrent Neural Network Architectures,” Dept of Computer Science Stanford

[12] Jonas Mueller, Aditya Thyagarajan “Siamese Recurrent Architectures for Learning Sen- tence Similarity,” Computer Science and Artificial Intelligence Laboratory Massachusetts

[13] Yushi Homma, Stuart Sy, Christopher Yeh “Detecting Duplicate Questions with Deep

Learning,” Dept of Computer Science Stanford University Stanford, CA - 94305, USA

[14] Travis Addair “Duplicate Question Pair Detection with Deep Learning,” Dept of Com- puter Science Stanford University Stanford, CA - 94305, USA

Họ và tên: Hoàng Quốc Nam Ngày, tháng, năm sinh: 25/11/1973 Nơi sinh: TP Hồ Chí Minh Địa chỉ liên lạc: 435/71 KA Lê Văn Sỹ, Phường 12, Quận 3, TP Hồ Chí MinhEmail: nam.quoc.hoang@gmail.com

Thời gian Trường đào tạo Chuyên ngành Trình độ đào tạo

1990 - 1994 Trường đại học Kiến Trúc Tp HCM Xây Dựng Kỹ sư1997 - 1999 Trường đại học Bách Khoa Tp HCM Khoa học máy tính Kỹ sư 22014 - 2017 Trường đại học Bách Khoa Tp HCM Khoa học máy tính Thạc sĩ

Ngày đăng: 09/09/2024, 00:38

HÌNH ẢNH LIÊN QUAN

Hình 2.1: Mô hình toán học của một neural. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 2.1 Mô hình toán học của một neural (Trang 15)
Hình 2.3: Kiến trúc tổng quát của một ANN. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 2.3 Kiến trúc tổng quát của một ANN (Trang 16)
Hình 2.4: Quá trình học của mạng ANN. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 2.4 Quá trình học của mạng ANN (Trang 17)
Hình 2.5: Quá trình học của một neural. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 2.5 Quá trình học của một neural (Trang 18)
Hình 3.2: CBOW, window size = 5, cho các từ lân cận đoán từ trung tâm. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 3.2 CBOW, window size = 5, cho các từ lân cận đoán từ trung tâm (Trang 22)
Hình 3.5: Mô hình skip-gram network - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 3.5 Mô hình skip-gram network (Trang 24)
Hình 3.6: Kết quả skip-gram. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 3.6 Kết quả skip-gram (Trang 25)
Hình 3.7: Biểu diễn Word Vector trong theo không gian hai chiều. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 3.7 Biểu diễn Word Vector trong theo không gian hai chiều (Trang 25)
Hình 3.8: Kiến trúc tổng quát của một RNN. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 3.8 Kiến trúc tổng quát của một RNN (Trang 26)
Hình 3.9: Kiến trúc RNN, biểu diễn dưới dạng cell thường thì là một tầng tanh. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 3.9 Kiến trúc RNN, biểu diễn dưới dạng cell thường thì là một tầng tanh (Trang 28)
Hình 3.10: Kiến trúc LSTM, biểu diễn dưới dạng cell. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 3.10 Kiến trúc LSTM, biểu diễn dưới dạng cell (Trang 28)
Hình 3.11: LSTM, cell state. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 3.11 LSTM, cell state (Trang 29)
Hình 3.13: LSTM, tính hệ số để giữ lại hoặc bỏ qua state. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 3.13 LSTM, tính hệ số để giữ lại hoặc bỏ qua state (Trang 30)
Hình 3.16: LSTM, xử lý dữ liệu ở đầu ra. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 3.16 LSTM, xử lý dữ liệu ở đầu ra (Trang 31)
Hình 3.15: LSTM, cập nhật state mới. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 3.15 LSTM, cập nhật state mới (Trang 31)
Hình 3.18: Bidirectional RNN. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 3.18 Bidirectional RNN (Trang 33)
Hình 4.1: Giải pháp phân nhóm câu hỏi. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 4.1 Giải pháp phân nhóm câu hỏi (Trang 35)
Hình 4.2: Giải pháp phân nhóm câu hỏi tuyệt đối. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 4.2 Giải pháp phân nhóm câu hỏi tuyệt đối (Trang 36)
Hình 4.3: Giải pháp phân nhóm câu hỏi tương đối. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 4.3 Giải pháp phân nhóm câu hỏi tương đối (Trang 37)
Hình 4.4: Giải pháp phân nhóm câu hỏi tương đối dựa trên tiêu chí topic. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 4.4 Giải pháp phân nhóm câu hỏi tương đối dựa trên tiêu chí topic (Trang 38)
Hình 4.5: Quora Question Pairs Data Set. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 4.5 Quora Question Pairs Data Set (Trang 39)
Hình 5.1: Stanford Question Answering Dataset. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 5.1 Stanford Question Answering Dataset (Trang 42)
Hình 5.2: Mô hình encode câu trả lời và câu hỏi. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 5.2 Mô hình encode câu trả lời và câu hỏi (Trang 43)
Hình 5.4: Hàm xây dựng RNN. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 5.4 Hàm xây dựng RNN (Trang 46)
Hình 5.5: Mô hình encode câu trả lời và câu hỏi độc lập. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 5.5 Mô hình encode câu trả lời và câu hỏi độc lập (Trang 48)
Hình 5.8: Mô hình phân lớp câu hỏi dựa trên features định sẵn. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 5.8 Mô hình phân lớp câu hỏi dựa trên features định sẵn (Trang 51)
Hình 5.9: Xây dựng RNN cho phân lớp đặc tính câu hỏi. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 5.9 Xây dựng RNN cho phân lớp đặc tính câu hỏi (Trang 52)
Hình 5.12: Hàm xây dựng RNN cho duplicated questions. - Luận văn thạc sĩ Khoa học máy tính: Hệ thống hỗ trợ môn học ngôn ngữ lập trình
Hình 5.12 Hàm xây dựng RNN cho duplicated questions (Trang 56)

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

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN