AI hoạt động bằng cách sử dụng một lượng lớn dữ liệu đào đạo được đán nhãn, phân tích để tìm ra mối quan hệ đề tìm ra mối quan tương quan giữa các dữ liệu, đồng thời sử dụng các kết quả
Trang 1TRUONG DAI HOC KINH TE THANH PHO
HO CHI MINH
UNIVERSITY
BAO CAO NHOM CUOI KY
PHAN TICH DU LIEU LON TRONG DAU TU VA KINI
Trang 2
Ho va tén
Tran ThGy HiHn
Lé ThI Tuyét Loan
Ha Ngoc Gia Binh
Biên dich và báo cáo L7 đến 17.3
Ung dung chuong17
Biên dịch và báo cáo (18.4 - 18.5) Kết luận
Trang 3ID 0))0 80.0.0000) 0n eeeeceeneeeeeeeeenneeeeeees 16 17.5 HuNn luyện mô hình Encoder-Decoder - 5-2 2 2 22 22 2x 2x nh, 18 IÙ0.(Ề0)0) 0) 0.7) 21 17.7 Trò chuyện với Chatbot . << sa
Chương 18 Mạng Đối Kháng Tạo Sinh Tích Chập Sâu
Inc 9 0 25
18.2 Thidt Lap aD 26
18.2.1 Nap (Load) va Chudn BI Dit Ligue cc ccececcc cece cece cece cece ee ceeeeeeeaeaeneeeeeeeeaeieenes 28 18.3 Tạo Các Mô Hình 2222222232323 21 Họ TK TH TH 30 18.3.1 Bộ Tạo Sinh (GeneratOF) ĐT TT TT nn TT TT TT ng HH Hà HH Hs BH 30 18.3.2 Bộ phân biệt (The Discriminator') - - - - 2< 32 xxx TH Hàng 31
18.4.1 MNt mát của bộ phân biệt (Discriminatfor Ïoss) - S5 5n nen xin xe 33 18.4.2 MNt mát của bộ sinh (Generator Ù0sS) Q2 S0 HH HH nghe xe 33 18.5 Lưu Checkpoint (Save Checkpoinf) - - - - - - 2n Tnhh hen re 34 18.6 Xác đlnh Training Loop - - 5 5à + + xxx Lọ HT TT KH 35 I1 5M 0) 0 1 39
TII:Kết luận 222 S222 S29 SE S553 111321 252121111 212120111 1215010111111 111 1110151101111 51 Hee 46
Trang 4Giới thiệu Python trong ứng dụng AI
I AI là gì? Lập trình AI bằng Python
Trí tuệ nhân tạo - Artificial Intelligence (viét tat: AI) la su mé phéng trí tuệ con người bằng máy móc, đặc biệt là hệ thông máy tính AI hoạt động bằng cách sử dụng một lượng lớn dữ liệu đào đạo được đán nhãn, phân tích để tìm ra mối quan hệ đề tìm ra mối quan tương quan giữa các dữ liệu, đồng thời sử dụng các kết quả này để dự đoán về các trạng thái trong tương lai AI tập trung vào các kỹ
năng như học hỏi, lý luận, tự điều chỉnh, sáng tạo
Ngày nay, AI như một biểu tượng của thời đại AI có thể xử lý một lượng dữ liệu khổng lỗ, cung cấp nhiều hiên biết mới hoặc sâu hơn, các công cụ được phát triển từ AI hoàn thành các công việc nhanh chóng và tương đối ít lỗi AI mang lại nhiều lợi thế trong công việc và đời sống con người như tiết kiệm lao động vả tăng năng suất, giảm thời gian cho các công việc nặng về đữ liệu Một vải ứng dụng của hệ thống AI ngày nay như tự động hoá nhiều quy trình trong công nghệ thông tin, biên soạn nội dung, dự báo và hơn hết là một ứng dụng điển hình của AI: chatbox, speech, NLP va DCGAN
Đề có thê hình thành được một hệ thông AI thì cần các chương trình học sâu (Deep Learning - DL), hoc may (Machine Learning - ML) để học và sử dụng các thuật toán phức tạp, các mạng lưới thân kinh sâu để huấn luyện lặp đi lặp lại một mô hình hoặc mẫu cụ thê Python là một công cụ lập trình dé dàng thực hiện các mô hình DL, ML thông qua các thư viện và framework đa dạng
IÑTIIUIM INTHLIbENÚE
A program that can sense, reason, act, and adapt
MA HINELEARNINb
Algorithms whose performance improve
as they are exposed to more data over time
Wad Hay 10
Subset of machine learning in
ultilayered neural networks learn from
+ Speech: kha nang nghe hiểu và phát âm các âm thanh của con người Khi các thiết bị điện tử như điện thoại, máy tính ngày càng phát triển hon thi Speech trở thành một phần không thể thiếu
Trang 5trong các thiết bị Speech giúp các thiết bị đễ dàng giải đáp các thắc mắc người dùng, hỗ trợ và giải trí cùng người dùng
+ Natural Language Processing (NLP): la mét nhanh eta tri tué nhân tuệ, NLP nghiên cứu về cách máy tính hiểu và xử lý ngôn ngữ của con người khi viết, thông qua đó tiễn hành xử lý các thông tin và trả lời, giải đáp câu hỏi người dùng
- Deep Convolutional Generative Adversarial Network: 14 mét mô hình có chức năng sinh ra các hình ảnh mới từ một bộ dữ liệu đã có DCGAN gồm hai mạng đối nghịch nhau: một mạng sinh (generator) - nhan cac vector nhiễu và tạo ra một hình ảnh giả và một mạng phân biệt (discriminator) -
phân biệt hình ảnh giả Quá trình huấn luyện hướng tới mục tiêu cuối cùng là tạo một hình ảnh giống
thật nhất DCGAN được dùng cho nhiều mục đích như tạo ra hình ảnh những đối tượng chưa từng tồn tại, tăng cường chất lượng hình ảnh (làm rõ mặt ), tạo ra ảnh theo yêu cầu của người dùng
—
Hinh: Mô phỏng các giai đoạn của DCGAN Với các ứng dụng vô cùng thực tế ngày nay, các công cụ kế trên đã khiến đời sống con người ngày càng thuận tiện hơn Đề có thê ứng dụng AI, nhất là các công cụ như chatbox, DCGAN trong công việc, học tập thì cần phải hiểu cách xây dựng, nguyên lý làm việc của các công cụ kế trên Vì lý do đó, nhém chon bién dich va ung dung 2 chuong “Chatbot, Speech, and NLP” va “Deep Convolutional Generative Adversarial Network” trong sach “Artificial Intelligence with Python” cua hai tac gia
“Teik Toe Teoh” va “Zheng Rong”
Chwong 17: Chatbot, Speech, and NLP
- Ung dung chatbox, Speech and NLP
Chatbox, Speech va NLP dang có những ứng dụng quan trọng trong nhiều lĩnh vực khác nhan Chatbox có thê được sử dụng để cung cấp hỗ trợ khách hàng tự động, tư vẫn mua sắm và giải đáp thắc mắc người dùng Speech recognition giúp chuyên đổi giọng nói thành văn bản, hỗ trợ người dùng thực hiện các nhiệm vụ qua giọng nói NLP là yếu tố chính giúp chatbox hiểu và xử lý ngôn ngữ tự nhiên,
từ đó cung cấp trải nghiệm tương tác và thông minh trong giao tiếp người-máy Các ứng dung nay không chỉ tăng cường trải nghiệm người dùng mà còn giúp tối ưu hóa quy trinh làm việc và tạo ra những ứng dụng thông minh đáng giá trong nhiều lĩnh vực, từ thương mại điện tử đến y tế và giáo dục
Dưới đây là một số ứng dụng phố biến của chúng:
e Hỗ trợ Khách hàng: Tích hợp chatbox trên trang web đề hỗ trợ khách hàng trực tuyến Sử
dụng NLP để hiểu và trả lời câu hỏi khách hàng tự nhiên Tích hợp giọng nói để khách hàng có thể
tương tác bằng cách nói thay vỉ gõ
Trang 6e = Tro ly ao va Chatbot: Xay dung tro lý ảo hoặc chatbot sử dụng NLP để hiểu và phản hồi các
câu hỏi và yêu câu Kết hợp giọng nói để người đùng có thể tương tác bằng cách nói
® Ung dung Y 1é: Phát triển ứng dụng giọng nói để ghi âm và chuyên đổi thành văn bản y tế Sử
dung NLP đề phân tích và trích xuất thông tin tir các tải liệu y tê
e_ Giáo dục và Học trực tuyến: Tích hợp chatbox để giải đáp câu hỏi của học viên Sử dụng
giọng nói để cung cấp thông tin và hướng dẫn giảng dạy
® — Du lịch và Đặt phòng: Phát triển chatbot dé hỗ trợ người dùng trong việc đặt phòng khách sạn
hoặc vé máy bay Tích hợp giọng nói đề đưa ra các thông tin chỉ tiết và hướng dẫn
e Ung dụng Giao thông: Sử dụng giọng nói để cung cấp thông tin giao thông và hướng dẫn lái
xe Tích hợp NLP dé hiểu các yêu cầu tìm kiếm về địa điểm và dịch vụ
e _ Tô chức Hội nghị và Sự kiện: Phát triển chatbox đề hỗ trợ đăng ký và cung cấp thông tin về sự
kiện Sử dụng giọng nói để đặt lịch và gửi thông báo
e - Giải trí: Xây dựng trợ lý ảo cho ứng dụng giải trí để thực hiện các nhiệm vụ như đặt vé phim,
tìm kiểm thông tin về diễn viên, Sử đụng giọng nói để điều khiển các chức năng giải trí, như chơi
nhạc, tìm kiểm video
17.1 Speech to Text - Chuyến giọng nói thành văn bản
Khái niệm: Speech to Text - chuyên giọng nói thành văn bản, chính là công nghệ nhận dạng giọng
nói tự động (ASR - Automatic Speech Recognition) Công nghệ này cho phép tự động nhận dạng
giọng nói của người dùng và chuyên đổi nó thành văn bản viết hoặc văn bản điện tử
Khi thực hiện đoạn mã nhận đạng giọng nói, cần cải đặt SpeechRecognition, pipwin và pyaudio
trước
pip install SpeechRecognition
pip install pipwin
pipwin install pyaudio
Tiến hành nhận dạng giọng nói
Bước 1: Nhập thư viện nhận dạng giọng nói và đặt tên ngắn gọn là “sr” để sử dụng trong code
bằng câu lệnh đưới đây Lưu ý nên nhập module sys để có thể sử dụng chức năng của module này
trong các bước tiếp theo Modnle này là một phân của thư viện tiêu chuẩn của Python và cung cấp các
chức năng liên quan đến hệ thống (system) Một trong những chức năng quan trọng của module sys là
quản lý các tham số và tương tác với trình thông dịch Python Sau đó Tạo một đối tượng “Recognizer”
từ thư viện vừa nhập
ĐÐrint("please say something in 4 seconds and wait for 4 seconds
for the answer ")
Trang 7
print ("Accessing Microphone ")
Doan m trén sé in ra man hinh yéu cau ngudi ding noi gi dé trong vong 4 gidy va cho 4 giây để nhận được kết quả Sau đó in ra màn hỉnh “Accessing Mierophone” đề thông báo cho người dùng biết đang truy cập microphone đề thu âm giọng nói
Bước 3: Sử dụng một khối try đề thực hiện các thao tác liên quan đến microphone Trong khéi nay:
@ Mé microphone véi sr.Microphone()
@ Sw dung radjust for ambient noise(source, duration=2) dé diéu chinh độ ồn môi trường trong 2 giây
@® Inra thông điệp "Waiting for you to speak "
® Sử dụng rilisten(source) để lắng nghe giọng nói từ người dùng và lưu trữ vào biển audio
try:
with sr.Microphone() as source:
r.adjust_ for ambient noise(source, duration=2)
AttributeEmor: Xuất hiện khi một đối tượng không có thuộc tính cụ thê được yêu cầu Trong trường hợp này, có thê xảy ra nêu Recognizer hoặc một thuộc tính cần thiết của nó không tồn tại Khi một trong những ngoại lệ này xảy ra, chương trình sẽ in ra thông điệp "Please check installation" dé
7
Trang 8báo cho người dùng biết rằng có vẫn đề với cài đặt, và sau đó, sys.exit(0) duge sir dụng để kết thúc chương trình với mã trạng thái 0, cho biết rằng chương trình đã kết thúc mà không có lỗi (0 thường là
mã trạng thái thành công)
Ngoài ra có thể tiếp tục thực hiện một nhận dạng giọng nói khác bằng cách sử dụng một khối try khác
Vi dụ: Sử dụng một khối try khác đề thực hiện nhận dạng giọng nói bằng dịch vụ nhận đạng giọng
nói của Google
try: print("You said " + r.recognize google (audio) )
Trong khối try, sử dụng phương thức recognize_google của déi tong Recognizer (r) đê chuyén déi
dữ liệu âm thanh (biến audio) thành văn bản bằng cách sử đụng dịch vụ nhận dạng giọng nói của
Google Nêu thành công, thông điệp "You saiđ" sẽ được in ra màn hình, kèm theo văn bản được nhận dạng từ giọng nói
Nếu có lỗi LookupError xảy ra trong quá trình nhận dạng giọng nói, đoạn mã sau except LookupError: sẽ được thực hiện Trong trường hợp này, thông điệp "Could not understand audio" sé được in ra màn hình đề thông báo rằng nội dung của giọng nói không thê được hiệu
17.2 Importing the Packages for Chatbot - Nhập các gói cho Chatbot
Để tiếp tục thực hiện các ví dụ đưới đây, chúng tôi sẽ nhập các gói TensorFlow và Keras Ngoài ra, chúng tôi nhập các mô-đun khác giúp xác định các lớp mô hình
Nhập thư viện NumPy và đặt tên tắt là np NumPy thường được sử dụng cho các phép toán số học trong Python
Trang 9Nhập module pickle, được sử dụng để serialize (ghi thành dạng nhị phân) và deserialize (đọc từ dạng nhị phân) các đối tượng Python Thông thường, nó được sử dụng để lưu trữ và tải các mô hình học máy, giữa những công việc khác
import pickle
Nhập các module cụ thê từ API Keras của TensorFlow:
@ _ laycrs: Cùng cấp nhiều lớp được định nghĩa trước có thê được sử dụng để xây dựng mạng nơ- ron Cac vi dụ bao gồm các lớp Dense, Conv2D, và nhiều lớp khác
@ activations: Chia nhiéu ham kích hoạt khác nhau mà bạn có thê sử dụng trong các lớp của mạng nơ-ron Hàm kích hoạt giúp mô hình học được các mô hình phi tuyến tính
® modcls: Cung cấp một API cấp cao để định nghĩa và huấn luyện các mô hình mạng nơ-ron Bao gồm lớp Sequential (một chuỗi tuyến tính các lớp) và lớp Model cho các kiến trúc mô hình phức tạp hơn
® preprocessing: Bao gồm các tiện ích dé tiền xử lý đữ liệu đầu vào trước khi đưa vào mạng nơ- ron Vi đụ, cung cấp các hàm tiền xử lý văn bản, hàm tiền xử lý hình ảnh, v.v
from tensorflow.keras import layers , activations , models ,
preprocessing
Tóm lại, đoạn mã này thiết lập các thư viện và module cân thiết dé thực hiện học máy sử dụng TensorFlow, với sự tập trung vào API Keras để xây dựng và huấn luyện mô hình mạng nơ-ron Module preprocessing có thê được sử dụng đề tiền xử lý dữ liệu trước khi đưa vào mạng nơ-ron
17.3 Preprocessing the Data for Chatbot - TiHn xử lý dữ liệu cho Chatbot
17.3.1 Download the Data - Tải dữ liệu
17.3.2 Reading the Data from the Ailes - Đọc dữ liệu từ các tập tin
Bước 1: Tiến hành nhập các module
Nhập các module preprocessing và utils từ thư viện Keras của TensorFlow Cac module nay thường được sử dụng đề tiền xử lý dữ liệu và các tiện ích hỗ trợ trong quá trình xây dựng mô hỉnh
from tensorflow.keras import preprocessing , utils |
Nhập module os, mà thường được sử dụng dé tương tác với hệ điều hành, chẳng hạn như đọc hoặc
ghi dữ liệu từ hệ thống tệp tin
import os |
Trang 10Nhập module yaml, mà thường được sử dụng để đọc và ghi các tệp tin dữ liệu theo định dạng YAML Định dạng YAML thường được chọn vì nó đễ đọc và viết cho con người
Bước 3: Khởi tạo danh sách rỗng
questions = list()
answers = list()
Dòng mã này khởi tạo hai danh sách rồng, questions và answers Các danh sách này sẽ được sử
dụng đề lưu trữ câu hỏi và câu trả lời từ tập dữ liệu của chatbot
Bước 4: Sử đụng một vòng lặp dé lặp qua danh sách các tệp tin trong files list, mở mỗi tệp và sử dụng thư viện YAML để load an toàn (saf load) nội dung của từng tệp
Bắt đần một vòng lặp, lặp qua từng tệp trong danh sach files list:
docs = yaml.safe load(stream)
Trang 11
Trích xuât phân nội dung có tên ‘conversations’ tr bién docs va gan cho bién conversations Dua vào tên, có vẻ như 'conversatlons' chứa thông tin về các cuộc trò chuyện trong dữ liệu của chatbot
- _ Xử lý cuộc trò chuyện có độ dài lớn hơn 2: Nếu cuộc trò chuyện có nhiều hơn 2 phần tử, phần
tử đầu tiên được thêm vào đanh sách câu hỏi (questions), và các phần tử còn lại (các câu trả lời) được nói lại với nhau thành một chuỗi và thêm vào danh sách câu trả lời (answers)
if len( con ) > 2
questions.append(con[0] ) replies = con[ 1: ] ans = ''
for rep in replies:
ans += ' ' + rep answers.append( ans )
- _ Xử lý cuộc trỏ chuyện có độ dai tr 1 đến 2: Nếu cuộc trò chuyện có độ dài từ I đến 2 phân tử,
phân tử đầu tiên được thêm vào danh sách câu hỏi (questions), và phần tử thứ hai được thêm vào danh sách câu trả lời (answers)
answers with tags = list()
Trang 12
for i in range( len( answers ) ):
- — Thêm thẻ cho các câu trả lời: Tạo lại danh sách câu trả lai (answers) bang cach thém thé
<STARTT> ở đầu và <END> ở cuối mỗi câu trả lời Kết quả là danh sách answers giờ đây chứa các câu trả lời đã được gắn thẻ
answers = list()
for 1 in range( len( answers with tags ) )
answers.append( '<START> ' + answers with tags[i] + ' <END>' )
tokenizer.fit _on_texts( questions + answers )
VOCAB SIZE = len( tokenizer.word index })+1
17.3.3 Preparing Data for Seq2Seq Model - Chuẩn bI dữ liệu cho mô hình Seq2Seq
Mô hình của chúng tôi yêu cầu ba mảng, cụ thể là eneođer input data, decoder input data, va decoder_output_ data
Trước khi thực hành trên ba mảng, cần tiên hành Import thư viện và khởi tạo danh sách từ vựng (vocab) Import Word2Vec từ thư viện gensim và khởi tạo một danh sách từ vựng trống (vocab) Sau
đó lặp qua từ điển của Tokenizer (trong đoạn mã trước đó) và thêm từng từ vào danh sách từ vựng (vocab) Điều này tạo ra một danh sách các từ duy nhất trong tập đữ liệu của câu hỏi và câu trả lời
Trang 13Hàm bắt đầu lặp qua từng câu trong danh sách câu đầu vảo Biển sentence được chuyên đối thành
chữ thường đề đồng nhất việc xử lý từ vựng Đồng thời loại bỏ các ký tự không phải chữ cái Các ký
tự không phải chữ cái được thay thê bằng khoảng trắng Biểu thức chính quy [^a-zA-Z] tìm kiếm mọi
ký tự không phải là chữ cái (không thuộc khoảng a-z và A-Z) và thay thế chúng bằng khoảng trắng
for sentence in sentences:
sentence = sentence lower() sentence = re.sub( '[^a-zA-Z]', ' ', sentence )
Trang 14- Chuyén đổi câu thành chuỗi số nguyên: Sử dụng phương thức texts to sequences của Tokenizer để chuyên đối danh sách câu hỏi (questions) thành một danh sách các chuỗi số nguyên, trong đó mỗi số nguyên đại điện cho một từ trong từ điển của Tokenizer
- _ Chẻn đệm cho câu hỏi: Sử dụng pad_sequences để chèn đệm các chuỗi số nguyên của câu hỏi
để có chiều dài bằng maxlen questions Phương thức này thêm các giá trị 0 vào cuối chuỗi nêu chiều đài của chuỗi không đủ
padded questions =
preprocessing.sequence.pad sequences( tokenized questions ,
maxlen=maxlen questions , padding='post' )
- Chuyến đổi thành mảng NumPy và in kích thước: Chuyên đổi danh sách chuỗi số nguyên đã chèn đệm thành mảng NumPy (eneođer input_ data) In ra màn hình kích thước của mảng và chiều dai tối đa của câu hỏi
encoder input đata = np.array( padded questions )
Đrint( encoder input đata.shape , maxlen questions )
Tóm lại, đoạn mã này chuyên đôi câu hỏi thành một biểu diễn số nguyên có chiều dải đồng nhất bằng cách chèn đệm và chuẩn bị dữ liệu đầu vào cho mô hình seq2seq Chiều dải tối đa của câu hỏi
được sử dụng để đảm bảo rằng tất cả các chuỗi đều có cùng chiều dai
Thực hiện chuẩn b1 đữ liệu dầu vào trong mô hình seq2seq đối với decoder_input_data: Tuong tw nhu doan ma trudc doi voi encoder_mput_data, nhung chuan bị dữ liệu dau vào đôi với decoder input data ap dung cho cau tra loi (answers) thay vi cau hoi
tokenized answers = tokenizer.texts to sequences( answers )
maxlen answers = max( [ len(x) for x in tokenized answers ] )
padded answers =
preprocessing.sequence.pad sequences( tokenized answers ,
maxlen=maxlen answers , padding='post')
decoder input data = np.array (padded answers)
print (decoder input _data.shape , maxlen answers)
Trang 15
Tương tự như phân xử lý câu hỏi, đoạn mã này chuyên đổi câu trả lời thanh biéu dién sé nguyén cé
chiều dài đồng nhất bằng cách chèn đệm và chuẩn bị dữ liệu đầu vào cho mô hỉnh seq2seq Chiều dài
tối đa của câu trả lời được sử dụng để đảm bảo rằng tất cả các chuỗi đều có cùng chiều đài
Thực hiện chuẫn bI dữ liệu đầu ra trong mô hình seq2seq đối với decoder_ou(pu(_data
- Chuyển đổi câu trả lời thành chuỗi số nguyên: Sử dụng phương thức texts to _sequences của Tokenizer để chuyên đổi danh sách câu trả lời (answers) thành một đanh sách các chuỗi số nguyên, trong đó mỗi số nguyên đại điện cho một từ trong từ điển của Tokenizer
for i in range(len(tokenized answers) )
tokenized_ answers[i] = tokenized answers[i] [1:]
preprocessing.sequence.pad sequences( tokenized answers ,
maxlen=maxlen answers , padding='post' )
- _ Chuyến đổi thành dạng one-hot encoding: Sử đụng to_categorical từ utils dé chuyên đổi chuỗi
số nguyên thành dạng one-hot eneoding Điều này biến đổi mỗi từ thành một vectơ one-hot, trong đó chỉ có một phân tử bằng 1 va phan tử còn lại bằng 0
decoder output_data = np.array( onehot_answers }
print( decoder output_data.shape )
Trang 16
Tóm lại, đoạn mã trên xử lý đữ liệu cho đầu ra của mô hình decoder bằng cách loại bỏ từ đầu tiên, chèn đệm, và chuyên đôi thành dạng one-hot encoding Chiều dài tối đa của câu trả lời được sử dụng
để đảm bảo rằng tất cả các chuỗi đều có cùng chiều dài
17.4 Mô hình Encoder-Decoder
Ứng dụng:
Mô hình Eneoder-Decoder là một kiêu kiến trúc mạng nơ-ron dùng trong các bài toán hồi quy, chuỗi Đặc biệt với thời đại ngày nay, mô hình này còn được phát triển nhằm thực hiện chức năng đối đáp giữa người dùng và các robot, chương trình tự động Mô hình này gồm hai phần chính là encoder - có nhiệm vụ nhận chuỗi đầu vào và mã hoá nó thành một vectơ mã hoá và decoder - có nhiệm vụ nhận vecto mã hoá và giải má nó, sinh ra một chuỗi đầu ra gọi là vectơ giải mã
Mô hình này bao gồm Embedding, LSTM và Dense layer
- Embedding: mét k¥ thuật đứa một vector có số chiều lớn, ở dạng thừa về một vector có số chiều nhỏ, ở dạng dày đặc Chuyển đôi các token vector đề thành các đense vector
- _ L§TM (long-term dependencies): la mét dạng đặc biệt của hồi quy RNN - có khả năng học được các phụ thuộc, các thông tin xa
- Dense Layer: la mét lớp cô điển trong nơ ron nhân tạo Mỗi nơron trong lớp Dense Layer đều
có đầu vào là kết quả từ mọi nơron các lớp trước
Mô hình này gồm:
- 2 lớp đầu vào: mộtencoder input đata và một cho decoder input data
- Các encoder Input data sẽ đưa vao Embedding layer (E.L)
- _ Đâu ra của E.L sẽ dua vao LSTM tao ra 2 state vector (h va c la encoder states)
- Cac states vector duoc dat vao LSTM
- Cac decoder_input data dua vao E.L
- Cac đầu vào từ E.L được đừa vào LSTM để tạo ra các chuỗi
Dưới đây là đoạn code mô tả quy trình trên
`1 Tạo đầu vào với kích thước là maxlen_questions (độ dài tối đa của câu hỏi):
encoder inputs =
tf keras.layers.Input(shape=( maxlen questions , ))
2 Tạo E.L để chuyển số nguyên thành các vector có 200 chiều Tham số mask_zero = True là bỏ qua các giá trị 0 trong đầu vào (0 thường được dùng là các padding (đệm) các câu có độ dài khác nhau)
encoder embedding = tf.keras.layers.Embedding( VOCAB SIZE, 200 , mask zero=True ) (encoder inputs)
3 Tao mét lop LSTM (Long Short-Term Memory) dé xử ly các vector nhúng và trả về đầu ra của
bộ mã hóa, cũng như trạng thái ân và trạng thai ô nhớ của bộ mã hóa Tham số return_state=True có nghĩa là trả về cả trạng thái của bộ mã hóa, không chỉ có đầu ra
Trang 176 Tạo một lớp nhúng cho bộ giải mã, tương tự như bộ mã hóa
decoder embedding = tf.keras.layers.Embedding( VOCAB SIZE,
200 , mask zero=True) (decoder inputs)
9 Tao mét dense layer dé chuyén déi vector đầu ra của bộ giải mã thành xác suất của từng từ trong
bộ từ vựng (vocabulary) Tham số activation=tf.keras.activations.softmax có nghĩa là sử dụng hàm softmax dé tinh xác suất
decoder dense = tf.keras.layers.Dense( VOCAB SIZE ,
Trang 18
activation=tf.keras.activations.softmax ) |
10 Tạo đầu ra của mô hình bằng cách áp dụng lớp kết nối day đủ lên đầu ra của bộ giải mã
12 Biên địch mô hình bằng cách chọn bộ tối ưu héa (optimizer) la RMSprop va ham mat mat (loss
function) la categorical_crossentropy Hàm mắt mát này thường được đùng cho các bài toán phân loại nhiều lớp (multi-class classification), như dự đoán từ tiếp theo trong câu In ra thông tin của mô hỉnh
model.compile(optimizer=tf.keras.optimizers.RMSprop(), loss= ‘categorical crossentropy')
model.summary ()
17.5 HuNn luyện mô hình Encoder-Decoder
Huấn luyện mô hình với các tham số đầu vào với các thông số như các mảng numpy chứa đữ liệu
đầu vào, kích thước mỗi lô đữ liệu, số lần lặp lại toàn bộ đữ liệu trong quá trình huần luận
Lưu mô hỉnh với tên model.h5
model.fit ( [encoder input dđata , decoder input data],
decoder output _data, batch size=50, epochs=150, verbose=0 }
Trang 19
output = model.predict([encoder input data[0,np.newaxis],
decoder input data[0,np.newaxis] ])
output = model.predict([encoder input data[0,np.newaxis],
decoder input data[0,np.newaxis] ])
Trang 20Tao sampled word i, bién nay ding dé gan đữ liệu từ
tokenizer dict[samoled word indez}] Để tạo khoảng cách giữa các từ, ta dùng lệnh: sentence += ' {}'.format( sampled word )
Điều kiện dừng là nếu sampled_ word là end hoặc số lượng từ lớn hơn 74 thì dừng vòng lặp
maxlen answers = 74
for sampled word index in sampled word indexes:
sampled word = None sampled word = tokenizer dict[sampled word index]
sentence += ' {}'.format( sampled word )
if sampled word == 'end' or len(sentence.split()) >
Ở các bước sau ta thực hiện như trên
Dé in ra kết quả của quy trình huấn luyện, ta dùng print đề in ra kết qua tr for - if
Dé in ra kết quả với từ tham số kết quả huân luyện tương ứng, nhập code với
for sampled word index in sampled word indexes:
sampled word = None sampled word = tokenizer dict[sampled word index]
sentence += ' {}'.format( sampled word )
if sampled word == 'end' or len(sentence.split()) >
20
Trang 21maxlen answers:
break print (f"Model prediction: {sentence}")
print train result (4)
print train result (55)
print train result (32)
17.6 Mô hình suy luận
Tạo hàm (def make inference_ models () :), hàm này không có tham s6 dau vao (input parameter) va trả về hai mô hình suy luận (inference models) cho bài toán dịch máy sử dụng kiến trúc
mã hoá - giải mã (encoder-decoder)
def make inference models():
Tạo mô hình mã hoá (encoder model) từ các đầu vào và trạng thái của lớp LSTM mã hoá (encoder
LSTM)
encoder model = tf.keras.models.Model (encoder inputs,
encoder states)
Tạo các đầu vào cho trạng thái ân (hidden state) va trang thai 6 nho (cell state) của lớp LSTM giải
ma (decoder LSTM)
decoder state input_h = tf.keras.layers.Input(shape=( 200 ,))
decoder state input_c = tf.keras layers Input (shape=(
decoder embedding ,
initial state=decoder states inputs)
decoder states = [state _h, state _c]
Tạo các đầu ra cuối cùng của lớp kết nối day di (dense layer) từ các đầu ra của lớp LSTM giải mã
21
Trang 22decoder outputs = decoder dense (decoder outputs)
Tạo mô hình giải mã (đeeoder model) từ các đầu vào và đầu ra của lớp LSTM giải mã và lớp kết
noi day đủ và trả về mô hình encoder model „ decoder model
đẹcoder model = t†.keras.models.Model (
[decoder inputs] + decoder states inputs, [decoder outputs] + decoder states) return encoder model , decoder model
17.7 Trò chuyện với Chatbot
Tao ham str_to tokens véi tham số đầu vào là sentence, kiêu đữ liệu là str
def str to tokens( sentence :; str ):
Chuyến đôi chuỗi đầu vào thành chữ thường và tách thành một danh sách các từ (words) theo
khoảng trắng và tạo một danh sách rỗng tên Lo kens list
for word in words:
tokens list.append( tokenizer.word index[ word ] )
Yetuzn preprocessing.sequence.pad sequences( [tokens list] „
maxlen=maxlen questions , padding='post')
Goi ham make inference models () dé tao ra hai m6 hinh suy luận, một là mô hình mã hoá
(enc model) va mét là mô hình giải mã (dec_mode1) Lặp lại quá trình suy luận 10 lần bằng hàm
for
22
Trang 23Dau tién ta goi ham (str_to_tokens) dé biến câu hỏi thành một dãy số nguyên có độ dài cố định Gọi dự đoán của mô hình mã hoá đề tính toán các hidden states va cell states của lớp LSTM từ dãy số Lưu kết quả vào biến states values
empty target seq = np.zeros( (1, 1) )
empty target _seq[0, 0] = tokenizer.word index['start']
Khởi tạo hai biến (stop condition) va(decoded_translation) Bién
(stop condition) ding kiểm tra quá trình suy luận có kết thúc không, biến
(decoded_trans1aLion) dùng để lưu kết quả của quá trình suy luận, tức là câu trả lời cho câu hỏi Lặp lại quá trình suy luận cho đến khi bién (stop condition) bang True
Goi (dec model predict) véi dau vao la(empty target seq) Ham tra về 3 giá trị là
dén layer, hidden states va cell states của LSTM Lưu các giá trị này lần lượt vào (de c outputs ,
h,c)
Tim chỉ số của gia tri lon nhat trong mang (dec outputs[0, -1, :]}, mảng này chứa các
xác suất của từng từ trong tr dién (tokenizer) Chi s6 nay dai dién cho từ có xác suất cao nhất
được sinh ra bởi mô hình giải mã Lưu chỉ s6 nay vao bién (sampled word index)
while not stop condition
dec_outputs , h, c=
dec model.predict([ empty target _seq ] + states values )
sampled word index = np.argmax( dec outputs[0, -