Module LM393 trong hệ thống giúp phát hiện tài liệu khi đưa vào cửa trước.
3.2.8 Module RFID RC522 Hình 3.24: Module RFID RC522 Thơng số kỹ thuật: - Điện áp: 3.3V - Dòng điện:13-26mA - Dòng điện ở chờ: 10-13mA - Dòng điện ở chế độ nghỉ: <80uA - Tần số hoạt động: 13.56MHz
SVTH: LÊ TRUNG KIÊN 55 - Khoảng cách hoạt động: 0 ~ 60 mm (mifarel card)
- Cổng giao tiếp: SPI
- Tốc độ truyền dữ liệu tối đa 10Мbps - Kích thước: 40мм х 60мм
- Các loại card RFID hỗ trợ: mifare1 S50, mifare1 S70, mifare UltraLight, mifare Pro,mifare Desfire
Module RFID 522 trong hệ thống dùng để kích động cơ để mở cửa sau với thẻ từ. 3.2.9 Màn hình hiển thị và cảm ứng MageDok T116D Thơng số kỹ thuật: - Loại màn hình: A-Si, TFT-LCD - Độ phân giải: 1920 X 1080 - Kích thước: 11,6 inch - Khu vực hoạt động: 256,896 × 144,504 mm - Độ sáng: 300cd / M2 (Typ.) - Tỷ lệ tương phản: 800: 1 (Typ.) - Thời gian phản hồi: 26 (Typ.) (Ms)
- Đầu vào: Nguồn, cảm ứng, HDMI, Jack âm thanh 3,5 mm
SVTH: LÊ TRUNG KIÊN 56 Màn hình ở đây ta sử dụng để thiết kế giao diện điều khiển cho chatbot.
3.2.10 Pin hệ thống
Hình 3.26: Pin Lithium Polymer
Thơng số kỹ thuật:
- Dung lượng :~10000mAh - Điện áp định mức : 3.7 V - Điện áp tối đa : 4.2 V - Điện áp cắt: 2.5 V - Cơng suất : 37Wh - Dịng điện tối đa: 3C - Nội trở : < 40 Ohm
- Nhiệt độ xả: 20 ° C ~ 60 ° C - Chu kỳ nạp xả: >1000 lần
- Kích thước: 18 x 65 x 131 (mm)
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ơ.
SVTH: LÊ TRUNG KIÊN 57
3.3 Mơ hình hồn chỉnh
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.
SVTH: LÊ TRUNG KIÊN 58
CHƯƠNG 4: THIẾT KẾ VÀ XÂY DỰNG GIAO DIỆN CHO
CHATBOT 4.1 Ứng dụng mạng nơ ron nhân tạo vào chatbot
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 đố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.
SVTH: LÊ TRUNG KIÊN 59 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 tố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 tố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 q phức tạp có xu hướng dẫn đền những thách thức trong q trình học.
• Cấu trúc và sự liên kết giữa các nơ-ron.
• Thuật tố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 tố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ả.
SVTH: LÊ TRUNG KIÊN 60
Hình 4.2: Q 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 q 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:
𝑌 = ∑ 𝑋𝑖𝑊𝑖
𝑛
𝑖=1
SVTH: LÊ TRUNG KIÊN 61
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 1 + 𝑒−𝑠 ≜ 𝜎(𝑠) ( 4.2 ) 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ự đốn 𝑦̂ bằng công thức :
SVTH: LÊ TRUNG KIÊN 62 𝑧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ự đố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 tồ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ố 𝜕𝐿
𝜕𝑊1, 𝜕𝐿
𝜕𝑏1, 𝜕𝐿
𝜕𝑊2, 𝜕𝐿
𝜕𝑏2 để tính các gradient này, ta sử 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.
SVTH: LÊ TRUNG KIÊN 63 𝜕3 = 𝑦 − 𝑦̂ 𝜕2 = (1 − 𝑡𝑎𝑛ℎ2𝑧1) ∗ 𝜕3𝑊2𝑇 𝜕𝐿 𝜕𝑊2 = 𝑎1 𝑇𝛿3 𝜕𝐿 𝜕𝑏2 = 𝛿3 𝜕𝐿 𝜕𝑊1 = 𝑥 𝑇𝛿2 𝜕𝐿 𝜕𝑏1 = 𝛿2
4.2 Một số thư viện Python hỗ trợ luận văn 4.2.1 Thư viện json 4.2.1 Thư viện json
4.2.1.1 Giới thiệu
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. Q 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ể đố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.
SVTH: LÊ TRUNG KIÊN 64
Hình 4.3: Ví dụ về json
Như bạn có thể thấy, JSON hỗ trợ các kiểu nguyên thủy, như chuỗi và số, cũng như các danh sách và đối tượng lồng nhau. Nó trơng giống như một từ điển Python.
Python hỗ trợ JSON nguyên bản!
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.
Bảng 4.1: Các phương thức có sẵn trong mơ-đun JSON
Phương thức Miêu tả
dumps() Mã hóa thành các đối tượng JSON dump() Mã hóa chuỗi được ghi trong tệp
loads() Giải mã chuỗi JSON
load() Giải mã trong khi đọc tệp JSON
SVTH: LÊ TRUNG KIÊN 65 Q 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 list, tuple array
str string
int, long,float number
4.2.1.2 Kiểu dữ liệu của Json
Json có 5 kiểu dữ liệu chính
- Number: kiểu số bao gồm số nguyên và số thực.
- String: kiểu chuỗi, nội dung bao bởi cặp dấu nháy kép “, những ký tự đặt biệt được escape bởi dấu .Theo chuẩn JSON thì khơng sử dụng dấu nháy đơn như Javascript để bọc chuỗi.
- Boolean: kiểu luận lý bao gồm 2 giá trị là true và false
- Array: kiểu mảng, gồm các phần tử phân cách nhau bởi dấu phẩy ‘,’ và mảng được bao bởi cặp dấu [ và ].
- Object: kiểu đối tượng, gồm những cặp giá trị đi cùng nhau, mỗi cặp phân cách bởi dấu phẩy’,’, đối tượng được bao bởi cặp dấu { và }, cặp giá trị bao gồm tên và giá trị được phân cách bởi dấu hai chấm’:’.
- Null: giá trị null.
4.2.1.3 Ưu điểm của Json
SVTH: LÊ TRUNG KIÊN 66 - Là kiểu dữ liệu trên nền cơ sở Javascript nên dễ dàng tiếp cận.
- Dữ liệu truyền tải ngắn gọn so với những định dạng dữ liệu khác như: xml, html…
- Dễ dàng chuyển đổi(parse) dữ liệu từ dạng chuỗi (nhận từ server) sang dữ liệu có thể sử dụng được (thành Object, Number, Array)…
- Dễ truy cập nội dung.
- Với những ứng dụng Ajax lấy và xử lý dữ liệu từ một web service nào đó khác domain: Nếu nội dung trả về có dạng xml thì javascript từ trang web của chúng ta không thể trực tiếp truy cập mà phải nhờ một proxy để đáp ứng yêu cầu của same origin policy. Nhưng nếu là dạng JSON thì đó khơng là vấn đề. (Thường dùng lệnh eval).
- Hai công nghệ phổ biến sử dụng JSON là PHP và .NET
4.2.2 Thư viện SpeechRecognition 4.2.2.1 Giới thiệu 4.2.2.1 Giới thiệu
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
4.2.2.2 Nhận đầu vào âm thanh từ micrô
Để 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ỳ
SVTH: LÊ TRUNG KIÊN 67 Đố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()
with sr.Microphone() as source: audio = sr.listen(source)
4.2.3 Thư viện NLU 4.2.3.1 Giới thiệu 4.2.3.1 Giới thiệu
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 tốn, cùng với tài liệu API tồ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.