Professional Documents
Culture Documents
Luan Van Tot Nghiep Le Trung Kien Nop
Luan Van Tot Nghiep Le Trung Kien Nop
Luan Van Tot Nghiep Le Trung Kien Nop
---------- ----------
LÊ TRUNG KIÊN
1700218
Mã số: 7510204
Luận văn đại học được bảo vệ tại Trường Đại học Kỹ thuật – Công nghệ Cần Thơ
ngày 28 tháng 06 năm 2021.
Thành phần Ban chấm đánh giá luận văn đại học gồm:
Xác nhận của Ban chấm đánh giá sau khi luận văn đã được sửa chữa.
Th.S Phó Hoàng Linh Th.S Đường Khánh Sơn Th.S Nguyễn Lê Thế Duy
TRƯỜNG ĐẠI HỌC CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
TÊN ĐỀ TÀI: MÔ HÌNH CHATBOT GIAO TIẾP, HỖ TRỢ THỦ TỤC GIẤY TỜ
HÀNH CHÍNH CHO SINH VIÊN TẠI KHOA KỸ THUẬT CƠ KHÍ
❖ Nhiệm vụ: Xây dựng chương trình chatbot để quản lý, hỗ trợ thủ tục tài liệu
và giao tiếp.
❖ Nội dung:
- Thiết kế, chế tạo mô hình quản lý tài liệu.
- Xây dựng chương trình chatbot và điều khiển hệ thống bằng ngôn ngữ Python.
- Thiết kế giao diện người dùng cho chatbot bằng ngôn ngữ Python.
Tôi xin cam đoan đây là đề tài nghiên cứu do tôi thực hiện với sự hướng dẫn
của Th.s Nguyễn Lê Thế Duy và không sao chép từ tài liệu hay công trình đã có trước
đó. Tất cả những nội dung có sự tham khảo từ các tài liệu khác đều được ghi lại trong
phần tài liệu tham khảo.
Lê Trung Kiên
LỜI CẢM ƠN
Tôi xin chân thành cảm ơn quý thầy, cô giảng viên Khoa Kỹ Thuật Cơ Khí,
Trường Đại Học Kỹ thuật – Công nghệ Cần Thơ, đã giúp đỡ cung cấp tài liệu cần
thiết, truyền đạt rất nhiều kiến thức hữu ích và tạo mọi điều kiện thuận lợi nhất để tôi
có thể hoàn thành tốt đề tài luận văn này.
Tôi xin chân thành cảm ơn Thầy Nguyễn Lê Thế Duy – Giảng viên hướng dẫn
đề tài, thầy đã quan tâm và tạo mọi điều kiện thuận lợi nhất về cơ sở vật chất cũng
như các tài liệu tham khảo đồng thời cũng là người định hướng, và góp ý các ưu
khuyết điểm của đề tài để luận văn đạt mức hoàn chỉnh nhất có thể.
Đặc biệt tôi xin gửi lời biết ơn sâu sắc đến người thân, gia đình, cha mẹ đã tạo
mọi điều kiện tốt về kinh tế cũng như tình thần cho tôi có một quá trình nghiên cứu.
Tôi cũng xin cảm ơn đến bạn bè, anh chị khóa trước đã hỗ trợ cũng như động
viên và chia sẻ kinh nghiệm cho tôi trong suốt quá trình thực hiện luận văn.
Lê Trung Kiên
Chatbot trong những năm gần đây đang dần tiến đến một tầm cao mới. mặc dù
còn mới mẻ trong lĩnh vực khoa học và công nghệ nhưng chatbot đang được nghiên
cứu và phát triển với tốc độ chóng mặt bởi các trung tâm nghiên cứu, các trường đại
học và học viện.... rất nhiều các lĩnh vực được ứng dụng công nghệ mới này. Chatbots
là một hình thức thô sơ của phần mềm trí tuệ nhân tạo, là một chương trình được tạo
ra từ máy tính tiến hành cuộc trò chuyện thông qua các phương pháp nhập văn bản,
âm thanh, cảm ứng có thể trả lời các câu hỏi và xử lý các tình huống, là một công cụ
có thể giao tiếp, tương tác với con người thông qua một trí tuệ nhân tạo đã được lập
trình sẵn. Có rất nhiều công cụ cũng như thư viện hỗ trợ cho Chatbots như: Deep
learning, Dialogflow, Wit.ai, Watson Conversation Service, Microsoft „s LUIS,
Google Natural Language API,...
Đề tài luận văn “Mô Hình Chatbot Giao Tiếp, Hỗ Trợ Thủ Tục Giấy Tờ Hành
Chính Cho Sinh Viên Tại Khoa Kỹ Thuật Cơ Khí” thực hiện giải quyết những nhiệm
vụ bao gồm các nội dung như sau: Tìm hiểu về Deep learning trong việc đào tạo dữ
liệu cho chatbot, thiết kế và điều khiển cơ cấu quản lý và thu thập tài liệu từ yêu cầu
điều khiển của chatbot.
MỤC LỤC
3.2.1 Lưu đồ giải thuật và sơ đồ mạch điều khiển robot bằng chatbot ..........42
3.2.9 Màn hình hiển thị và cảm ứng MageDok T116D .................................55
4.1 Ứng dụng mạng nơ ron nhân tạo vào chatbot ..............................................58
4.2.5.4 Thư viện chuyển văn bản thành giọng nói python..........................70
4.3.3 Xây dựng chương trình quản lý cơ sở dữ liệu người dùng. ..................94
6.1.3 Kết quả phát hiện giọng nói tiếng việt ................................................107
6.1.4 Kết quả phát hiện giọng nói tiếng anh .................................................108
Hình 1.2: Các bước xử lý chính trong pipeline của NLU .................................5
Hình 2.12: Phương thức hoạt động của Deep learning ...................................28
Hình 3.1: Bản vẽ tổng thể mô hình quản lý tài liệu ........................................35
Hình 3.5:Cơ cấu thu tài liệu được thiết kế trên inventor .................................39
Hình 3.7: Cơ cấu chuyển đổi ngăn chứa tài liệu được thiết kế trên inventor ..40
Hình 3.8: Cơ cấu chuyển đổi ngăn chứa tài liệu thực tế .................................41
Hình 3.9: Cơ cấu mở cửa lấy tài liệu thiết kế trên inventor ............................41
Hình 3.11: Lưu đồ giải thuật điều khiển robot từ giọng nói ...........................42
Hình 4.2: Quá trình xử lý thông tin của một mạng nơ-ron nhân tạo ...............60
Hình 4.4: Dữ liệu Excel sau khi được ghi bởi Openpyxl ................................70
Hình 4.15: Sơ đồ khối trích xuất đặc trưng huấn luyện ..................................81
Hình 4.17: Lưu đồ giải thuật huấn luyện mô hình chatbot .............................84
Hình 4.19: Lưu đồ giải thuật phân tích đầu vào là giọng nói (Tiếng Anh) ....89
Hình 4.20: Lưu đồ giải thuật phân tích đầu vào là giọng nói (Tiếng Việt) ....89
Hình 4.21: Nhận dạng giọng nói tự động tiếng anh ........................................90
Hình 4.22: Nhận dạng giọng nói tự động tiếng việt ........................................91
Hình 4.24: Sơ đồ khối trích xuất đặc trưng phân lớp ......................................91
Hình 4.26: Sơ đồ khối tính toán đầu ra cho kết quả ........................................93
Hình 4.30: Dữ liệu lịch sử người dùng gửi tài liệu .........................................95
Hình 4.32: Dữ liệu lịch sử truy cập của người quản lý ...................................96
Hình 5.2:Sơ đồ điều khiển toàn hệ thống trên giao diện ...............................100
Hình 5.5: Dữ liệu người gửi bao gồm thông tin và ảnh ................................104
Bảng 4.1: Các phương thức có sẵn trong mô-đun JSON ................................64
Bảng 4.2: Các đối tượng Python sau khi được dịch sang Python ...................65
Bảng 4.4: Bảng câu hỏi và ý định sau khi tạo mảng .......................................85
Bảng 6.2: Kết quả phát hiện giọng nói tiếng việt ..........................................107
Bảng 6.3: Kết quả phát hiện giọng nói tiếng anh ..........................................108
MỞ ĐẦU
Lý do chọn đề tài:
Trong thời đại hội nhập, thời đại của công nghiệp hóa, hiện đại hóa đất nước,
ngành cơ điện tử ngày càng có nhiều đóng góp rất to lớn vào cuộc cách mạng khoa
học kỹ thuật hiện đại, đặc biệt là sự ra đời và phát triển nhanh chóng của kỹ thuật số
cũng như hệ thống nhúng làm cho kỹ thuật điện tử cũng như các vi mạch điều khiển
phong phú đa dạng hơn. Hiện tại phần lớn trong công việc đều đưa kỹ thuật hiện đại
vào rộng rãi trong mọi lĩnh vực của hoạt động sản xuất, kinh tế đời sống xã hội,...
Chúng được thể hiện qua các nhà máy, khu công nghiệp,... vận hành các thiết bị điện,
điều khiển cánh tay robot, lập trình robot làm những công việc thường ngày ngoài ra
còn có cả trong đời sống xã hội và gia đình một cách chi tiết, linh hoạt và đồng bộ.
Ngày nay, ngoài ứng dụng sơ khai ban đầu của robot trong chế tạo máy thì ứng
dụng khác trong y tế, chăm sóc sức khỏe, nông nghiệp đóng tàu, xây dựng, an ninh
quốc phòng đang là động lực cho sự phát triển robot. Đặc biệt nhất là robot y tế đang
được quan tâm vì cần phục vụ cho nhu cầu y tế hiện tại.
Đề tài được kết hợp với đề tài của bạn Nguyễn Minh Phước để tạo ra một sản
phẩm hoàn chỉnh.
Thiết kế mô hình chatbot áp dụng deep learning để hỗ trợ người dùng, giao tiếp
UART với Arduino, giao tiếp I2C.
Nghiên cứu phương pháp đào tạo dữ liệu cho chatbot và tạo giao diện tương tác
với người dùng.
Đề tài áp dụng tổng hợp các kiến thức chuyên ngành Cơ Điện Tử và đại diện ở
các môn: Kỹ thuật lập trình, vi điều khiển, kỹ thuật số, điều khiển thông minh.. ngoài
ra còn các kiến thức tự tìm hiểu và bổ sung gồm thiết kế 3D, ngôn ngữ C, Python,...
Mục tiêu của đề tài là tìm hiểu nghiên cứu chính là nhận dạng giọng nói tiếng
việt với tiếng anh và trả lời theo đúng mẫu câu đã đào tạo trước đồng thời giao tiếp
với vi điều khiển điều khiển động cơ để thu thập lưu trữ tài liệu mỗi khi yêu cầu.
Diện tích mô hình robot quản lý tài liệu khoản 420x323x283, chatbot trả lời câu
hỏi dựa trên cơ sở của deep learning và mạng nơ ron với sự can thiệp, đào tạo của
con người.
Đề tài giới hạn bởi tiếng ồn, phải đảm bảo người dùng nói to và chuẩn đặc biệt
là tiếng anh.
Ngày nay, trí tuệ nhân tạo đang ngày càng mạnh mẽ và ngày càng phát triển
giúp con người làm việc hiệu quả và tiết kiệm thời gian và sức lực.
Hệ thống chatbot áp dụng deep learning là một hệ thống giúp con người giao
tiếp với máy thực hiện các yêu cầu ý muốn của người dùng.
Bố cục đề tài
Chatbot hay còn gọi là Conversational Agents hay Dialog Systems, hiện đang
là một chủ đề nóng. Microsoft đang đặt cược cực lớn cho chatbot và tương tự với các
công ty Facebook(M), Apple (Siri), Google, WeChat, Slack. Có nhiều startup đang
thay đổi cách giao tiếp người dùng với dịch vụ của họ bằng cách tạo ra các ứng dụng
giống như Operator hay x.ai, hay các nền tảng như Chatfuel, và các thư viện như
Howdy’s Botkit. Microsoft cũng đã phát hành bot developer framework của họ. Rất
nhiều công ty đang hi vọng phát triển bot có thể giao tiếp tự nhiên như con người và
rất nhiều tuyên bố sử dụng NLP (Natural Language Processing – xử lý ngôn ngữ tự
nhiên) hay kỹ thuật Deep learning (học sâu) để tạo ra bot có khả năng trên
Chatbot là một ứng dụng được xây dựng dựa trên trí tuệ nhân tạo, cho phép con
người có thể giao tiếp với máy tính. Nó có thể tự động trả lời những câu hỏi hoặc xử
lý tình huống. Phạm vi và sự phức tạp của chatbot được xác định bởi thuật toán của
người tạo nên chúng. Chatbot thường được ứng dụng trong nhiều lĩnh vực như thương
mại điện tử, dịch vụ khách hàng, y tế, tài chính ngân hàng, các dịch vụ giải trí… ngoài
ra nó còn giúp ích cho quá trình tự động hóa các quy trình chiếu sáng (đóng mở đèn
tự động), tưới tiêu, quản lý thời gian, cây trồng,... phục vụ cho nông nghiệp giúp giảm
thiểu công sức, chi phí và thời gian
Ví dụ 1: Nếu như bạn muốn nhắn tin để tìm kiếm thông tin một sản phẩm của
một cửa hàng hoặc công ty đã tạo chatbot, bạn chỉ việc nhập vào từ khoá, chúng sẽ
lập tức tìm và hiện kết quả thông tin sản phẩm cho bạn. Đôi khi thuật ngữ “Chatbot”
được sử dụng để chỉ các trợ lý ảo nói chung hoặc cụ thể là chỉ chương trình máy tính
trả lời tự động trên nền tảng tin nhắn (Messaging Platform).
Ví dụ 2: Nếu như bạn đã hỏi “trợ lý ảo” Siri của Apple hay Cortana của
Microsoft một vấn đề gì đó như: “Thời tiết hôm nay như thế nào?”, là bạn đã làm
việc với một chatbot.
Cấu tạo cơ bản của chatbot gồm có ba phần bao gồm: cơ sở dữ liệu, lớp ứng
dụng, quyền truy cập vào các API và giao diện đồ họa người dùng. Nhờ những thành
phần cơ bản đó mà nó có thể hoạt động được.
- Cơ sở dữ liệu: Cơ sở dữ liệu lưu trữ các thông tin, dữ liệu và nội dung.
- Tầng ứng dụng: Các giao thức của tầng ứng dụng thường được dùng để trao
đổi dữ liệu giữa các chương trình chạy trên máy nguồn và máy đích. Tầng này đóng
vai trò như cửa sổ dành cho hoạt động xử lý các trình ứng dụng, nó biểu diễn những
dịch vụ hỗ trợ trực tiếp các ứng dụng người dùng, chẳng hạn như phần mềm chuyển
tin, truy nhập cơ sở dữ liệu và email, v.v…
- Giao diện lập trình ứng dụng (API): là một giao diện mà một hệ thống máy
tính hay ứng dụng cung cấp để cho phép các yêu cầu dịch vụ có thể được tạo ra từ
các chương trình máy tính khác, và/hoặc cho phép dữ liệu có thể được trao đổi qua
lại giữa chúng
1.1.2 Phân loại chatbot
- Chatbot viết kịch bản (Scripted chatbot): Đây là những chatbot có hành vi
được xác định bởi các quy tắc. Tại mỗi bước trong cuộc trò chuyện, người dùng sẽ
cần chọn các tùy chọn rõ ràng để xác định bước tiếp theo trong cuộc trò chuyện. Các
cách tùy chọn được trình bày cho người dùng ở mỗi bước trong cuộc hội thoại, tức là
liệu họ cần phản hồi bằng một văn bản, giọng nói hoặc cảm ứng thì sẽ phụ thuộc vào
các tính năng của nền tảng trò chuyện mà người dùng đang sử dụng và thiết kế của
chatbot.
- Chatbot thông minh (Intelligent Chatbot): Chatbot thông minh là chatbot được
xây dựng với các kỹ thuật nhân tạo trí thông minh. Trí tuệ nhân tạo (AI) cho phép
chúng cải thiện linh hoạt hơn về đầu vào người dùng mà chúng có thể thu nhận.
Chúng có thể thu nhận đầu vào dạng tự do dưới hình thức trình bày bằng văn bản
hoặc giọng nói và cũng không giới hạn các dạng đầu vào khác nếu nó có ý nghĩa. Ví
dụ: Khi bạn muốn mua quần áo, Bot sẽ tự động hỏi bạn một danh sách câu hỏi về
phong cách quần áo ưa thích của bạn và sẽ đưa ra mẫu gợi ý và giá của mặt hàng.
1.1.3 Cách thức hoạt động
Chatbot là sự kết hợp của các kịch bản có trước và tự học trong quá trình tương
tác. Ta sẽ tương tác với chatbot qua nền tảng tin nhắn hoặc giọng nói. Với các câu
hỏi được đặt ra, chatbot sử dụng các hệ thống xử lý ngôn ngữ tự nhiên (Natural
Language Processing) để phân tích dữ liệu sau đó chúng lựa chọn các thuật toán học
máy để đưa ra các loại phản hồi khác nhau, chúng sẽ dự đoán và phản hồi chính xác
nhất có thể. chatbot sử dụng nhiều hệ thống quét các từ khoá bên trong đầu vào, sau
đó bot khởi động một hành động, kéo một câu trả lời với các từ khóa phù hợp nhất và
trả lời thông tin từ một cơ sở dữ liệu, hoặc bàn giao cho con người. Nếu tình huống
đó chưa xảy ra (không có trong dữ liệu), chatbot sẽ bỏ qua.
NLU được sử dụng để hoàn thành hai nhiệm vụ chính: xác định mục đích đằng
sau những gì một người đang nói và tạo ra phản hồi dựa trên mục đích đã xác định.
Dựa trên nhu cầu của người dùng, NLU cung cấp phản hồi bằng văn bản hoặc giọng
nói. Trong mọi trường hợp, nó phải được tùy biến điều chỉnh theo nhu cầu của người
dùng.
Đây có thể nói là thành phần quan trọng nhất của chatbot. Chatbot có thông
minh hay không thì đây là thành phần quyết định. Mục tiêu của thành phần này là
trích xuất ra 3 thành phần thông tin từ câu nói của người dùng:
• Đầu tiên là phân loại lĩnh vực (domain classification), nó có thể là lĩnh vực
trường học, ngân hàng, y tế hay bảo hiểm. Nếu trong trường hợp chỉ có một lĩnh vực
thì không cần thiết cho bước phân loại này.
• Tiếp đến là phân loại ý định (intent classification), ví dụ như xác định được ý
định tra cứu thông tin tài khoản hoặc ý định kiểm tra số dư.
• Cuối cùng là bước trích xuất thông tin (slot fillter hay entity extraction) trong
câu hỏi người dùng. Ví dụ ta phải trích chọn được thông tin tên người trong câu hỏi
người dùng: “What is Kien's phone number?”. Từ việc trích xuất được thông tin Kien
thì chatbot mới có cơ sở trả lời cho người dùng.
NLU xử lý tin nhắn người dùng bằng một đường ống (pipeline) nơi mà cấu hình
các bước xử lý liên tiếp theo tuần tự :
Để chi tiết các bước xử lý ta xem trong mô hình 1.3: Trong đó bước entity
extraction chính là bước slot filling ở hình 1.2
(vector hóa). Phương pháp phổ biến nhất hiện nay là nhúng từ (word embedding).
Word embedding là tên chung cho một tập hợp các mô hình và phương pháp ngôn
ngữ dành riêng cho xử lý ngôn ngữ tự nhiên (NLP), trong đó các từ hoặc cụm từ vựng
được ánh xạ tới các vector số thực. Về mặt khái niệm, nó liên quan đến việc nhúng
toán học từ một không gian có một chiều cho mỗi từ vào không gian vector liên tục
với các kích thước thấp hơn nhiều.
Sau khi mô hình hóa ngôn ngữ bao gồm dữ liệu đầu vào training cho bot thì việc
xác định ý định người dùng từ câu hỏi người dùng dựa trên tập đã training là bước
phân loại ý định (intent classification) hay phân loại văn bản. Ở bước này ta có thể
dùng một số kỹ thuật như:
- Naive Bayes.
- Decision Tree (Random Forest).
- Vector Support Machine (SVM).
- Convolution Neural Network (CNN).
- Recurrent Neural Network (RNN).
- Long Short-Term Memory (LSTM, Bi-LSTM).
Hầu hết các Chatbot hiện tại đều ứng dụng mô hình deep learning như RNN và
LSTM để phân loại ý định người dùng. Bài toán thách thức lớn nhất cho các chatbot
ở bước này là xác định nhiều ý định (multiple intents) trong một câu nói người dùng.
Ví dụ nếu bạn nói “Hello, where is the training room” thì bot phải xác định được hai
ý định là “hello” và “training room” trong câu nói người dùng. Nếu bot có thể hiểu
và trả lời được câu hỏi loại này sẽ giúp việc tương tác với bot trở nên tự nhiên hơn.
Tiếp đến là việc trích xuất thông tin trong câu hội thoại người dùng. Các thông
tin cần trích xuất thường dưới dạng số, chuỗi hoặc thời gian và chúng phải được khai
báo và huấn luyện trước.
Phân tách các từ (Tokenization hay word segmention): Tách từ là một quá trình
xử lý nhằm mục đích xác định ranh giới của các từ trong câu văn, cũng có thể hiểu
đơn giản rằng tách từ là quá trình xác định các từ đơn, từ ghép… có trong câu. Đối
với xử lý ngôn ngữ, để có thể xác định cấu trúc ngữ pháp của câu, xác định từ loại
của một từ trong câu, yêu cầu nhất thiết đặt ra là phải xác định được đâu là từ trong
câu. Vấn đề này tưởng chừng đơn giản với con người nhưng đối với máy tính, đây là
bài toán rất khó giải quyết. Thông thường thì các ngôn ngữ phân tách các từ bởi
khoảng cách.
Trong bước thứ nhất tiền xử lý dữ liệu chính là thao tác “làm sạch” dữ liệu như:
xử lý loại bỏ các thông tin dư thừa, chuẩn hoá dữ liệu và chuẩn hoá các từ viết tắt,
tách các từ trong câu… Bước tiền xử lý dữ liệu đóng một vai trò vô cùng quan trọng
trong hệ thống chatbot. Nếu ở bước tiền xử lý này dữ liệu đầu vào được làm sạch và
chuẩn hoá tốt thì sẽ làm tăng khả năng độ chính xác cũng như sự thông minh cho
chatbot.
Ở bước thứ ba này là bước huấn luyện mô hình có input đầu vào là các đặc trưng
quan trọng đã được trích xuất ở bước thứ hai và áp dụng các thuật toán học máy để
tạo ra một mô hình phân lớp. Các mô hình phân lớp ở đây có thể là các quy tắc phân
lớp (nếu sử dụng cây quyết định) hoặc là các vector trọng số tương ứng với các đặc
trưng được trích xuất (như trong mạng Nơ-ron, mô hình mạng SVM hoặc các mô
hình hồi quy logistic)
Sau khi đã xây dựng được một mô hình phân lớp intent, chúng ta có thể sử dụng
nó để phân loại yêu cầu mới. Câu hỏi, yêu cầu này cũng phải tuân theo các bước tiền
xử lý dữ liệu và trích xuất đặc trưng, sau đó mô hình phân lớp sẽ chấm “điểm số” cho
từng ý định trong tập các ý định và đưa ra ý định nào có điểm cao nhất.
Để đưa câu trả lời chính xác nhất với câu hỏi và yêu cầu của người dùng,
chatbot cần xác định được chính xác ý định của người dùng. Việc xác định ý định của
người dùng sẽ quyết định hội thoại tiếp được diễn ra như thế nào. Vì thế, nếu xác
định sai ý định người dùng, Chatbot sẽ đưa ra những câu trả lời sai, không hợp ngữ
cảnh. Khi đó, người dùng có thể cảm thấy không hài lòng. Từ lý do trên cho thấy, bài
toán xác định chính xác ý định người dùng đóng một vai trò rất quan trọng trong hệ
thống chatbot.
Để xây dựng một mô hình phân lớp ý định chính xác, chúng ta cần một tập dữ
liệu huấn luyện bao gồm các cách diễn đạt câu hỏi hoặc yêu cầu khác nhau cho mỗi
ý định. Ví dụ, khi cùng một mục đích hỏi về địa chỉ thì người dùng có thể sư dụng
những cách diễn đạt sau:
Có thể nói, bước tạo dữ liệu huấn luyện cho bài toán phân lớp intent là một trong
những công việc quan trọng nhất khi phát triển hệ thống chatbot và ảnh hưởng lớn
tới chất lượng sản phẩm của hệ thống chatbot về sau. Công việc này cũng đòi hỏi thời
gian, công sức khá lớn của nhà phát triển chatbot.
Việc áp dụng chatbot vào việc hỗ trợ giao tiếp với người dùng cùng với việc thu
thập và lưu trữ tài liệu là vô cùng cần thiết với xã hội trong nhiều lĩnh vực. Giúp con
người tiết kiệm thời gian và tăng cường việc tự động hóa trong đời sống, công việc.
Chính vì những lợi ích mang lại trên, đề tài tập trung nghiên cứu là:
• Xây dựng chương trình cho chatbot và đào tạo bởi người xây dựng.
• Xây dựng giao diện chatbot và điều khiển.
• Giao tiếp chương trình chatbot với vi điều khiển
Autodesk Inventor được phát triển bởi công ty phần mềm Autodesk_USA, là
phần mềm thiết kế mô hình 3D phổ biến hiện nay. Đây là phần mềm được phát triển
chuyên cho thiết kế các sản phẩm cơ khí, có giao diện trực quan, giúp người dùng
thuận tiện khi sử dụng với những tính năng nổi trội như sau:
Arduino là một bo mạch vi điều khiển do một nhóm giáo sư và sinh viên Ý thiết
kế và đưa ra đầu tiên vào năm 2005. Mạch Arduino được sử dụng để cảm nhận và
điều khiển nhiều đối tượng khác nhau. Nó có thể thực hiện nhiều nhiệm vụ từ lấy tín
hiệu từ cảm biến đến điều khiển đèn, động cơ, và nhiều đối tượng khác. Ngoài ra
mạch còn có khả năng liên kết với nhiều module khác nhau như module đọc thẻ từ,
ethernet shield, sim900A, ….để tăng khả ứng dụng của mạch.
Phần cứng bao gồm một board mạch nguồn mở được thiết kế trên nền tảng vi
xử lý AVR Atmel 8bit, hoặc ARM, Atmel 32-bit,… Hiện phần cứng của Arduino có
tất cả 6 phiên bản, tuy nhiên phiên bản thường được sử dụng nhiều nhất là Arduino
Uno và Arduino Mega. Arduino là vi điều khiển được sử dụng rộng rãi trên thế giới
với những ưu điểm như rẻ, tương thích được với nhiều hệ điều hành, chương trình
lập trình đơn giản, rõ ràng, dễ sử dụng, sử dụng mã nguồn mở và có thể kết hợp với
nhiều module khác nhau.
1. Cổng USB (loại B): Đây là cổng giao tiếp để ta upload code từ máy tính lên
vi điều khiển. Đồng thời nó cũng là giao tiếp serial để truyền dữ liệu giữa vi điều
khiển với máy tính.
2. Jack nguồn: Để chạy Arduino thì có thể lấy nguồn từ cổng USB ở trên, nhưng
không phải lúc nào cũng có thể cắm với máy tính được. Lúc đó, ta cần một nguồn từ
9V đến 12V.
3. Hàng header thứ nhất: Đánh số từ 0 đến 12 là hàng digital pin, nhận vào hoặc
xuất ra các tín hiệu số. Ngoài ra có một pin mass (GND) và pin điện áp tham chiếu
(AREF).
4. Hàng header thứ hai: Chủ yếu liên quan đến điện áp mass (GND), nguồn.
5. Hàng header thứ ba: Các chân để nhận vào hoặc xuất ra các tín hiệu analog.
Ví dụ như đọc thông tin của các thiết bị cảm biến.
6. Vi điều khiển AVR: Đây là bộ xử lý trung tâm của toàn bo mạch. Với mỗi
mẫu Arduino khác nhau thì con chip này khác nhau. Ở con Arduino Uno này thì sử
dụng ATMega328.
Đối với các Arduino khác tùy vào kích thước và phần cứng sẽ có cách sắp xếp
linh kiện khác nhau, tuy nhiên vẫn giữ cấu hình cơ bản như Arduino UNO R3, một
số Arduino có kích thước nhỏ sẽ không có jack cấp nguồn DC.
Arduino gồm rất nhiều phiên bản với các cấu hình khác nhau nhưng hầu như
vẫn đảm nhận được các chức năng cơ bản tương đương nhau.
Ba loại Arduino được sử dụng phổ biến nhất là Arduino UNO R3, Nano, Mega
2560:
Arduino có nhiều ứng dụng trong đời sống, trong học tập phục vụ hỗ trợ những
người bắt đầu nghiên cứu với vi điều khiển, trong việc chế tạo các thiết bị điện tử
chất lượng cao. Một số ứng dụng có thể kể đến như:
- Lập trình Robot: Arduino chính là một phần quan trọng trong trung tâm xử lý
giúp điều khiển được hoạt động của Robot.
- Lập trình máy bay không người lái. Có thể nói đây là ứng dụng có nhiều kì
vọng trong tương lai.
- Game tương tác: Chúng ta có thể dùng Arduino để tương tác với Joystick, màn
hình,... để chơi các trò như Tetrix, phá gạch, Mario,... và nhiều game rất sáng tạo.
- Arduino cũng được ứng dụng trong máy in 3D và nhiều ứng dụng khác tùy
thuộc vào khả năng sáng tạo của người sử dụng.
Trong đề tài, sử dụng một board Arduino Mega 2560 (Master) làm trung tâm
giao tiếp với máy tính, truyền tính hiệu điều khiển và hai board Arduino Uno (Slave)
làm nhiệm vụ điều khiển trực tiếp hai động cơ truyền động cho robot. Có thể nói rằng
Arduino đảm nhiệm vai trò là bộ xử lý trung tâm cho toàn bộ Robot, vừa đảm nhiệm
vai trò nhận tín hiệu điều khiển từ máy tính vừa xử lý và xuất tín hiệu để động cơ
hoạt động.
Nó có các phiên bản cho các hệ điều hành như MAC, Windows, Linux và chạy
trên nền tảng Java đi kèm với các chức năng và lệnh có sẵn đóng vai trò quan trọng
để gỡ lỗi, chỉnh sửa và biên dịch mã trong môi trường.
Có rất nhiều các module Arduino như Arduino Uno, Arduino Mega, Arduino
Leonardo, Arduino Micro và nhiều module khác. Mỗi module chứa một bộ vi điều
khiển trên bo mạch được lập trình và chấp nhận thông tin dưới dạng mã.
Mã chính, còn được gọi là sketch, được tạo trên nền tảng IDE sẽ tạo ra một file
Hex, sau đó được chuyển và tải lên trong bộ điều khiển trên bo. Môi trường IDE chủ
yếu chứa hai phần cơ bản: Trình chỉnh sửa và Trình biên dịch, phần đầu sử dụng để
viết mã được yêu cầu và phần sau được sử dụng để biên dịch và tải mã lên module
Arduino. Môi trường này hỗ trợ cả ngôn ngữ C và C ++. Khi người dùng viết mã và
biên dịch, IDE sẽ tạo file Hex cho mã. File Hex là các file thập phân Hexa được
Arduino hiểu và sau đó được gửi đến bo mạch bằng cáp USB. Mỗi board Arduino
đều được tích hợp một bộ vi điều khiển, bộ vi điều khiển sẽ nhận file hex và chạy
theo mã được viết. Các thư viện rất hữu ích để thêm chức năng bổ sung vào module
Arduino. Có một danh sách các thư viện bạn có thể thêm bằng cách nhấp vào nút
Sketch trong thanh menu và đi tới Include Library.
Một chương trình Arduino cơ bản có 2 phần chính: void setup() và void loop().
Phần setup() gọi là phần “cài đặt” dùng để chuẩn bị cho một chương trình Arduino.
Các câu lệnh của phần này được đặt trong cặp dấu ngoặc nhọn ngay sau void setup().
Ví dụ: Cài đặt chân 13 của board Arduino hoạt động ở chế độ xuất tín hiệu thì
viết như sau:
void setup() {
pinMode(13,OUTPUT);
Phần loop() là nơi chứa mã thực thi chính. Những lệnh trong phần này sẽ chạy
liên tục. Các câu lệnh của phần này được đặt trong cặp dấu ngoặc nhọn ngay sau void
loop()
Ví dụ: Điều khiển một bóng LED nối với chân 13 nhấp nháy liên tục thì viết
như sau:
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
Python là một ngôn ngữ lập trình bậc cao cho các mục đích lập trình đa năng,
do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991. Python được thiết kế
với ưu điểm mạnh là dễ đọc, dễ học và dễ nhớ. Python là ngôn ngữ có hình thức rất
bắt mắt , cấu trúc rõ ràng, thuận tiện cho người mới học lập trình. Cấu trúc của Python
còn cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu. Vào tháng 7
năm 2018, Van Rossum đã từ chức Leader trong cộng đồng ngôn ngữ Python sau 30
năm lãnh đạo.
Python hoàn toàn tạo kiểu động và dùng cơ chế cấp phát bộ nhớ tự động; do vậy
nó tương tự như Perl, Ruby, Scheme, Smalltalk, và Tcl. Python được phát triển trong
một dự án mã mở, do tổ chức phi lợi nhuận Python Software Foundation quản lý.
Ban đầu, Python được phát triển để chạy trên nền Unix. Nhưng rồi theo thời
gian, Python dần mở rộng sang mọi hệ điều hành từ MS-DOS đến Mac OS, OS/2,
Windows, Linux và các hệ điều hành khác thuộc họ Unix. Mặc dù sự phát triển của
Python có sự đóng góp của rất nhiều cá nhân, nhưng Guido van Rossum hiện nay vẫn
là tác giả chủ yếu của Python. Ông giữ vai trò chủ chốt trong việc quyết định hướng
phát triển của Python
+ Đặc điểm:
Ngôn ngữ lập trình đơn giản, dễ học: Python có cú pháp rất đơn giản, rõ ràng.
Nó dễ đọc và viết hơn rất nhiều khi so sánh với những ngôn ngữ lập trình khác như
C++, Java, C#. Python làm cho việc lập trình trở nên thú vị, cho phép bạn tập trung
vào những giải pháp chứ không phải cú pháp. Miễn phí, mã nguồn mở: có thể tự do
sử dụng và phân phối Python, thậm chí là dùng cho mục đích thương mại. Vì là mã
nguồn mở, bạn không những có thể sử dụng các phần mềm, chương trình được viết
trong Python mà còn có thể thay đổi mã nguồn của nó. Python có một cộng đồng rộng
lớn, không ngừng cải thiện nó mỗi lần cập nhật.
Khả năng di chuyển, chạy trên nhiều nền tảng: Các chương trình Python có thể
di chuyển từ nền tảng này sang nền tảng khác và chạy nó mà không có bất kỳ thay
đổi nào. Nó chạy liền mạch trên hầu hết tất cả các nền tảng như Windows, macOS,
Linux. Khả năng mở rộng và có thể nhúng: Giả sử một ứng dụng đòi hỏi sự phức tạp
rất lớn, bạn có thể dễ dàng kết hợp các phần code bằng C, C++ và những ngôn ngữ
khác (có thể gọi được từ C) vào code Python. Điều này sẽ cung cấp cho ứng dụng của
bạn những tính năng tốt hơn cũng như khả năng scripting mà những ngôn ngữ lập
trình khác khó có thể làm được.
Ngôn ngữ thông dịch cấp cao: Không giống như C/C++, với Python, bạn không
phải lo lắng những nhiệm vụ khó khăn như quản lý bộ nhớ, dọn dẹp những dữ liệu
vô nghĩa... Khi chạy code Python, nó sẽ tự động chuyển đổi code sang ngôn ngữ máy
tính có thể hiểu. Bạn không cần lo lắng về bất kỳ hoạt động ở cấp thấp nào. Thư viện
tiêu chuẩn lớn để giải quyết những tác vụ phổ biến: Python có một số lượng lớn thư
viện tiêu chuẩn giúp cho công việc lập trình của bạn trở nên dễ thở hơn rất nhiều, đơn
giản vì không phải tự viết tất cả code.
Hướng đối tượng: Mọi thứ trong Python đều là hướng đối tượng. Lập trình
hướng đối tượng (OOP) giúp giải quyết những vấn đề phức tạp một cách trực quan.
Với OOP, bạn có thể phân chia những vấn đề phức tạp thành những tập nhỏ hơn bằng
cách tạo ra các đối tượng.
Python 1: bao gồm các bản phát hành 1.x. Giai đoạn này, kéo dài từ đầu đến
cuối thập niên 1990. Từ năm 1990 đến 1995, Guido làm việc tại CWI (Centrum voor
Wiskunde en Informatica - Trung tâm Toán-Tin học tại Amsterdam, Hà Lan). Vì vậy,
các phiên bản Python đầu tiên đều do CWI phát hành. Phiên bản cuối cùng phát hành
tại CWI là 1.2.
Vào năm 1995, Guido chuyển sang CNRI (Corporation for National Research
Initiatives) ở Reston, Virginia. Tại đây, ông phát hành một số phiên bản khác. Python
1.6 là phiên bản cuối cùng phát hành tại CNRI.
Sau bản phát hành 1.6, Guido rời bỏ CNRI để làm việc với các lập trình viên
chuyên viết phần mềm thương mại. Tại đây, ông có ý tưởng sử dụng Python với các
phần mềm tuân theo chuẩn GPL. Sau đó, CNRI và FSF (Free Software Foundation -
Tổ chức phần mềm tự do) đã cùng nhau hợp tác để làm bản quyền Python phù hợp
với GPL. Cùng năm đó, Guido được nhận Giải thưởng FSF vì Sự phát triển Phần
mềm tự do (Award for the Advancement of Free Software).
Phiên bản 1.6.1 ra đời sau đó là phiên bản đầu tiên tuân theo bản quyền GPL.
Tuy nhiên, bản này hoàn toàn giống bản 1.6, trừ một số sửa lỗi cần thiết.
Python 2: vào năm 2000, Guido và nhóm phát triển Python dời đến BeOpen.com
và thành lập BeOpen PythonLabs team. Phiên bản Python 2.0 được phát hành tại đây.
Sau khi phát hành Python 2.0, Guido và các thành viên PythonLabs gia nhập Digital
Creations.
Python 2.1 ra đời kế thừa từ Python 1.6.1 và Python 2.0. Bản quyền của phiên
bản này được đổi thành Python Software Foundation License. Từ thời điểm này trở
đi, Python thuộc sở hữu của Python Software Foundation (PSF), một tổ chức phi lợi
nhuận được thành lập theo mẫu Apache Software Foundation.
Python 3, còn gọi là Python 3000 hoặc Py3K: Dòng 3.x sẽ không hoàn toàn
tương thích với dòng 2.x, tuy vậy có công cụ hỗ trợ chuyển đổi từ các phiên bản 2.x
sang 3.x. Nguyên tắc chủ đạo để phát triển Python 3.x là "bỏ cách làm việc cũ nhằm
hạn chế trùng lặp về mặt chức năng của Python". Trong PEP (Python Enhancement
Proposal) có mô tả chi tiết các thay đổi trong Python.
Đề tài sử dụng Python biên bản 3.7.9 cho việc xây dựng chương trình chatbot.
Như đã mô tả giới thiệu, về Python là ngôn ngữ lập trình hướng đối tượng bậc
cao, dùng để phát triển website và nhiều ứng dụng khác. Với cú pháp cực kì đơn giản,
Python là lựa chọn hoàn hảo cho các lập trình viên trong nhiều lĩnh vực lập trình phần
mềm, sau đây là những ứng dụng nỗi bật và được sử dụng rộng rãi.
Xây dựng website với Framework của Python: Các web frameworks Django
và Flask ngày càng trở nên phố biến thì việc phát triển web bằng Python trở nên dễ
dàng hơn bao giờ hết. Flask cung cấp cho người dùng các thành phần cốt lõi thường
được sử dụng nhất của khung ứng dụng web như URL routing, request & response
object, template... Django được thiết kế để giúp các nhà phát triển đưa các ứng dụng
từ ý tưởng đến hoàn thành càng nhanh càng tốt, nó có đầy đủ các thư viện/module
cần thiết.
Python dùng để tạo nguyên mẫu phần mềm: Bên cạnh mảng lập trình ứng dụng
web, Python còn được ứng dụng trong tạo nguyên mẫu phần mềm. Nếu nói về tốc độ
thì Python sẽ chậm hơn so với các ngôn ngữ biên dịch như Java và C++. Python sẽ
không phải lựa chọn tốt nhất nếu bạn đang bị giới hạn về nguồn lực, yêu cầu hiệu quả
cao. Tuy nhiên, bên cạnh đó Python lại là một ngôn ngữ lập trình tuyệt vời để tạo ra
những nguyên mẫu - bản chạy thử.
của mình, Python còn có EarthPy cho khoa học Trái Đất, AstroPy cho thiên văn
học... Python cũng được ứng dụng trong khai thác dữ liệu, deep learning, machine
learning.
Viết tool để tự động hóa công việc: Chắc hẳn những ai đam mê công nghệ chắc
chắn biết những tool thú vị ở trong Google Chrome Extension hoặc nhiều tool hữu
ích bạn có thể download trên bất kỳ trang web nào. Nếu như trước kia, những tool
này cần phải viết bằng các ngôn ngữ khó như Java, PHP... thì hiện nay, với Python,
tốc độ sản xuất tool có thể tăng lên gấp 10 lần. Python sẽ giúp bạn nhanh chóng tạo
ra các công cụ như tạo từ điển, công cụ dò quét trang web, công cụ xử lý dữ liệu file,
gửi email...
Ngôn ngữ lập trình Python là một trong những ngôn ngữ lập trình được sử dụng
nhiều nhất trong việc phát triển trí tuệ nhân tạo. Python được nhiều người lựa chọn
để lập trình trí tuệ nhân tạo vì tính phổ biến, dễ học và khả năng tương tích với công
nghệ 4.0. Nó có thể được sử dụng một cách dễ dàng với các cấu trúc dữ liệu và các
thuật toán AI được sử dụng thường xuyên khác. Rất nhiều thư viện Python có thể và
đang được sử dụng cho lĩnh vực Machine Learning, Deep Learning và AI. Có thể kể
tới: Tensorflow, Pytorch, Theano và PyTorce. Càng nhiều lập trình viên làm việc
trong lĩnh vực này thì số lượng nguồn (resources) và thư viện (libraries) lại càng tăng
lên.
Phần mềm PyCharm cung cấp một bộ công cụ hoàn chỉnh cho các nhà phát triển
Python chuyên nghiệp. PyCharm được xây dựng xung quanh một trình soạn thảo hiểu
mã sâu sắc, và một trình sửa lỗi cho cái nhìn rõ ràng về hoạt động của mã. PyCharm
cung cấp khả năng tích hợp với các công cụ cộng tác như hệ thống kiểm soát phiên
bản và các tracker. Trình biên tập chuyên nghiệp mở rộng các yếu tố cần thiết bằng
cách tích hợp liền mạch với các khuôn khổ web, các công cụ JavaScript, ảo hóa và
hỗ trợ containerization.
Pycharm là một giải pháp phù hợp cho Python developers vì IDE này hỗ trợ
nhiều extensions, môi trường ảo (Virtual Environment), nhiều tính năng thông minh
như bộ code completion, tự động thụt lề, phát hiện văn bản trùng lặp và kiểm tra lỗi.
Ngoài ra còn có các tính năng tìm kiếm mã nguồn thông minh để tìm kiếm từng từ
một trong nháy mắt.
Giúp chúng ta viết mã chất lượng cao hơn. Nó bao gồm các lược đồ màu (color
schemes) cho từ khóa, lớp và hàm. Điều này giúp tăng khả năng đọc và hiểu mã. Giúp
xác định lỗi một cách dễ dàng. Cung cấp tính năng tự động hoàn thành và hướng dẫn
để hoàn thành mã.
Nó giúp các nhà phát triển chỉnh sửa và cải thiện mã với ít nỗ lực và thời gian
hơn. Với điều hướng mã, lập trình viên có thể dễ dàng điều hướng đến một hàm, lớp
hoặc tệp. Một lập trình viên có thể xác định vị trí một phần tử, một ký hiệu hoặc một
biến trong mã nguồn trong thời gian ngắn. Hơn nữa, bằng cách sử dụng chế độ thấu
kính, nhà phát triển có thể kiểm tra và vá lỗi toàn bộ mã nguồn một cách kỹ lưỡng.
Nó có lợi thế là thực hiện các thay đổi hiệu quả và nhanh chóng đối với cả biến
cục bộ (local variables) và biến toàn cục (global variables). Tái cấu trúc trong
PyCharm cho phép các nhà phát triển cải thiện cấu trúc bên trong mà không thay đổi
hiệu suất bên ngoài của code. Pycharm cũng giúp phân chia các lớp và chức năng mở
rộng tốt hơn với sự trợ giúp của phương pháp trích xuất.
Nó giúp các nhà phát triển tạo các ứng dụng web bằng Python. Nó hỗ trợ các
công nghệ web phổ biến như HTML, CSS và JavaScript. Các nhà phát triển có lựa
chọn chỉnh sửa trực tuyến với IDE này. Đồng thời, họ có thể xem trước trang web đã
cập nhật/đã tạo. Các nhà phát triển có thể theo dõi các thay đổi trên trình duyệt web
trực tiếp. PyCharm cũng hỗ trợ AngularJS và NodeJS để phát triển các ứng dụng web.
PyCharm hỗ trợ các thư viện khoa học của Python như Matplotlib, NumPy và
Anaconda. Các thư viện khoa học này giúp xây dựng các dự án về Khoa học Dữ liệu
và Học máy. Hỗ trợ các biểu đồ tương tác giúp các nhà phát triển hiểu dữ liệu tốt hơn.
Nó có khả năng tích hợp với những công cụ khác nhau như IPython, Django và Pytest.
Sự tích hợp này giúp thúc đẩy các giải pháp độc đáo.
Deep learning được bắt nguồn từ thuật toán Neural network vốn xuất phát chỉ
là một ngành nhỏ của machine learning. Deep Learning là một chi của ngành máy
học dựa trên một tập hợp các thuật toán để cố gắng mô hình dữ liệu trừu tượng hóa ở
mức cao bằng cách sử dụng nhiều lớp xử lý với cấu trúc phức tạp, hoặc bằng cách
khác bao gồm nhiều biến đổi phi tuyến. Nó được lấy cảm hứng từ cấu trúc của bộ não
con người. Bộ não con người bao gồm các tế bào thần kinh xử lý và truyền thông tin
giữa chúng. Các tế bào thần kinh này được kết nối tinh vi để nhận đầu vào và tạo ra
đầu ra giữa các tế bào thần kinh. Khi mắt chúng ta nhìn thấy một con mèo, hình ảnh
con mèo được truyền qua một sợi trục đến một tế bào thần kinh khác và sau đó não
của chúng ta nhận ra một con mèo. Mạng nơron được lấy cảm hứng từ các nơron đầu
vào, mạng truyền thông tin, các nơron thực hiện tính toán và các nơron đầu ra.
Các thuật toán học sâu đã được phát triển thành công trong nhiều ứng dụng như
nhận dạng hình ảnh hoặc xử lý ngôn ngữ tự nhiên. Ví dụ, một chiếc ô tô tự lái sử
dụng sâu học rộng rãi trong việc nhận dạng các đối tượng chuyển động, nghe ngôn
ngữ, phát âm ngôn ngữ, v.v. Các ngân hàng và công ty bảo hiểm sử dụng học sâu để
phát hiện các giao dịch gian lận. Xem “ Nhận dạng hình ảnh là gì? “Và“ Dễ dàng phát
hiện bất thường bằng mã tự động ”.
Ví dụ: Tại sao bạn biết một bức ảnh là ảnh con mèo hay ảnh con chó? Đối với
con người, việc định nghĩa điều này vô cùng đơn giản (Ví dụ: Tai mèo nhọn, mỏ chó
thì dài ra, …), tuy nhiên, bạn lại rất khó khăn để biểu diễn những thứ này dưới các
dòng lệnh của máy tính. Nhưng nhờ vào Deep Learning thì vấn đề đó được giải quyết
một cách cụ thể.
Deep learning là một phần của Machine Learning, một ngành rất rộng và nặng
về toán, gồm rất nhiều thuật toán và mỗi thuật toán có ứng dụng riêng tùy vào bài
toán:
• Linear Regression
• Logistic Regresstion
• Decision Tree and Random Forest
• Naive Bayes
• Support Vector Machines
• K-Nearest Neighbors
• Principal component analysis (PCA)
• Neural network
• .....
Kiến trúc phức tạp của việc học sâu được cung cấp từ mạng lưới thần kinh sâu
với khả năng thực hiện trích xuất tính năng tự động. Ngược lại, trong học máy thông
thường còn gọi là học nông, nhiệm vụ này được thực hiện khi truy xuất các thuật toán
cụ thể.
I2C là tên viết tắt của cụm từ tiếng anh “Inter-Integrated Circuit”. Nó là một
giao thức giao tiếp được phát triển bởi Philips Semiconductors để truyền dữ liệu giữa
một bộ xử lý trung tâm với nhiều IC trên cùng một board mạch chỉ sử dụng hai đường
truyền tín hiệu.
Do tính đơn giản của nó nên loại giao thức này được sử dụng rộng rãi cho giao
tiếp giữa vi điều khiển và mảng cảm biến, các thiết bị hiển thị, thiết bị IoT,
EEPROMs, v.v …
I2C là giao thức truyền tin nối tiếp đồng bộ sử dụng 2 dây: SDA và SCL trong
đó SDA (serial data) là đường truyền nhận dữ liệu và SCL(serial clock) là đường
truyền xung nhịp. Các đường SDA và SCL trên các thiết bị có cấu hình cực máng hở
(open-drain) hoặc collector hở (open-collector) vì thế chúng cần điện trở kéo lên
(pull-up resistor) khoảng từ 1 đến 10(kΩ). Ở trạng thái nghỉ thì 2 chân này ở mức
cao. Lý do sử dụng một hệ thống cực máng hở (open drain) là để không xảy ra hiện
tượng ngắn mạch, điều này có thể xảy ra khi một thiết bị cố gắng kéo đường dây lên
cao và một số thiết bị khác cố gắng kéo đường dây xuống thấp
Tốc độ truyền: 100Kbits/s ở chế độ chuẩn (Standard mode), có thể lên tới
400Kbits/s ở chế độ nhanh(Fast mode) và cao nhất là 3,4Mbits/s ở chế độ cao tốc
(High-speed mode).
Trên đường truyền giao tiếp I2C: Có thể là một chủ-một tớ (One Master One
Slave), một chủ- nhiều tớ (One Master-Multi Slave) hoặc nhiều chủ-nhiều tớ (Multi
Master –Multi Slave). Một thiết bị tớ Slave cũng có thể trở thành chip chủ nếu nó có
khả năng.
Sau đây là một số đặc điểm quan trọng của giao thức giao tiếp I2C:
- Chỉ cần có hai đường bus (dây) chung để điều khiển bất kỳ thiết bị / IC nào
trên mạng I2C
- Không cần thỏa thuận trước về tốc độ truyền dữ liệu như trong giao tiếp
UART. Vì vậy, tốc độ truyền dữ liệu có thể được điều chỉnh bất cứ khi nào cần thiết
- Cơ chế đơn giản để xác thực dữ liệu được truyền
- Sử dụng hệ thống địa chỉ 7 bit để xác định một thiết bị / IC cụ thể trên bus I2C
- Các mạng I2C dễ dàng mở rộng. Các thiết bị mới có thể được kết nối đơn giản
với hai đường bus chung I2C.
2.2.2 Phương thức truyền dữ liệu UART
2.2.2.1 Giới thiệu về giao tiếp UART
UART có chức năng chính là truyền dữ liệu nối tiếp. Trong UART, giao tiếp
giữa hai thiết bị có thể được thực hiện theo hai phương thức là giao tiếp dữ liệu nối
tiếp và giao tiếp dữ liệu song song.
Trong giao tiếp UART cơ bản, thiết bị truyền và thiết bị nhận giao tiếp theo
cách thức như sau: Phần cứng – hardware- UART sẽ chuyển đổi dữ liệu song song
nhận được từ vi xử lý, vi điều khiển và chuyển chúng thành dữ liệu nối tiếp. Dữ liệu
nối tiếp này sẽ được truyền đến thiết bị nhận và tại đây, hardware UART sẽ chuyển
đổi ngược lại thành dữ liệu song song để truyền về vi điều khiển, vi xử lý của thiết bị
nhận.
Trong giao tiếp UART, dữ liệu được truyền không đồng bộ, nghĩa là không cần
tín hiệu clock hoặc các tín hiệu timming khác để đồng bộ, kiểm tra dữ liệu giữa thiết
bị truyền và thiết bị nhận. Thay vào đó, UART sử dụng các bit đặc biệt được gọi là
Start và Stop bits.
Các bits này được thêm vào đầu và cuối gói dữ liệu. Các bits được thêm vào sẽ
giúp bên nhận xác định được phần nào là phần dữ liệu thực tế cần nhận.
Bộ phận truyền UART sẽ nhận dữ liệu từ vi điều khiển thông qua bus điều khiển
và bus dữ liệu. Với dữ liệu này, UART sẽ thêm vào Start, Parity và Stop bits theo cầu
hình và convert nó thành 1 gói dữ liệu. Gói dữ liệu này sẽ được chuyển đổi từ song
song sang nối tiếp được lưu dưới các thanh ghi – shift register và truyền đi từng bit
một qua chân TX.
Thiết bị nhận UART sẽ nhận dữ liệu từ chân RX và xác định đâu là dữ liệu thực
sau khi loại trừ start và stop bits. Parity bit được sử dụng để kiểm tra độ chính xác
của dữ liệu. Phụ thuộc vào sự chia cắt của start, parity và stop bits từ gói dữ liệu, tất
cả dữ liệu sẽ được chuyển từ nối tiếp sang song song và được lưu dưới các thanh ghi
– shift register. Những dữ liệu song song này sẽ được truyền đến vi điều khiển thông
qua data bus.
Như đã đề cập lúc đầu, giao tiếp UART không cần sử dụng tín hiệu clock để
đồng bộ dữ liệu. Tuy nhiên có một số quy luật cần phải tuân thủ để tránh các lỗi trong
quá trình truyền nhận dữ liệu qua UART. Các quy luật này bao gồm: Bits đồng bộ
(Start and Stop bits), Parity Bit, Data Bits, Baud Rate – Tốc độ truyền nhận
Chúng ta đã tìm hiểu các bits đồng bộ và parity bit and data bits. Tuy nhiên, có
1 yếu tố quan trọng trong quá trình truyền nhận dữ liệu UART là Baud Rate.
Baud Rate: là tốc độ dùng để truyền và nhận dữ liệu. Cả thiết bị truyền và thiết
bị nhận cần giao tiếp trên cùng 1 tốc độ để quá trình truyền nhận được hoàn thành.
Baud Rate được đo bởi số bit / giây (bits per second). Một số baud rates tiêu
chuẩn là: 4800 bps, 9600 bps, 19200 bps, 115200 bps, …. Trong đó, tốc độ 9600 bps
là tốc độ thường được sử dụng nhiều nhất.
Mô hình quản lý và thu thập tài liệu được thiết kế trong luận văn gồm có các bộ
phận chính như sau:
Bộ phận khung, vỏ: Phần khung, vỏ có tác dụng liên kết các bộ phận khác của
robot. Đồng thời, nó cũng có tác dụng trong việc tăng độ cứng vững, bảo vệ robot
khỏi các tác động bên ngoài.
Bộ phận công suất: Bộ phận công suất có tác dụng cung cấp năng lượng cho
robot hoạt động. Bộ phận này phải cung cấp công suất đủ lớn cho toàn bộ hệ thống.
Do đó, robot được sử dụng pin Lipo Lithium làm nguồn cung cấp năng lượng chính
cho toàn hệ thống.
Bộ phận truyền động: Robot cần được truyền động để có thể cuốn tài liệu vào
hộp cùng với bộ phận chia ngăn cho tài liệu và bộ phận cửa sau chịu trách nhiệm lấy
tài liệu khi đầy.
Bộ phận mạch điều khiển: Module điều khiển trung tâm có vai trò điều khiển
hoạt động của robot thông qua giao tiếp với máy tính qua cổng COM. Board Arduino
Mega 2560 được sử dụng làm Master làm nhiệm vụ điều khiển động cơ thu tài liệu
và nhận tín hiệu từ máy tính cùng với Arduino Uno làm Slave nhận tín hiệu từ Master
để điều khiển động cơ kéo cửa sau lên.
Phân khung là nơi lắp ráp các chi tiết của robot. Yêu cầu cơ bản của khung
là độ cứng vững, độ chính xác về vị trí tương đối của các bề mặt lắp ghép và khả
năng chịu tải tốt. Chính vì thế khung xe được chế tạo bằng nhôm định hình, các
thanh nhôm được lắp với nhau bằng các ke góc. Nhôm định hình có khối lượng
nhẹ, các gân tăng cứng nên khả năng chịu tải đảm bảo. Nhôm được chọn cho thiết
kế là nhôm định hình 20x20cm.
Hình 3.5:Cơ cấu thu tài liệu được thiết kế trên inventor
Cơ cấu hoạt động khi có tính hiệu từ máy tính và khi cảm biến phát hiện tài liệu
thì động cơ DC dẫn động hai trục quay ngược chiều nhau để cuốn tài liệu vào cơ cấu
phải đảm bảo khi giấy vào không quá nhanh và bị kẹt nên tôi chọn động cơ có tỉ số
truyền là 1: 120 moment 1 Kg.Cm và điện áp là 3-9V.
Hình 3.7: Cơ cấu chuyển đổi ngăn chứa tài liệu được thiết kế trên inventor
Cơ cấu hoạt động khi có tính hiệu từ máy tính cho phép tài liệu chứa ở ngăn nào
thì động cơ xoay một góc phù hợp để thanh gạt lên hoặc xuống để chuyển ngăn. Để
thanh gạt xoay đúng vị trí tôi dùng động cơ bước 28BYJ.
Hình 3.8: Cơ cấu chuyển đổi ngăn chứa tài liệu thực tế
3.1.3.4 Cơ cấu mở cửa lấy tài liệu
Hình 3.9: Cơ cấu mở cửa lấy tài liệu thiết kế trên inventor
Cơ cấu hoạt động khi có sự cho phép của máy tính hoặc thẻ RFID chủ thì động
cơ sẽ kéo cửa lên để có thể lấy tài liệu cả hai ngăn. Cơ cấu phải đảm bảo không bị kẹt
cửa và phải kín lúc đóng lại nên tôi chọn hai động cơ bước 28BYJ để kéo cùng lúc
hai bên cửa.
Hình 3.11: Lưu đồ giải thuật điều khiển robot từ giọng nói
Đầu tiên máy tính sẽ nghe và xử lý thông qua chương trình tính toán và đưa ra
ý định để máy tính trả lời khi máy tính phân tích ý định là muốn gửi tài liệu vào ngăn
một thì chương trình sẽ gửi tính hiệu xuống vi điều khiển thông qua giao tiếp UART
làm cơ cấu thu tài liệu hoạt động và đưa tài liệu vào. Tương tự với ngăn một thì cơ
cấu đổi ngăn chuyển cần gạt lên sau đó cơ cấu thu tài liệu hoạt động cuốn tài liệu vào
ngăn hai sau khi cuốn xong thì cần gạt trở lại vị trí ban đầu. Còn muốn mở cửa sau
thì máy tính yêu cầu người dùng nhập tài khoản truy cập mới khởi động cơ cấu mở
cửa.
Robot cần có một mạch điện thành một hệ thống do đó mạch điện robot cần
đảm bảo yêu cầu sau: Đảm bảo đủ công suất cho Robot hoạt động, ổn định và tính
linh hoạt cao trong việc thay thế sử dụng. Để làm được điều đó tôi đã dùng phần mềm
thiết kế mạch điện Altium để thực hiện và Fritzing thực hiện sơ đồ đấu nối dây.
Trong đề tài, Arduino Mega 2560 được dùng làm trung tâm quản lý điều khiển
(Master) nhận tín hiệu điều khiển từ Python thông qua giao tiếp cổng COM và gửi dữ
liệu xuống cho các Slave điều khiển động cơ.
❖ Thông số kỹ thuật:
- Vi điều khiển: ATmega 2560.
- Điện áp hoạt động: 5V.
- Nguồn ngoài (jack tròn DC) 7-9V. Không nên cấp nguồn 12v vì sẽ gây hỏng
IC ổn áp.
- Số chân Digital: 54 ( 15 chân PWM).
- Số chân Analog: 16.
- Giao tiếp UART: 4 bộ Serial.
- Giao tiếp SPI: 1 bộ ( chân 50 đến chân 53) dùng với thư viện SPI của Ardunio.
- Giao tiếp I2C: 1 bộ.
- Ngắt ngoài: 6 chân.
- Bộ nhớ Flash: 256 Kb, 8Kb sử dụng cho Bootloader.
- SRAM: 8 Kb.
RESET: Arduino Mega Mega 2560 có sẵn mạch reset với nút ấn để thiết lập lại
hệ thống và chân này có thể được sử dụng khi kết nối các thiết bị khác để thiết lập lại
bộ điều khiển.
XTAL1, XTAL2: Thạch anh(16Mhz) được kết nối với xung clock cung cấp cho
bộ điều khiển.
AREF: Chân này được dùng khi sử dụng ADC để chuyển đổi tín hiệu với điện
áp tham chiếu bên ngoài mà không muốn sử dụng điện áp tham chiếu nội bộ 1.1V
hoặc 5V.
Các chân Digital (70): Chân số: Từ 0-53 (số) và 0-15 (tương tự) có thể được sử
dụng làm đầu vào hoặc đầu ra cho thiết bị.
Từ 0-15 (analog) có thể được sử dụng như chân đầu vào tương tự cho bộ ADC,
nếu không sử dụng nó hoạt động như chân digital bình thường
Các chân này được sử dụng cho giao tiếp nối tiếp với giao thức SPI để liên lạc
giữa 2 thiết bị trở lên. SPI cho phép bit phải được thiết lập để bắt đầu giao tiếp với
các thiết bị khác.
Chân I2C: Chân 20 cho SDA và 21 cho SCK (Tốc độ 400khz) để cho phép liên
lạc hai dây với các thiết bị khác.
Chân PWM : Chân 2-13 có thể được sử dụng như đầu ra PWM với hàm
analogWrite () để ghi giá trị PWM từ 0-255.
Chân UART: Chân này được sử dụng cho giao tiếp nối tiếp giữa bo mạch với
máy tính hoặc hệ thống khác để chia sẻ và ghi dữ liệu.
❖ Chân ngắt :
- Chân digital: 0, 22, 23, 24, 25, 10, 11 ,12 ,13 ,15 ,14.
- Chân analog: 6 ,7 ,8 ,9, 10, 11, 12, 13 ,14, 15.
- Chân này được sử dụng để ngắt. Để kích hoạt chân ngắt phải cài đặt bật ngắt
toàn cục.
- Chân ngắt phần cứng: Chân 18 - 21,2,3 ngắt phần cứng được sử dụng cho các
ứng dụng ngắt. Ngắt phần cứng phải được bật với tính năng ngắt toàn cục để ngắt
quãng từ các thiết bị khác.
Trong đề tài, Arduino Uno R3 được dùng làm Slave nhận tín hiệu từ Master để
điều khiển động cơ thông qua giao tiếp I2C.
Thông số kỹ thuật:
- Chip: ATmega328P.
- Nguồn cấp: từ 7 đến 12 VDC.
- Dòng max chân 5V: 500 mA.
- Dòng max chân 3.3V: 50 mA.
- Dòng max chân I/O: 30 mA.
- Số chân Digital: 14 chân (Bao 6 chân PWM).
- Các chân Analog: Có 6 chân Analog trên board mạch Arduino Uno được ký
hiệu từ A0 đến A5. Được sử dụng để đo điện áp tương tự trong khoảng từ 0 đến 5V.
- Chân Rx, Tx: Dùng để thực hiện giao tiếp nối tiếp thông qua hai chân 0 (Rx)
và chân 1 (Tx).
- Chân LED: Arduino Uno tích hợp đèn LED kết nối với chân 13. Cung cấp
mức logic HIGH tương ứng ON và LOW tương ứng OFF.
- Chân AREF: Chân này được gọi là tham chiếu tương tự, được sử dụng để cung
cấp điện áp tham chiếu cho các đầu vào tương tự.
- Chân SPI: Được dùng để giao tiếp ngoại vi nối tiếp. Các chân 10 (SS), 11
(MOSI), 12 (MISO), 13 (SCK) cung cấp liên lạc SPI với sự trợ giúp của thư viện SPI.
- Chân ngắt ngoài: Chân 2 và 3 được sử dụng để cung cấp các ngắt ngoài.
- Chân I2C: Dùng để giao tiếp I2C với các thiết bị. Chân A4 (SDA)và A5 (SCL)
được sử dụng cho mục đích này.
3.2.4 Động cơ DC
Thông số kỹ thuật:
Module LM2596 trong hệ thống dùng để giảm áp từ nguồn pin, cấp nguồn cho
Arduino và động cơ.
Module RFID 522 trong hệ thống dùng để kích động cơ để mở cửa sau với thẻ
từ.
Thông số kỹ thuật:
Màn hình ở đây ta sử dụng để thiết kế giao diện điều khiển cho chatbot.
Robot được sử dụng 4 cell pin để cấp nguồn cho toàn bộ hệ thống bao gồm
nguồn cho Arduino, cảm biến và động cơ.
Mô hình được thiết kế hoàn chỉnh với bộ khung chắc chắn và các cơ cấu chuyển
động ổn định.
Mạng nơ-ron nhân tạo (Artificial Neural Network – ANN) là một mô phỏng xử
lý thông tin hay thường được gọi ngắn gọn là mạng nơ-ron, được nghiên cứu dựa trên
hệ thống thần kinh của sinh vật, giống như một bộ não con người để xử lý các thông
tin. ANN bao gồm một số lượng lớn các mối gắn kết để xử lý các yếu tố làm việc
trong mối quan hệ giải quyết vấn đề rõ ràng. ANN được giới thiệu năm 1943 bởi nhà
thần kinh học Warren McCulloch và nhà logic học Walter Pits, hoạt động của nó
giống như hoạt động bộ não của con người, được học hỏi bởi kinh nghiệm thông qua
việc đào tạo, huấn luyện, có khả năng lưu giữ được các tri thức và sử dụng những tri
thức đó trong việc phán đoán các dữ liệu mới, chưa biết (unseen data). Processing
Elements (PE) của ANN gọi là nơ-ron, nhận các dữ liệu vào (inputs) xử lý chúng và
cho ra một kết quả (output) duy nhất. Kết quả xử lý của một nơ-ron có thể làm input
cho các nơ-ron khác.
Kiến trúc chung của một ANN gồm 3 thành phần đó là Input Layer, Hidden
Layer và Output Layer
Trong đó, lớp ẩn (Hidden Layer) gồm các nơ-ron, nhận dữ liệu input từ các
Nơ- ron ở lớp (Layer) trước đó và chuyển đổi các input này cho các lớp xử lý tiếp
theo. Trong một mạng ANN có thể có nhiều Hidden Layer.
Lợi thế lớn nhất của các mạng ANN là khả năng được sử dụng như một cơ chế
xấp xỉ hàm tùy ý mà “học” được từ các dữ liệu quan sát. Tuy nhiên, sử dụng chúng
không đơn giản như vậy, một số các đặc tính và kinh nghiệm khi thiết kế một mạng
nơ-ron ANN.
Phương pháp này là tính toán tỷ lệ chính xác dữ liệu đầu ra (output) từ dữ liệu
đầu vào (input) bằng cách tính toán các trọng số cho mỗi kết nối (connection) từ các
lần lặp lại trong khi “huấn luyện” dữ liệu cho chatbot. Mỗi bước “huấn luyện” dữ liệu
cho chatbot sẽ sửa đổi các trọng số dẫn đến dữ liệu output được xuất ra với độ chính
xác cao.
• Chọn mô hình: Điều này phụ thuộc vào cách trình bày dữ liệu và các ứng
dụng. Mô hình quá phức tạp có xu hướng dẫn đền những thách thức trong quá trình
học.
• Cấu trúc và sự liên kết giữa các nơ-ron.
• Thuật toán học: Có hai vấn đề cần học đối với mỗi mạng ANN, đó là học
tham số của mô hình (parameter learning) và học cấu trúc (structure learning). Học
tham số là thay đổi trọng số của các liên kết giữa các nơ-ron trong một mạng, còn học
cấu trúc là việc điều chỉnh cấu trúc mạng bằng việc thay đổi số lớp ẩn, số nơ-ron mỗi
lớp và cách liên kết giữa chúng. Hai vấn đề này có thể được thực hiện đồng thời hoặc
tách biệt. Nếu các mô hình, hàm chi phí và thuật toán học được lựa chọn một cách
thích hợp, thì mạng ANN sẽ cho kết quả có thể vô cùng mạnh mẽ và hiệu quả.
Hình 4.2: Quá trình xử lý thông tin của một mạng nơ-ron nhân tạo
Inputs: Mỗi Input tương ứng với 1 đặc trưng của dữ liệu. 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,…
Output: 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 hoặc
no.
Connection Weights (Trọng số liên kết) : Đây là thành phần rất quan trọng của
một ANN, nó thể hiện mức độ quan trọng, độ mạnh của dữ liệu đầu vào đối với quá
trình xử lý thông tin chuyển đổi dữ liệu từ Layer này sang layer khác. Quá trình học
của ANN thực ra là quá trình điều chỉnh các trọng số Weight của các dữ liệu đầu vào
để có được kết quả mong muốn.
Summation Function (Hàm tổng): Tính tổng trọng số của tất cả các input được
đưa vào mỗi Nơ-ron. Hàm tổng của một Nơ-ron đối với n input được tính theo công
thức sau:
𝑛
𝑌 = ∑ 𝑋𝑖 𝑊𝑖 ( 4.1 )
𝑖=1
Transfer Function (Hàm chuyển đổi): Hàm tổng của một nơ-ron cho biết khả
năng kích hoạt của nơ-ron đó còn gọi là kích hoạt bên trong. Các nơ-ron này có thể
sinh ra một output hoặc không trong mạng ANN, nói cách khác rằng có thể output
của 1 Nơ-ron có thể được chuyển đến layer tiếp trong mạng Nơ-ron theo hoặc không.
Mối quan hệ giữa hàm tổng và kết quả output được thể hiện bằng hàm chuyển đổi.
Việc lựa chọn hàm chuyển đổi có tác động lớn đến kết quả đầu ra của mạng
ANN. Hàm chuyển đổi phi tuyến được sử dụng phổ biến trong mạng ANN là sigmoid
hoặc tanh.
1
𝑓 (𝑠 ) = ≜ 𝜎 (𝑠 ) ( 4.2 )
1 + 𝑒 −𝑠
𝑒 𝑠 − 𝑒 −𝑠
tanh(𝑠) = 𝑠 ( 4.3 )
𝑒 + 𝑒 −𝑠
Trong đó, hàm tanh là phiên bản thay đổi tỉ lệ của sigmoid , tức là khoảng giá
trị đầu ra của hàm chuyển đổi thuộc khoảng [-1, 1] thay vì [0,1] của Sigmoid nên
chúng còn gọi là hàm chuẩn hóa (Normalized Function).
Kết quả xử lý tại các nơ-ron (Output) đôi khi rất lớn, vì vậy hàm chuyển đổi
được sử dụng để xử lý output này trước khi chuyển đến layer tiếp theo. Đôi khi thay
vì sử dụng Transfer Function người ta sử dụng giá trị ngưỡng (Threshold value) để
kiểm soát các output của các neuron tại một layer nào đó trước khi chuyển các output
này đến các Layer tiếp theo. Nếu output của một neuron nào đó nhỏ hơn Threshold
thì nó sẻ không được chuyển đến Layer tiếp theo.
Mạng nơ-ron của chúng ta dự đoán dựa trên lan truyền thẳng (forward
propagation) là các phép nhân ma trận cùng với activation function để thu được kết
quả đầu ra. Nếu input x là vector 2 chiều thì ta có thể tính kết quả dự đoán 𝑦̂ bằng
công thức :
𝑧1 = 𝑥𝑊1 + 𝑏1
𝑎1 = tanh (𝑧1 )
𝑧2 = 𝑎1 𝑊1 + 𝑏2
𝑎2 = 𝑦̂ = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥(𝑧2 )
Trong đó, 𝑧𝑖 là input của layer thứ 𝑖, 𝑎𝑖 là output của layer thứ 𝑖 sau khi áp dụng
activation function. 𝑊1 , 𝑏1 , 𝑊2 , 𝑏2 là các tham số (parameters) cần tìm của mô hình
mạng nơ-ron. Huấn luyện để tìm các tham số cho mô hình tương đương với việc tìm
các tham số 𝑊1 , 𝑏1 , 𝑊2 , 𝑏2 sao cho hàm lỗi của mô hình đạt được là thấp nhất. Ta
gọi hàm lỗi của mô hình là loss function. Đối với softmax function, ta dùng
crossentropy loss (còn gọi là negative log likelihood). Nếu ta có N ví dụ dữ liệu huấn
luyện, và C nhóm phân lớp, khi đó hàm lỗi giữa giá trị dự đoán 𝑦̂ và 𝑦 được tính:
1
𝐿(𝑦, 𝑦̂) = − ∑ ∑ 𝑦𝑛,𝑖 𝑙𝑜𝑔𝑦̂𝑛,𝑖 ( 4.4 )
𝑁
𝑛∈𝑁 𝑖∈𝑁
Ý nghĩa công thức trên nghĩa là: lấy tổng trên toàn bộ tập huấn luyện và cộng
dồn vào hàm loss nếu kết quả phân lớp sai. Độ dị biệt giữa hai giá trị 𝑦̂ và 𝑦 càng lớn
thì độ lỗi càng cao. Mục tiêu của chúng ta là tối thiểu hóa hàm lỗi này. Ta có thể sử
dụng phương pháp gradient descent để tối tiểu hóa hàm lỗi. Có hai loại gradient
descent, một loại với fixed learning rate được gọi là batch gradient descent, loại còn
lại có learning rate thay đổi theo quá trình huấn luyện được gọi là SGD (stochastic
gradient descent) hay minibatch gradient descent.
Gradient descent cần các gradient là các vector có được bằng cách lấy đạo hàm
𝜕𝐿 𝜕𝐿 𝜕𝐿 𝜕𝐿
của loss function theo từng tham số , , , để tính các gradient này, ta sử
𝜕𝑊1 𝜕𝑏1 𝜕𝑊2 𝜕𝑏2
dụng thuật toán lan truyền ngược (backpropagation). Đây là cách hiệu quả để tính
gradient khởi điểm từ output layer.
𝜕3 = 𝑦 − 𝑦̂
𝜕2 = (1 − 𝑡𝑎𝑛ℎ2 𝑧1 ) ∗ 𝜕3 𝑊2𝑇
𝜕𝐿
= 𝑎1𝑇 𝛿3
𝜕𝑊2
𝜕𝐿
= 𝛿3
𝜕𝑏2
𝜕𝐿
= 𝑥 𝑇 𝛿2
𝜕𝑊1
𝜕𝐿
= 𝛿2
𝜕𝑏1
JSON là từ viết tắt của ký hiệu đối tượng JavaScript. Python có gói tích hợp có
tên ‘json’ để hỗ trợ làm việc với JSON trong Python. JSON về cơ bản được sử dụng
để mã hóa và giải mã dữ liệu. Quá trình mã hóa dữ liệu JSON được gọi là tuần tự hóa
vì nó liên quan đến việc chuyển đổi dữ liệu thành một chuỗi byte có thể được lưu trữ
và truyền giữa các máy chủ và ứng dụng web. Vì tuần tự hóa là mã hóa dữ liệu, chúng
ta có thể đoán thuật ngữ được sử dụng để giải mã.
Ví dụ: JSON được cho là có thể đọc được bởi bất kỳ ai sử dụng ngôn ngữ kiểu
C và Python là ngôn ngữ kiểu C.
Python đi kèm với gói tích hợp được gọi là json, thư viện này cung cấp cho
chúng ta những công cụ để làm việc cũng như để mã hóa và giải mã dữ liệu JSON.
Quá trình mã hóa JSON thường được gọi là tuần tự hóa . Thuật ngữ này đề cập
đến việc chuyển đổi dữ liệu thành một chuỗi byte (do đó nối tiếp ) sẽ được lưu trữ
hoặc truyền qua mạng
Các đối tượng Python được dịch sang JSON theo một chuyển đổi khá trực quan.
Bảng 4.2: Các đối tượng Python sau khi được dịch sang Python
Python JSON
dict object
str string
Nhận dạng giọng nói, như tên cho thấy, đề cập đến việc nhận dạng tự động
giọng nói của con người. Nhận dạng giọng nói là một trong những nhiệm vụ quan
trọng nhất trong lĩnh vực tương tác với máy tính của con người. Nếu bạn đã từng
tương tác với Alexa hoặc đã từng ra lệnh cho Siri hoàn thành một nhiệm vụ, bạn đã
trải nghiệm sức mạnh của nhận dạng giọng nói.
Nhận dạng giọng nói có nhiều ứng dụng khác nhau, từ phiên âm tự động dữ liệu
giọng nói (như thư thoại) đến tương tác với rô bốt qua giọng nói.
Thực hiện lệnh sau để cài đặt thư viện:pip install SpeechRecognition
Để sử dụng micrô, chúng tôi cũng sẽ phải cài đặt mô-đun pyaudio(pip install
PyAudio). Chúng tôi sử dụng lớp micrô để lấy lời nói đầu vào từ micrô thay vì bất kỳ
phương thức nhập nào khác như tệp âm thanh.
Đối với hầu hết các dự án, chúng tôi có thể sử dụng micrô mặc định. Nhưng nếu
bạn không muốn sử dụng micrô mặc định, bạn có thể lấy danh sách tên micrô bằng
phương thức list_microphone_names.
Để nắm bắt đầu vào từ micrô, chúng tôi sử dụng phương pháp nghe:
import speechrecognition as sr
r = sr.Recognizer()
audio = sr.listen(source)
NLTK là một nền tảng hàng đầu để xây dựng các chương trình Python để làm
việc với dữ liệu ngôn ngữ của con người. Nó cung cấp các giao diện dễ sử dụng cho
hơn 50 tài nguyên ngữ liệu và từ vựng như Mạng từ, cùng với một bộ thư viện xử lý
văn bản để phân loại, mã hóa, tạo gốc, gắn thẻ, phân tích cú pháp và lập luận ngữ
nghĩa, trình bao bọc cho các thư viện NLP công nghiệp, và một diễn đàn thảo luận
tích cực .
Nhờ hướng dẫn thực hành giới thiệu các nguyên tắc cơ bản về lập trình cùng
với các chủ đề trong ngôn ngữ học tính toán, cùng với tài liệu API toàn diện, NLTK
phù hợp với các nhà ngôn ngữ học, kỹ sư, sinh viên, nhà giáo dục, nhà nghiên cứu và
người dùng trong ngành. NLTK có sẵn cho Windows, Mac OS X và Linux. Hơn hết,
NLTK là một dự án miễn phí, mã nguồn mở, hướng tới cộng đồng.
NLTK đã được gọi là “một công cụ tuyệt vời để giảng dạy và làm việc trong
ngôn ngữ học tính toán sử dụng Python” và “một thư viện tuyệt vời để chơi với ngôn
ngữ tự nhiên.”
Xử lý ngôn ngữ tự nhiên với Python cung cấp giới thiệu thực tế về lập trình để
xử lý ngôn ngữ. Được viết bởi những người tạo ra NLTK, nó hướng dẫn người đọc
các nguyên tắc cơ bản của việc viết chương trình Python, làm việc với kho ngữ liệu,
phân loại văn bản, phân tích cấu trúc ngôn ngữ và hơn thế nữa. Phiên bản trực tuyến
của cuốn sách đã được cập nhật cho Python 3 và NLTK 3.
Thực hiện lệnh sau để cài đặt thư viện: pip install nltk
Numpy (Numeric Python): là một thư viện toán học phổ biến và mạnh mẽ của
Python. Cho phép làm việc hiệu quả với ma trận và mảng, đặc biệt là dữ liệu ma trận
và mảng lớn với tốc độ xử lý nhanh hơn nhiều lần khi chỉ sử dụng “core Python” đơn
thuần.
NumPy được phát triển bởi Jim Hugunin. Phiên bản ban đầu là Numarray được
phát triển, có một số chức năng bổ sung. Năm 2005, Travis Oliphant đã tạo ra gói
NumPy bằng cách kết hợp các tính năng của Numarray và gói Numeric.
Sử dụng NumPy, lập trình viên có thể thực hiện các thao tác sau:
Thực hiện lệnh sau để cài đặt thư viện: pip install numpy
Python cung cấp mô-đun Openpyxl, được sử dụng để xử lý các tệp Excel mà
không liên quan đến phần mềm ứng dụng Microsoft của bên thứ ba. Bằng cách sử
dụng mô-đun này, chúng ta có thể kiểm soát excel mà không cần mở ứng dụng. Nó
được sử dụng để thực hiện các tác vụ excel như đọc dữ liệu từ tệp excel, hoặc ghi dữ
liệu vào tệp excel, vẽ một số biểu đồ, truy cập trang tính excel, đổi tên trang tính, sửa
đổi (thêm và xóa) trong trang tính excel, định dạng, tạo kiểu trong trang tính và bất
kỳ nhiệm vụ nào khác. Openpyxl rất hiệu quả để thực hiện các tác vụ này cho bạn.
Các nhà khoa học dữ liệu thường sử dụng Openpyxl để thực hiện các hoạt động
khác nhau như sao chép dữ liệu để khai thác dữ liệu cũng như phân tích dữ liệu.
Thư viện Openpyxl được sử dụng để ghi hoặc đọc dữ liệu trong tệp excel và
nhiều tác vụ khác. Tệp excel mà chúng tôi sử dụng cho hoạt động được gọi là
Workbook chứa tối thiểu một Trang tính và tối đa là hàng chục trang tính.
• Trang tính bao gồm Hàng (chuỗi ngang) bắt đầu từ 1 và Cột (chuỗi dọc) bắt
đầu từ A.
• Hàng và cột cùng nhau tạo thành một lưới và tạo thành một ô có thể lưu trữ
một số dữ liệu. Dữ liệu có thể thuộc bất kỳ kiểu nào, chẳng hạn như số, chuỗi.
• Openpyxl cung cấp tính linh hoạt để đọc dữ liệu từ ô riêng lẻ hoặc ghi dữ liệu
vào ô đó.
4.2.5.3 Đọc, ghi dữ liệu vào Excel
Chúng ta có thể đọc dữ liệu mà chúng ta đã ghi trước đó trong ô. Có hai phương
pháp để đọc một ô, thứ nhất chúng ta có thể truy cập nó bằng tên ô và thứ hai, chúng
ta có thể truy cập nó bằng hàm cell().Ghi dữ liệu vào Excel
Chúng ta có thể thêm dữ liệu vào tệp excel bằng cách sử dụng mã Python sau.
Đầu tiên, chúng ta sẽ nhập hàm load_workbook từ mô-đun openpyxl , sau đó tạo đối
tượng của tệp và chuyển đường dẫn tệp làm đối số. Hãy xem xét đoạn code sau:
wb = load_workbook(r'C:\Users\DEVANSH SHARMA\Desktop\demo.xlsx')
sheet = wb.active
sheet.cell(row=2, column=2).value = 5
wb.save(r'C:\Users\DEVANSH SHARMA\Desktop\demo.xlsx')
Đầu ra:
Hình 4.4: Dữ liệu Excel sau khi được ghi bởi Openpyxl
4.2.5.4 Thư viện chuyển văn bản thành giọng nói python
❖ pyttsx3 đọc tiếng anh
Chuyển văn bản thành giọng nói là quá trình tạo ra giọng nói từ văn bản ngôn
ngữ bình thường. Ở đây trong bài đăng này, tôi sẽ giới thiệu với bạn về mô-đun
pyttsx3 , một trong những thư viện python tốt nhất để chuyển đổi văn bản thành giọng
nói. Phần tốt nhất về thư viện này là nó hoàn toàn ngoại tuyến, vì vậy bạn không cần
phải có kết nối internet đang hoạt động để thư viện này hoạt động.
Để cài đặt thư viện này, bạn cần nhập lệnh sau vào thiết bị đầu cuối của mình.
Bây giờ chúng ta đã sẵn sàng để bắt đầu làm việc với thư viện này.
Đầu tiên, bạn cần nhập và khởi tạo pyttsx3. Tên biến là engine vì vậy nó sẽ được
sử dụng trong toàn bộ mã để thiết lập tất cả các loại thuộc tính.
import pyttsx3
engine = pyttsx3.init()
Bây giờ, chúng ta chỉ cần sử dụng hàm và chuyển bất kỳ văn bản nào làm đối
số.
engine.say("Hello Master!")
engine.runAndWait()
Khi bạn thực thi mã, Bạn sẽ nghe thấy một giọng nói "Xin chào Chủ nhân!".
Bạn có thể nhận thấy rằng giọng nói hiện tại là nam. Điều gì sẽ xảy ra nếu chúng
ta muốn thay đổi kiểu giọng nói thành nữ? Đối với điều đó, chúng tôi sẽ sử dụng
getPropery phương pháp để tìm nạp danh sách tất cả các giọng nói. Sau đó, chúng tôi
sẽ sử dụng setProperty phương pháp để thay đổi giọng nói thành nữ.
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[1].id)
engine.say("Hi, I am a female!")
engine.runAndWait()
Giả sử rằng bạn thích một bài phát biểu có tốc độ nhanh hơn nhiều. Bạn có thể
dễ dàng sử dụng thuộc tính tỷ lệ để sửa đổi tốc độ giọng nói.
rate = engine.getProperty('rate')
engine.setProperty('rate', rate+50)
engine.runAndWait()
Bây giờ bạn sẽ nhận thấy rằng bài phát biểu được nói có tốc độ nhanh hơn nhiều.
Đọc được tiếng việt thì ta bắt buộc phải dùng thư viện của Google hỗ trợ vì rất
ít thư viện có thể chuyển được đầu ra thành tiếng việt.
Để cài đặt thư viện này, bạn cần nhập lệnh sau pip install gTTS.
import playsound
output.save("output.mp3")
playsound.playsound('output.mp3', True)
PyTorch là 1 thư viện Python-based hỗ trợ tạo ra các Deep Learning models và
sử dụng chúng cho các ứng dụng khác nhau. Trên thực tế, PyTorch không chỉ là 1
thư viện Deep Learning, mà chính là 1 package về tính toán khoa học (scientific
computing).
PyTorch, tương tự như Python, nó được thiết kế tập trung vào tính dễ sử dụng
và thậm chí người dùng có kiến thức lập trình rất cơ bản cũng có thể sử dụng nó trong
các dự án có liên quan đến Deep Learning.
Cấu trúc dữ liệu cốt lõi được sử dụng trong PyTorch là Tensor. Tương tự numpy
array, Tensor là 1 mảng n-chiều với các phần tử có cùng kiểu dữ liệu.
Để cài đặt thư viện này, bạn cần nhập lệnh sau pip install torch.
Xem xét pipeline cơ bản của 1 dự án PyTorch. Hình dưới đây mô tả một quy
trình công việc điển hình cùng với các modules quan trọng được liên kết với mỗi
bước.
Đây luôn là một trong những bước đầu tiên trong bất kì một project về Deep
Learning nào. Vì thế PyTorch đã hỗ trợ các tiện ích để thực hiện bước này với module
torch.utils.data.
• Dataset được xây dựng trên nền kiểu dữ liệu Tensor và được sử dụng chủ yếu
cho các bộ dữ liệu tùy chỉnh.
• DataLoader được sử dụng khi bạn có một tập dữ liệu lớn và bạn muốn tải dữ
liệu từ Dataset ở chế độ nền để nó sẵn sàng và chờ sử dụng cho quá trình training
loop.
Module torch.nn được sử dụng để tạo Neural Network. Nó cung cấp tất cả các
Neural Network layers phổ biến như các fully connected layers, convolutional layers,
các hàm activation và hàm loss, v.v.
Một khi kiến trúc mạng đã được tạo ra và dữ liệu đã sẵn sàng để được feed cho
mạng, chúng ta sẽ cần các kỹ thuật để cập nhật các trọng số (weights) và độ lệch
(biases) để mạng tiến hành quá trình learning. Các tiện ích này được cung cấp trong
module torch.optim. Còn để tính gradient tự động, chúng ta sử dụng module
torch.autograd.
Sau khi model đã được train, nó có thể được sử dụng để dự đoán output cho các
test cases hoặc thậm chí các datasets mới. Quá trình này được gọi là model inference.
PyTorch cũng cung cấp TorchScript có thể được sử dụng để chạy các model
độc lập với Python runtime. Đây có thể được coi là một Máy ảo được thiết kế chủ
yếu dành riêng cho việc thao tác với Tensors.
Chúng ta cũng có thể convert model được train bằng PyTorch sang các định
dạng như ONNX, cho phép bạn sử dụng các model này trong các Deep Learning
framework khác như MXNet, CNTK, Caffe2. Bạn cũng có thể chuyển đổi các model
ONNX sang TensorFlow.
Các Widget của Tkinter trong Python: Có nhiều widget khác nhau như button,
canvas, checkbutton, entry, ... chúng được sử dụng để xây dụng các ứng dụng GUI
trong Python.
STT Button Mô tả
Phương thức pack() được sử dụng để tổ chức widget theo khối. Vị trí các widget
được thêm vào ứng dụng python bằng phương thức pack() có thể được kiểm soát
bằng cách sử dụng các tùy chọn khác nhau được chỉ định trong lệnh gọi phương thức.
Trình quản lý layout grid() sắp xếp các widget ở dạng bảng. Chúng ta có thể chỉ
định các hàng và cột. Chúng ta cũng có thể chỉ định khoảng cột (chiều rộng) hoặc
chiều dài hàng (chiều cao) của widget con.
Trình quản lý layout place() sắp xếp các widget theo các tọa độ x và y.
Chương trình chatbot được viết bằng ngôn ngữ Python kết hợp với việc sử dụng
thư viện Pytorch và một số thư viện hỗ trợ khác có mục đích nghe câu hỏi để trả lời,
phân tích và lưu trữ dữ liệu người dùng. Tăng khả năng tác với người dùng trực quan
và hiệu quả. Để đạt được những mục tiêu đó, chương trình cần phải giải quyết được
các nội dung sau:
Chatbot được xây dựng dựa trên mô hình phân loại ý định.
Để dữ liệu huấn luyện dể dàng kiểm soát và truy xuất ta thêm tất cả dữ liệu ý
định mà ta muốn huấn luyện vào file json .
Để tạo dữ liệu huấn luyện ta cần tạo nhiều gói từ và mỗi gói từ đại diện cho một
ý định và phải tuân theo ba thứ:
Thứ 1: Tên ý định (tag). Để máy tính có thể hiểu, trích xuất, phân biệt được dữ
liệu ta cần đặt tên cho từng ý định nó giống như một nhãn mác hàng hóa, mỗi tên ý
định phải khác nhau để máy tính không bị nhầm lẫn
Thứ 2: Câu hỏi đầu vào (patterns). Là những câu hỏi mà ta muốn máy tính học
được, để tránh trường hợp máy tính không hiểu ta tạo thêm nhiều câu hỏi theo nhiều
cách diễn đạt khác nhau.
Thứ 3: Câu phản hồi đầu ra (responses). Là những câu trả lời mà chúng ta muốn
máy tính phản hồi. Để tăng thêm phong phú câu trả lời ta nên thêm nhiều câu trả lời
cùng nội dung.
Vì bước tiền xử lý đóng vai trò quan trọng trong hệ thống chatbot. Nếu tiền xử
lý làm sạch và chuẩn hóa tốt dữ liệu đầu vào thì sẽ làm tăng khả độ chính xác cũng
như độ thông minh của chatbot.
Để tách được từ trong một câu tôi sử dụng thư viện nltk trên python.
Ví dụ: để tách câu “What are you doing?” ta thực hiện lệnh như hình().
Sau khi tách câu ta chuyển các từ về nguyên mẫu và chuyển chữ hoa thành chữ
thường bằng cách dùng thư viện nltk trên python
Có nhiều cách khác nhau có thể đưa dữ liệu văn bản thành dữ liệu dạng số:
+ Word2Vec
+ One-hot Encoding
+ Bag of Words
+ ….
Ở đây tôi sử dụng Bag of Words(BoW) để giải quyết vấn đề này vì lượng dữ
liệu hiện tại còn ít, đơn giản, dễ dàng cài đặt.
BoW hoạt động bằng cách đếm số lần xuất hiện của mỗi từ trong văn bản.
Tiền xử lý văn bản này, ta có danh sách các từ được sử dụng, được gọi là từ điển
để từ điển gọn gàng ta có thể xóa bỏ những từ trùng lặp thì ta có từ điển sáu từ như
sau:
["are", "what","your","you","name","how"]
Vậy với mỗi văn bản tạo ra một vector đặc trưng với chiều dài bằng sáu, mỗi
phần tử đại diện cho số từ tương ứng xuất hiện trong văn bản đó.
1. [0. 1. 1. 0. 1. 0.]
2. [1. 0. 0. 1. 0. 1.]
Để biểu diễn trên python ta dùng thư viện numpy để tạo được vector từ
Pha huấn luyện dữ liệu là pha mấu chốt, quan trọng nhất trong xây dựng mô
hình chatbot. Sau bước tiền xử lý và trích xuất đặc trưng chỉ mang lại tác dụng làm
cho kết quả của mô hình được tốt hơn, thì pha huấn luyện này là pha không thể thiếu.
Ví dụ : Với dữ liệu ở hình 4.14 thì ta có từ điển câu hỏi với 24 từ: ["'s", 'a',
'anyon', 'are', 'bye', 'day', 'good', 'goodby', 'hello', 'help', 'hi', 'how', 'is', 'later', 'lot',
'name', 'see', 'thank', 'that', 'the', 'there', 'what', 'you', 'your'] tương ứng với với vector
có chiều dài bằng 24.
Tiếp theo ta xử lý dữ liệu vào bằng thư viện numpy để tính toán và trích xuất
nhất, ta tiến hành tạo mảng ý định thì mảng sẽ là bốn ý định ['goodbye', 'greeting',
'my name', 'thanks'] và tạo mảng xy với x là câu hỏi (patterns) y là ý định (tags) thì
mảng sẽ là [(['Hi'], 'greeting'), (['How', 'are', 'you'], 'greeting'), (['Is', 'anyone', 'there',
'?'], 'greeting'), (['Hello'], 'greeting'), (['Good', 'day'], 'greeting'), (['Bye'], 'goodbye'),
(['See', 'you', 'later'], 'goodbye'), (['Goodbye'], 'goodbye'), (['Thanks'], 'thanks'),
(['Thank', 'you'], 'thanks'), (['That', "'s", 'helpful'], 'thanks'), (['Thanks', 'a', 'lot', '!'],
'thanks'), (['What', 'your', 'name', '?'], 'my name'), (['What', 'is', 'the', 'name'], 'my
name')]. Đễ để nhìn ta xem (bảng 4.4)
Bảng 4.4: Bảng câu hỏi và ý định sau khi tạo mảng
x y
Hi greeting
How are you greeting
Is anyone there? greeting
Hello greeting
Good day greeting
Bye goodbye
See you later goodbye
Goodbye goodbye
Thanks thanks
Thank you thanks
That's helpful thanks
Thanks a lot! thanks
What your name my name
What is the name my name
Tiếp đến là tạo dữ liệu đào tạo:
- Tạo vector dữ liệu của từng câu hỏi (patterns) trên từ điển của từ (all_words)
và đây cũng là dữ liệu đầu vào của huấn luyện mô hình.
- Tạo vector dữ liệu của từng ý định (tags) trên từng câu hỏi.
Tiếp theo là bước huấn luyện với mô hình DeepLearing và mạng Neaural và
được hỗ trợ bởi thư viện Pytorch. Đầu vào với 24 nơ ron tương ứng với vector câu
hỏi đầu ra là 4 nơ ron ứng với 4 ý định và lớp ẩn, bias là lớp sẽ được training
𝑒 𝑧𝑖 ( 4.5 )
𝜎(𝑧)𝑗 = 𝑉ớ𝑖 𝑗 = 1, … , 𝐾
∑𝐾𝑘=1 𝑒 𝑘𝑧
𝑒 −0.2731
𝜎(𝑧)1 = −0.2731 = 0,198217811
𝑒 + 𝑒 0.2611 + 𝑒 −0.1122 + 𝑒 −0.1210
𝑒 0.2611
𝜎(𝑧)2 = = 0,338178372
𝑒 −0.2731 + 𝑒 0.2611 + 𝑒 −0.1122 + 𝑒 −0.1210
𝑒 −0.1122
𝜎(𝑧)3 = −0.2731 = 0,23282183
𝑒 + 𝑒 0.2611 + 𝑒 −0.1122 + 𝑒 −0.1210
𝑒 −0.1210
𝜎(𝑧)4 = −0.2731 = 0,230781987
𝑒 + 𝑒 0.2611 + 𝑒 −0.1122 + 𝑒 −0.1210
𝐷(𝑌̂, 𝑌) = −𝑌𝑙𝑜𝑔𝑌̂
= −1 × log(0.3381779) ≈ 1.08
Với Y là giá trị dự đoán và 𝑌̂ là giá trị tính ra ta được cross entropy gần bằng
1.08
Để cross entropy thấp nhất ta lan truyền ngược nơ ron và cập nhật label và bias
với số lần bằng numEpoch.
Sau khi cập nhật đến khi hết chu kỳ numEpoch và giá trị cross entropy thấp nhất
thì ta lưu lại các dữ liệu lớp ẩn với file .pth
Hình 4.19: Lưu đồ giải thuật phân tích Hình 4.20: Lưu đồ giải thuật phân tích
đầu vào là giọng nói (Tiếng Anh) đầu vào là giọng nói (Tiếng Việt)
Khâu nhận dạng giọng nói tự động là khối đầu vào giúp người dùng tương tác
với trợ lý ảo bằng giọng nói. Các đầu vào là các vector đặc trưng đại diện cho đoạn
nói, được tạo ra bời quá trình tiền xử lý nhanh và trích xuất đặc tính của bài phát biểu.
Thành phần của Automatic Speech Recognition dựa vào sự kết hợp của mô hình
Hidden Markov (HMM) và một mô hình hỗn hợp Gaussian (GMM) hoặc một mạng
nơ-ron sâu (DNN).
HMM xây dựng một cây các trạng thái cho khung lời nói hiện tại sử dụng vector
tính năng đầu vào. GMM hoặc DNN đánh giá xác suất của sự chuyển đổi trạng thái
trong cây, và thuật toán Viterbi sau đó tìm kiếm con đường có nhiều khả năng nhất
dựa trên các điểm này. Đường dẫn có xác suất cao nhất thể hiện kết xuất văn bản cuối
cùng. Điểm GMM đánh giá HMM trạng thái chuyển tiếp bằng cách ánh xạ một vector
đối tượng đầu vào một hệ toạ độ đa chiều và lặp lại điểm số các đặc tính chống lại
mô hình âm thanh được đào tạo. DNN điểm số sử dụng xác suất từ một mạng thần
kinh. Độ sâu của DNN được xác định bởi số lớp ẩn mà số điểm cho một chuyển tiếp
đi qua mạng. Trong luận văn sẽ nghiên cứu chủ yếu về DNN vì nó có độ chính xác
cao hơn.
Bước này giống với tiền xử lý của bước huấn luyện ta tách câu hỏi đầu vào dạng
text thành các từ độc lập để xử lý dữ liệu trước khi trích xuất đặc trưng.
Bước trích xuất đặc trưng trong phân lớp cũng giống trong bước đào tạo. Sau
khi câu hỏi qua tiền xử lý thì dữ liệu sẽ được gán vector từ cho câu với từ điển là dữ
liệu của bước training đã tạo.
Hình 4.27: Sơ đồ khối đầu ra âm thanh Hình 4.28: Sơ đồ khối đầu ra âm thanh
tiếng anh tiếng việt
Sau khi xác định được ý định thì bước tiếp theo là chọn ngẫu nhiên một câu trả
lời rồi chuyển câu trả lời dạng text tiếng anh sang âm thanh với thư viện “pyttsx3” để
người nghe có thể nghe được.
Đối với tiếng việt thì sau khi chọn ngẫu nhiên câu trả lời thì phải tiến hành thêm
bước dịch từ tiếng anh sang tiếng việt bằng thư viện “Translator” rồi mới chuyển sang
âm thanh bằng thư viện “gTTS” hỗ trợ đọc tiếng việt.
Để dễ dàng quản lý ta lưu dữ liệu vào ứng dụng Excel và để lưu được giá trị dữ
liệu từ máy tính về excel ta dùng thư viện openpyxl.
- Nếu người dùng yêu cầu gửi tài liệu cho khoa cơ điện tử (ngăn chứa 1) hoặc
khoa tự động hóa (ngăn chứa 2) thì máy tính sẽ lưu lại lịch sử gửi của người này.
sẽ trả lời, lưu dữ liệu vào excel và gửi tín hiệu xuống vi điều khiển để tiến hành hoạt
động khi xong thì máy tính bắt đầu nghe tiếp tục.
Nút Mechatronic: Khi nhấn máy tính sẽ lưu dữ liệu lên excel truyền dữ liệu
xuống vi điều khiển để tiến hành chạy cơ cấu đưa giấy vào ngăn của cơ điện tử khi
xong thì máy tính bắt đầu nghe tiếp tục.
Nút Automation: Khi nhấn máy tính sẽ lưu dữ liệu lên excel truyền dữ liệu
xuống vi điều khiển để tiến hành chạy cơ cấu đưa giấy vào ngăn của tự động hóa khi
xong thì máy tính bắt đầu nghe tiếp tục.
Nút Setting: Khi nhấn sẽ hiện ra giao diện chuyển ngôn ngữ và đăng nhập, để
vào excel xem dữ liệu hoặc mở cửa sau bắt buộc phải nhập đúng tài khoản được cấp.
Để mô hình mang tính trực quan và tăng khả năng giao tiếp robot với người
dùng thì phải đảm bảo độ cao phù hợp và phải phù hợp với độ tải của động cơ nên độ
cao được tăng thêm 400mm.
❖ RUN: Đầu tiên khi kích hoạt camera sẽ được khởi động tiếp đến sẽ chạy
chương trình xử lý ảnh phát hiện khuôn mặt và bám theo đối tượng, nếu khuôn mặt
trong khung hình đúng trong 5s robot sẽ bắt đầu bám theo và điều chỉnh tọa độ khuôn
mặt vào giữa khung hình, khi vào đúng khung hình chương trình xử lý phát hiện
khuôn mặt kết thúc và chạy chương trình giao tiếp bằng giọng nói.
Robot sẽ nghe bằng micro và xử lý giọng nói dùng mô hình phân loại ý định để
xác định câu trả lời đầu ra nếu không nghe hoặc không xác định được ý định thì robot
sẽ báo không hiểu và lưu câu hỏi không hiểu đó vào excel rồi bắt đầu lặp lại nghe lần
nữa, ngược lại nếu xác định được ý định thì robot sẽ trả lời khi ý định là yêu cầu mở
ngăn một hoặc hai thì sẽ trả lời rồi lưu lại ảnh người gửi, dữ liệu vào excel và gửi tính
hiệu xuống vi điều khiển để tiến hành hoạt động đến khi hoàn tất robot trở lại trạng
thái bắt đầu nghe tiếp tục. Trong trường hợp nếu robot nghe quá 3 lần mà không thấy
phản hồi thì tự động sẽ chuyển sang chế độ đỗ xe ở vị trí đã định.
Sau khi kết thúc cuộc trò chuyện, robot sẽ bắt đầu xoay phải và chạy chương
trình phát hiện màu, đến khi phát hiện được màu đỏ (parking lot), giống như phát
hiện khuôn mặt robot di chuyển và cân chỉnh đối tượng và giữa khung hình, bám đến
vị trí đối tượng, sau khi đến đối tượng robot sẽ xoay 180 độ nhầm mục đích hướng
robot ra ngoài cho tầm camera quan sát, cuối cùng quay lại chương trình xử lý khuôn
mặt.
❖ Mechatronic: Khi kích hoạt chương trình sẽ lưu ảnh người dùng vào cơ sở dữ
liệu trên excel sau đó truyền dữ liệu xuống vi điều khiển để tiến hành chạy cơ cấu
đưa giấy vào ngăn cơ điện tử khi kết thúc thì robot bắt đầu nghe tiếp tục.
❖ Automation: Tương tự như mechatronic khi kích hoạt máy tính sẽ lưu hình
người gửi và lưu dữ liệu lên excel sau đó truyền dữ liệu xuống vi điều khiển để tiến
hành chạy cơ cấu đưa giấy vào ngăn tự động hóa đến khi kết thúc thì robot bắt đầu
trở lại nghe tiếp tục.
❖ Setting: Khi kích hoạt sẽ hiện ra giao diện chuyển ngôn ngữ và đăng nhập, để
vào excel xem dữ liệu hoặc mở cửa sau, bắt buộc phải nhập đúng tài khoản được cấp.
Slave công việc là chờ và nhận lệnh từ master, trong đó hai slave vẫn tiếp tục
giữ vai trò điều khiển động cơ DC, slave còn lại đảm nhận vai trò mở cổng sau để
người sử dụng lấy giấy tờ trong ngăn, đồng thời tích hợp thêm module RFID trong
việc mở cổng sau.
Mô hình có kích thước 1200x408x430 có chiều cao 1200mm phù hợp với người
dùng tương tác với màn hình điều khiển, và dễ dàng thao tác gửi giấy tờ hành chánh
vào ngăn của robot.
Robot có khối lượng xấp xỉ 9kg bao gồm toàn bộ hệ thống với tốc độ di chuyển
22 vòng/phút để quá trình dò tìm đối tượng ổn định và chính xác.
Mô hình khi kết hợp hoạt động tốt sau nhiều lần thực nghiệm, robot di chuyển
ổn định ít rung lắc, đảm bảo cho tầm nhìn camera quan sát và phát hiện đối tượng
hiệu quả, giao tiếp tốt với người dùng tương tác, các ngăn lấy tài liệu hoạt động tốt
Robot quản lý dữ liệu người sử dụng bao gồm người gửi tài liệu và người quản
lý truy cập vào cửa lấy tài liệu được lưu thông tin vào excel, hình ảnh người gửi được
lưu vào thư mục quản lý như (hình 5.5).
Hình 5.5: Dữ liệu người gửi bao gồm thông tin và ảnh
Với dữ liệu đào tạo hiện tại là 17 ý định và 42 câu hỏi thì sau 1000 quá trình
huấn luyện thì cross entropy là 0.0005
Bảng 6.2: Kết quả phát hiện giọng nói tiếng việt
Số
Stt Câu hỏi Câu trả lời Đúng
lần
Trưởng khoa kỹ Trưởng khoa của khoa kỹ thuật cơ khí
1 30 25
thuật cơ khí là ai là Đỗ Vinh Quan
Giới thiệu về cơ
2 30 Vui lòng xem video để biết thêm 28
điện tử
Giới thệu về Đại
học Kỹ thuật
3 30 Vui lòng xem video để biết thêm 27
Công nghệ Cần
Thơ
Bạn sinh ngày
4 30 Tôi sinh ngày 18/6/2021 26
mấy
Tôi có thể giúp bạn tìm lớp học, giúp
Bạn có thể giúp
5 30 bạn tra cứu số điện thoại của giảng viên 26
gì được cho tôi
....
6 30 Tạm biệt Hẹn gặp lại 24
7 30 Chào Chào Bạn 27
Bạn có thể nói
8 30 tiếng anh được Vâng, nói tiếng Anh bây giờ 24
không
Bảng 6.3: Kết quả phát hiện giọng nói tiếng anh
Số
Stt Câu hỏi Câu trả lời Đúng
lần
Who is the Head
of Mechanical The Dean of the Faculty of Mechanical
1 30 24
Engineering Engineering is Do Vinh Quang
Department
Introduction to
the Faculty of
2 30 Please watch the video to know more 25
Mechanical
Engineering
introducing Can
3 30 Tho University Please watch the video to know more 21
of Technology
4 30 your birthday I was born on June 18, 2021 19
Chương trình xử lý xác định giọng nói và giao tiếp với điều khiển đạt yêu cầu
hoạt động được đề ra, đồng thời đảm bảo được giao tiếp với người nói liên tục.
Giao tiếp giữa máy tính và vi điều khiển nhanh chóng và ổn định.
- Mô hình chatbot đưa giấy tờ vào các ngăn hoạt động đúng như yêu cầu đặt ra.
6.3.2 Các hạn chế của đề tài
- Mô hình chatbot quản lý tài liệu còn bị hạn chế số ngăn và phương thức đóng
mở và lưu trữ khác.
- Hệ thống chương trình xử lý xác định giọng nói đòi hỏi người dùng phải giao
tiếp chuẩn ngôn ngữ tiếng Anh hoặc tiếng Việt.
- Khả năng nghe bị giới hạn bởi tiếng ồn.
- Vì câu trả lời tiếng việt được dịch từ dữ liệu tiếng anh nên có một số từ robot
nói không chuẩn nghĩa.
6.4 Hướng phát triển
- Xây dựng cơ cấu đóng mở, chuyển đổi giữa các ngăn của mô hình chatbot linh
hoạt và hiệu quả hơn.
- Xây dựng mô hình chatbot có nhiều ngăn và ngoài chứa giấy tờ hành chính
còn có thể chứa được các thủ tục khác.
- Tăng khả năng thông minh của chatbot hơn có thể tự đào tạo không cần con
người can thiệp.
- Xử lý tiếng ồn cho chương trình có thể giao tiếp tốt hơn.
- Xây dựng thêm nhiều ngôn ngữ giao tiếp với người dùng.
- Dùng máy tính nhúng thay vì laptop cồng kềnh.
- Kết nối điều khiển với các thiết bị không dây iot.
[1] Nguyễn Văn Quyền (2016), Luận Văn Thạc Sĩ: "Xây Mô Hình Bán Hàng Trên
Internet", Hà Nội.
[2] Nguyễn Hữu Cường (2017), Luận Văn Thạc Sĩ: "Nghiên Cứu Hệ Thống Trợ Lý
Thông Minh Ảo", Hà Nội.
[3] Demuth, H. and M. Beale, 2005. Neural Network Toolbox – User’s Guide®.
MathWorks, Inc.
[5] Đỗ Viết Mạnh (2020), Luận Văn Thạc Sĩ: "Xây dựng Chatbot Bán Hàng Dựa
Trên Mô Hình Sinh", Hà Nội.
[6] Nguyễn Đắc Nam (2017), Luận Văn Thạc Sĩ: "Hệ Thống Tự Động Phân Luồn
Câu Hỏi Và Giải Đáp Yêu Cầu Trực Tuyến", Hà Nội.
[7] Nguyễn Chí Ngôn, Trần Thanh Hùng, Trương Thị Thanh Tuyền, Nguyễn Thái
Nghe (2005), "Ứng Dụng Mạng Nơ-Ron Nhân Tạo Ðể Ðiều Khiển Thiết Bị Bằng
Giọng Nói Tiếng Việt", Tạp Chí Khoa Học Trường Đại Học Cần Thơ, (Số chuyên đề:
Nghiên cứu khoa học,2005:3 96-103)
[8] Nguyen Tan Phu,Nghia Duong-Trung (2020) "Chatbot for University Admission
Services”: Design and Implementation based on Long-short-term Memory Networks"
Hội thảo quốc gia lần thứ XXIII ,Quảng Ninh.
[9] Steven "Steven Bird, Ewan Klein & Edward Loper (2009), Sách: "Natural
Language Processing with Python"", Printed in the United States of America”
[10] Nguyễn Tấn Tiến (2019), Luận Văn Thạc Sĩ: "Nghiên Cứu Và Xây Dựng Chatbot
Hỗ Trợ Người Dùng Trong Ngân Hàng", Hà Nội.
[11] Phan Thanh Toàn (2018), Đồ Án Tốt Nghiệp: "Điều Khiển Xe Robot Bằng Giọng
Nói Với Raspberry pi 3", Tp Hồ Chí Minh.
[13] Vũ Thị Tuyến (2016)., Luận Văn Thạc Sĩ: “Một số mô hình học máy trong phân
loại câu hỏi”, Hà Nội.
[16] Mì AI, "Lập trình giao diện đồ hoạ đa luồng với Tkinter trên
Python",https://www.youtube.com/watch?v=MHva487-DH0.
[17] Patrick (2020), "Chat Bot With PyTorch - NLP And Deep Learning",
https://www.python-engineer.com/posts/chatbot-pytorch/
[19] Tech With Tim, "Python Chat Bot Tutorial - Chatbot with Deep
Learning",https://www.youtube.com/watch?v=PzzHOvpqDYs
PHỤ LỤC
https://drive.google.com/drive/folders/1SvicVinguXFDEhDMt2Ef1LmmvJPo3cBP
?usp=sharing
Mã QR: