4. Phương pháp nghiên cứu
2.2.4 Lựa chọn câu trả lời
hình này để lựa chọn câu trả lời như thế nào cho phù hợp. Trong luận văn sử dụng việc lựa chọn câu trả lời bằng cách chọn câu hỏi trong cơ sở dữ liệu đã phân lớp tương đồng gần nhất với câu hỏi mới, câu trả lời được chọn sẽ là câu trả lời tương ứng cho câu hỏi đã lưu trong cơ sở dữ liệu. Để so sánh tìm ra câu hỏi tương đồng gần nhất chúng tơi dùng cách đơn giản là đếm số từ giống nhau của hai câu hỏi. Câu hỏi cĩ nhiều từ giống nhau hơn là tương đồng gần hơn. Cụ thể hơn các bước chọn câu trả lời như sau:
Đầu tiên chuyển câu hỏi qnew về dạng véc tơ số như đã làm ở bước trước. Kết quả nhận được là véc tơ n chiều vnew các số 0, 1.
Đưa véc tơ vnew qua mơ hình phân lớp để dự đốn phân lớp của câu hỏi
k.
Duyệt các câu hỏi của lớp k trong dữ liệu. Nếu câu hỏi qi nào cĩ nhiều từ giống với câu hỏi qnew thì chọn câu trả lời ai tương ứng với câu hỏi qi.
Kết luận chƣơng 2
Trong chương này đã giới thiệu về bài tốn tư vấn tuyển sinh của Trường CĐBĐ và cũng là bài tốn chung cho nhiều trường đại học, cao đẳng hiện nay. Một cách xây dựng hệ thống trả lời tự động các câu hỏi về tuyển sinh cũng được xây dựng dựa vào phân lớp các câu hỏi. Chi tiết các bước của việc xây dựng hệ thống được trình bày trong chương sau.
Chƣơng 3. THỰC NGHIỆM VÀ ĐÁNH GIÁ
Chương này trình bày kết quả thực nghiệm xây dựng hệ trả lời tự động tư vấn tuyển sinh cho Trường Cao đẳng Bình Định bao gồm các bước: thu thập dữ liệu; Xây dựng mơ hình phân lớp câu hỏi; Xây dựng mơ đun chọn câu trả lời phù hợp với câu hỏi phân lớp.
3.1 Chƣơng trình thực nghiệm
3.1.1 Dữ liệu thử nghiệm
Để thử nghiệm độ tin cậy của mơ hình hỏi đáp tự động, tơi thu thập tập dữ liệu gồm 650 bộ câu hỏi và câu trả lời, trong đĩ đã sử dụng 500 câu hỏi/câu trả lời dùng để training và bộ dữ liệu 150 câu dùng để test. Các câu hỏi trong tập dữ liệu này thuộc 10 lớp như đã trình bày trong Bảng 2-1, phân bố khá đồng đều, điều này sẽ giúp tránh tình trạng mất cân bằng dữ liệu (imbalanced data) sẽ làm ảnh hưởng đến kết quả phân lớp.
Dữ liệu được tổ chức lưu trữ theo dạng json trong file Dulieu.json như minh họa dưới đây:
{"NoiDung": [
{"Lop": "Chung",
"Cauhoi": ["Đối tượng tuyển sinh ngành Giáo dục mầm non ", "Phương thức xét tuyển ngành Giáo dục mầm non", " Thời gian học ngành giáo dục mầm non trong bao lâu?"],
"Traloi": ["Học sinh đã tốt nghiệp THPT hoặc tương đương.", " Cĩ 2 phương thức xét tuyển : Xét tuyển theo kết quả kỳ thi THPT quốc gia năm 2018 hoặc Xét tuyển theo kết quả học tập THPT (học bạ), học lực cả năm lớp 12 xếp loại Khá trở lên.", " Thời gian đào tạo khơng quá 3 năm"],
},
{"Lop": "Vieclam",
"Cauhoi": ["Học ngành giáo dục mầm non ra làm gì", " Trường cĩ đảm bảo việc làm cho sinh viên sau khi tốt nghiệp khơng?", " Thưa ban tư vấn, cho em hỏi nhà trường cĩ trung tâm hỗ trợ giới thiệu việc
làm cho SV khơng ạ? "],
"Traloi": ["Phục vụ trong các trường mầm non hoặc các cơ sở ngồi cơng lập", " Trường giới thiệu cơng ty cĩ nhu cầu tuyển dụng để sinh viên ứng tuyển. Đồng thời trong quá trình đạo tạo nhà trường luơn tổ chức các khĩa huấn luyện nâng cao kỹ năng ứng xử khi phỏng vấn. Điều quan trọng trong quá trình phỏng vấn là sinh viên phải thể hiện được kiến thức cũng như kỹ năng nhà tuyển dụng yêu cầu để thành cơng.", "CĐBĐ cĩ Trung tâm Quan hệ hợp tác doanh nghiệp sẽ hỗ trợ giới thiệu việc làm cho em nếu em cĩ nhu cầu. Hàng tháng, trường đều tổ chức các buổi hội thảo, tọa đàm về kỹ năng xin việc và phỏng vấn cũng như giới thiệu việc làm đến với các bạn sinh viên trong trường. Ngồi ra nhà trường cĩ quan hệ rất tốt với các doanh nghiệp khu vực miền Trung, là đối tác cung cấp nguồn nhân lực cho nhiều cơng ty khác nhau trong địa bàn TP.Đà Nẵng và các tỉnh lân cận. Do đĩ tỷ lệ sinh viên tốt nghiệp hàng năm tìm được việc làm phù hợp luơn đạt trên 80%."]
},
{"Lop": "Supham",
"Cauhoi": ["Hiện em đang quan tâm đến ngành Ngơn ngữ Anh. Vậy cơ hội việc làm của ngành này cĩ cao khơng?", " Em rất thích ngành Ngơn ngữ Anh nhưng chỉ học tiếng Anh ở mức trung bình, vậy cĩ thể vào học ngành này được khơng?", "Ngồi Tiếng Anh ra thì khi học ngành Ngơn ngữ Anh em cĩ phải bắt buộc học thêm ngoại ngữ khác khơng? Cĩ yêu cầu về chuẩn đầu ra khơng?
"],
"Traloi": ["Cơ hội việc làm của ngành này tương đối cao do sinh viên ngành Ngơn ngữ Anh cĩ lợi thế về tiếng Anh, nên rất được các cơng ty, doanh nghiệp ưa chuộng.", "Ngành Ngơn Ngữ Anh thích hợp cho những bạn thích việc giao lưu, học hỏi, làm việc với nhiều nền văn hĩa khác nhau. Mỗi sinh viên chính là một người kết nối xuyên ngơn ngữ và văn hĩa. Qua những yếu tố trên cho thấy nếu em thật sự
yêu thích, đam mê cộng với sự cố gắng rèn luyện cùng sự hỗ trợ giảng dạy từ phía nhà trường thì em hồn tồn cĩ thể theo học ngành Ngơn ngữ Anh tại trường ", " Đối với ngành Ngơn ngữ Anh sinh viên bắt buộc chọn học một trong các ngoại ngữ 2 là Pháp/Trung/Nhật/Hàn và cĩ yêu cầu chuẩn đầu ra cụ thể tùy theo từng ngoại ngữ "]
},
... }
3.1.2 Xây dựng mơ hình phân lớp câu hỏi
Để xây dựng mơ hình phân lớp câu hỏi, luận văn sử dụng các cơng cụ và mơ hình sau đây:
- Ngơn ngữ lập trình: Python - Cơng cụ học máy: Tensorflow
- Thư viện xử lý ngơn ngữ tự nhiên: nltk. - Bộ phân tích từ tiếng Việt: pyvi
- Danh sách stopwords của Van-Duyet Le.
- Mơ hình phân lớp câu hỏi: Mạng nơ ron nhân tạo
Import các thư viện là vấn đề rất cần thiết, các thư viện sử dụng trong ứng dụng này là:
import nltk
from nltk.stem.lancaster import LancasterStemmer
stemmer = LancasterStemmer() import numpy as np import tflearn import tensorflow as tf import random import pyvi
from pyvi import ViUtils
import npm
from npm import vietnamese-stopwords
Xử lý dữ liệu trƣớc khi đƣa vào mơ hình học máy:
Nạp dữ liệu học từ file Dulieu.json:
import json
with open('Dulieu.json') as json_data: duLieu = json.load(json_data)
stop_words=[]
with open(‘stopwords.txt’, 'r', encoding='utf8') as fp:
for line in fp.readlines():
stop_words.append(line.strip())
Tiếp theo để tiến hành tiền xử lý dữ liệu như tách từ, phân đoạn từ, xĩa bỏ stopword và gán nhãn từ loại… thì các khối câu lệnh sau sẽ giúp ta làm việc này:
words = [] classes = [] documents = []
for noidung in duLieu['Dulieu']: for cauhoi in noidung['Cauhoi']:
w = ViTokenizer.word_tokenize(cauhoi) words.extend(w)
documents.append((w, noidung['Lop'])) if noidung['Lop'] not in classes: classes.append(noidung['Lop'])
words = [stemmer.stem(w.lower()) for w in words if w not in
words = sorted(list(set(words))) classes = sorted(list(set(classes)))
Sau đĩ dữ liệu sẽ được mã hĩa từ dạng chữ ra dạng số, cách thực hiện như sau:
# Tạo dữ liệu đầu vào training = []
output = []
output_empty = [0] * len(classes)
# Xử lý dữ liệu cho từng câu
for doc in documents: bag = []
pattern_words = doc[0]
pattern_words = [stemmer.stem(word.lower()) for word in
pattern_words]
# Tạo véc tơ số cho từng câu hỏi
for w in words:
bag.append(1) if w in pattern_words else bag.append(0) output_row = list(output_empty) output_row[classes.index(doc[1])] = 1 training.append([bag, output_row]) random.shuffle(training) training = np.array(training) # Ma trận trọng số train_x = list(training[:,0]) train_y = list(training[:,1]) # Xây dựng mơ hình
# khởi tạo đồ thị tensorflow tf.reset_default_graph() # Xây dựng mạng nơ ron
net = tflearn.input_data(shape=[None, len(train_x[0])]) net = tflearn.fully_connected(net, 8)
net = tflearn.fully_connected(net, 8)
net = tflearn.fully_connected(net, len(train_y[0]), activation='softmax')
net = tflearn.regression(net)
# Định nghĩa mơ hình và setup tensorboard
model = tflearn.DNN(net, tensorboard_dir='tflearn_logs') # Bắt đầu học
model.fit(train_x, train_y, n_epoch=1000, batch_size=8, show_metric=True)
# Lưu mơ hình
model.save('model.tflearn')
# Lưu dữ liệu import pickle
pickle.dump( {'words':words, 'classes':classes,
'train_x':train_x, 'train_y':train_y}, open( "training_data", "wb" ))
Áp dụng mơ hình phân lớp câu hỏi:
# Lấy dữ liệu và mơ hình đã được training ở bước trên
import pickle
data = pickle.load(open( "training_data", "rb" ) ) words = data['words']
classes = data['classes'] train_x = data['train_x']
train_y = data['train_y']
# Nạp dữ liệu để lấy các câu trả lời
import json
with open('DuLieu.json') as json_data: duLieu = json.load(json_data)
# Nạp mơ hình phân lớp
model.load('./model.tflearn')
Lựa chọn câu trả lời:
Khi người dùng nhập câu hỏi mới vào thì hệ thống sẽ tiến hành xử lý thơng qua các bước đã đề cập ở phần trên như tiền xử lý, tokenizer, hay chuyển sang bag-of-words để hệ thống cĩ thể hiểu và phân loại lớp:
# Tách từ
def clean_up_sentence(sentence):
sentence_words = ViTokenizer.word_tokenize(sentence) sentence_words = [stemmer.stem(word.lower()) for word in
sentence_words]
return sentence_words
# Tạo túi từ
def bow(sentence, words):
sentence_words = clean_up_sentence(sentence)
# Tăng trọng số của từ nếu từ đã cĩ trong thư viện (túi từ) bag = [0]*len(words)
for s in sentence_words:
for i,w in enumerate(words): if w == s:
bag[i] = 1 return(np.array(bag))
Sau khi đã xử lý xong sẽ tiến hành phân lớp và so khớp câu hỏi để trả về câu trả lời phù hợp nhất cho người dùng, cụ thể như sau:
ERROR_THRESHOLD = 0.25
def classify(sentence):
# xử lý câu hỏi
results = model.predict([bow(sentence, words)])[0] results = [[i,r] for i,r in enumerate(results) if
r>ERROR_THRESHOLD]
results.sort(key=lambda x: x[1], reverse=True)
return_list = [] for r in results: return_list.append((classes[r[0]], r[1])) return return_list def response(sentence): results = classify(sentence) if results: while results: for i in duLieu['Dulieu']: if i['Lop'] == results[0][0]: max=0
for j,t in i[‘Cauhoi’], i[‘Traloi’]: k=countWord(sentence, j) if k>max: max=k str=t return print(str) results.pop(0)
3.1.3 Độ chính xác
Tiến hành thử nghiệm ngẫu nhiên với mỗi lần 100 câu kết quả đạt được như sau:
Bảng 3-1: Kết quả thử nghiệm
Thử nghiệm Số câu đúng Số câu sai Độ chính xác
1 55/100 45/100 55%
2 70/100 30/100 70%
3 68/100 32/100 68%
4 78/100 22/100 78%
5 83/100 17/100 83%
Đánh giá kết quả thực nghiệm cĩ thể giải thích như sau:
Lần 1: Cĩ những câu chưa được huấn luyện nên dẫn đến trả lời sai. Kết quả đạt được thấp.
Lần 2: Những câu hỏi mới sẽ được huấn luyện nên khi người hỏi thì sẽ trả lời đúng ý người dùng. Kết quả đạt được tăng lên.
Lần 3: Hỏi ở những nội dung khác nhau hoặc những câu hỏi phức tạp do chưa được huấn luyện nội dung đĩ nên trả lời cịn sai. Kết quả đạt được cịn hạn chế.
Lần 4: Do được huấn luyện tiếp cho những câu ở lần 3 nên độ chính xác sẽ tăng. Kết quả đạt được ở mức khá
Lần 5: Dữ liệu đã qua nhiều lần huấn luyện và khả năng xuất hiện câu hỏi mới thấp nên sẽ trả lời đúng cao. Độ chính xác tăng.
3.2 Kết quả
Trình bày các ví dụ về các câu hỏi của người dùng, các truy vấn tương ứng và câu trả lời do hệ thống Q&A tạo ra. Nĩi chung là minh họa cách mơ-
đun QFM (Query Formulation Module) giữ lại các đặc trưng quan trọng trong khi giảm bớt các từ dừng. Các câu trả lời được đưa ra, thường cung cấp thơng tin cần thiết liên quan đến câu hỏi.
3.3 Nhận xét
Sau khi thực hiện thử nghiệm Chatbot thì kết quả thu được khi đặt câu hỏi là tỷ lệ đáp án chấp nhận được chưa được cao, tuy nhiên ứng dựng đã giải quyết được những vấn đề sau:
- Vấn đề phát sinh đối với những câu hỏi nằm ngồi tập dữ liệu huấn luyện nhưng Chatbot đã tự đưa ra được câu trả lời tương đối phù hợp với câu hỏi của người dùng.
- Xây dựng mơ hình cĩ thể hiểu được ngơn ngữ tiếng việt (hỏi/đáp). - Đối với những trường hợp câu hỏi dài và phức tạp, ứng dụng đã phân được thành các lớp và trích xuất ra câu trả lời phù hợp.
- Trả lời tự động của ứng dụng là cĩ nhưng do thời gian huấn luyện chưa lâu và tập dữ liệu huấn luyện cịn hạn chế nên việc trả lời mọi khía cạnh là khơng thể nên chỉ đưa ra được câu trả lời một cách khách quan.
Với những vấn đề gặp phải ở hiện tại và kết quả đạt được như hiện nay thì Chatbot vẫn chưa cĩ thể được đưa ra để áp dụng rộng rãi nên vẫn cần thêm thời gian để cĩ thể hồn thiện ứng dụng về mặt ý tưởng và tập dữ liệu.
Ý tưởng phát triển Chatbot: - Nâng cấp giao diện người dùng
- Bổ sung thêm dữ liệu huấn luyện và bộ dữ liệu tiếng việt khơng dấu - Nâng cấp huấn luyện để Chatbot cĩ thể trở thành một trợ lý ảo thực sự - Đề xuất xây dựng một module gợi ý các câu hỏi cĩ liên quan đã được trả lời trước đây để thí sinh cĩ thêm thơng tin hỗ trợ quyết định
- Ngồi người dùng là thí sinh (người đặt câu hỏi), hệ thống quản lý hai đối tượng người dùng khác là chuyên gia (cán bộ) và quản trị/điều phối viên.
Kết quả thu được sau quá trình nghiên cứu và hồn thiện luận văn: - Tìm hiểu về cấu trúc của hệ thống trợ lý ảo
- Hiểu được các thành phần như cấu tạo, vận hành và thuật tốn để cĩ thể xây dựng một ứng dụng Chatbot riêng.
- Hiểu được cách huấn luyện dữ liệu trong Chatbot để cĩ thể xây dựng ứng dụng trong nhiều lĩnh vực khác nhau.
Kết luận chƣơng 3
Một hệ thống hỏi đáp tốt là hệ thống cĩ khả năng đưa ra câu trả lời chính xác nhất và cĩ thể trả lời được nhiều câu hỏi nhất. Theo thực nghiệm chúng tơi nhận thấy, độ chính xác (số lượng câu trả lời đúng trên số câu trả lời hệ thống đưa ra) và khả năng đưa ra câu trả lời (số lượng câu trả lời trên tổng số câu hỏi đưa vào) của hệ thống cĩ kết quả tương đối cao.
Hệ thống hoạt động khá tốt với các câu hỏi đơn giản hỏi và đưa ra câu trả lời cĩ độ tin cậy cao. Việc học ra các mẫu tốt, chính xác, thể hiện chính xác của hệ thống. Chúng tơi đánh giá hệ thống cĩ khả năng mở rộng dễ dàng. Chỉ cần làm tay một số seed ban đầu cho các quan hệ quan tâm là hệ thống cĩ thể tự học ra các mẫu để trả lời cho câu hỏi liên quan.
Tuy nhiên hạn chế của hệ thống là chỉ trả lời được các câu hỏi liên quan đến các quan hệ cĩ trong hệ thống. Để đáp ứng nhu cầu thực sự của người dùng, hệ thống cần phải mở rộng thêm nhiều dữ liệu.
KẾT LUẬN
Hệ thống trợ lý ảo đang là lĩnh vực mà các cơng ty cơng nghệ tập trung đầu tư nghiên cứu mạnh mẽ và ngày càng được phát triển. Ứng dụng hệ thống trợ lý ảo đang dần được đưa vào đời sống, được tích hợp từ những hệ thống cơ bản như chatbot cho tới tích hợp vào hệ thống phức tạp như y tế, dạy học... Qua luận văn, em đã đạt được những kết quả nhất định.
Đầu tiên là tìm hiểu về mơ hình hệ thống trợ lý ảo, về cấu trúc hệ thống. Từ mơ hình hệ thống trợ lý ảo giúp em hiểu được cấu tạo, thuật tốn ứng dụng trong từng mơ hình. Từ đĩ giúp em cĩ thể đi sâu nghiên cứu từng mơ đun trong hệ thống và ứng dụng thực tiễn là xây dựng một hệ thống trợ lý ảo phù hợp với mục đích của mình.
Thứ hai là từ việc huấn luyện chatbot đã giúp em cĩ những kiến thức, độ hiểu biết sâu hơn về mạng nơ ron, cách xây dựng các mơ hình học máy, xây dựng dữ liệu huấn luyện. Từ đĩ đúc kết được kiến thức để cĩ thể ứng dụng thực tế trong cơng việc và mục đích huấn luyện một hệ thống trợ lý ảo.
Thứ ba là từ việc xây dựng mơ hình chatbot, em cĩ thể xây dựng nhiều mơ hình chatbot với nhiều mục đích khác nhau ví dụ như chatbot cho hệ thống thực phẩm, cho y tế hay trong dạy học…Tuỳ theo yêu cầu và mục đích của thực tiễn cĩ thể xây dựng được hệ thống trợ lý ảo đáp ứng yêu cầu người dùng.
Qua những kết quả đạt đu ợc ban đầu, em nhạ n thấy cịn rất nhiều viẹ c phải làm, cần phải tối u u. Nhu ng cách tiếp cạ n này ban đầu đã