You are on page 1of 16

1.

Chatbot dựa trên luật (Rule-based Chatbots):


Loại chatbot này hoạt động dựa trên các quy tắc và luật được xác định trước. Chúng
xử lý câu hỏi của người dùng bằng cách so khớp với các quy tắc và trả lời tương ứng.
Việc xây dựng và bảo trì các luật là công việc quan trọng trong loại chatbot này.
Ưu điểm:
- Ưu điểm lớn nhất của chatbot dựa trên luật là tính kiểm soát cao. Bạn có thể định
nghĩa rõ ràng cách chatbot phản hồi trong mỗi trường hợp.
- Dễ dàng triển khai và bảo trì, đặc biệt là cho các ứng dụng có phạm vi hạn chế.
Nhược điểm:
- Hạn chế trong việc xử lý các tình huống phức tạp và không thể dự đoán trước.
- Yêu cầu công sức lớn để xây dựng và duy trì một tập luật lớn.
2. Chatbot dựa trên trình tự (Sequence-based Chatbots):
Loại chatbot này sử dụng mô hình máy học như RNN (Recurrent Neural Networks),
LSTM (Long Short-Term Memory), GRU (Gated Recurrent Unit), hoặc các biến thể
của Transformer để xử lý chuỗi văn bản đầu vào. Chúng có khả năng xử lý các cuộc
trò chuyện phức tạp và tự động học từ dữ liệu.
Ưu điểm:
- Có khả năng xử lý các cuộc trò chuyện phức tạp và đa dạng.
- Có khả năng học từ dữ liệu và cải thiện khả năng tương tác theo thời gian.
Nhược điểm:
- Đòi hỏi tài nguyên tính toán và dữ liệu huấn luyện lớn.
- Không thể làm việc tốt trong các trường hợp yêu cầu kiểm soát chặt chẽ.
3. Chatbot dựa trên Mô hình ngôn ngữ tự nhiên (NLP-based Chatbots):
Loại chatbot này sử dụng các mô hình NLP tiên tiến như GPT (Generative Pre-trained
Transformer) hoặc BERT (Bidirectional Encoder Representations from Transformers)
để hiểu và phản hồi các câu hỏi của người dùng. Chúng có khả năng sinh ra văn bản tự
nhiên và đáp ứng một loạt các yêu cầu phức tạp.
Ưu điểm:
- Có khả năng hiểu và phản hồi tự nhiên hơn, giúp trải nghiệm người dùng tốt hơn.
- Khả năng xử lý các câu hỏi phức tạp và đa dạng.
Nhược điểm:
- Đòi hỏi tài nguyên tính toán và dữ liệu lớn cho việc huấn luyện mô hình.
- Có thể cần sửa đổi hoặc điều chỉnh mô hình để đảm bảo phản hồi đúng và an toàn.
4. Chatbot dựa trên Mô hình Máy học tăng cường (Reinforcement Learning
Chatbots):
Loại chatbot này sử dụng học tăng cường để cải thiện khả năng tương tác với người
dùng. Chúng có khả năng tối ưu hóa hành động dựa trên phản hồi từ người dùng và
môi trường.
Ưu điểm:
- Có khả năng tự động học tối ưu hóa hành động dựa trên phản hồi từ người dùng.
- Có thể phát triển khả năng tương tác và thích nghi với môi trường.
Nhược điểm:
- Yêu cầu môi trường huấn luyện và phản hồi thích hợp.
- Đòi hỏi kiến thức về học tăng cường và điều chỉnh tham số phức tạp.

Tiền xử lý văn bản trong chatbot là quá trình làm sạch và biến đổi dữ liệu văn bản đầu
vào trước khi nó được sử dụng để tạo câu trả lời hoặc xác định hành động của chatbot.
Mục tiêu của tiền xử lý văn bản là làm cho dữ liệu đầu vào dễ dàng để hiểu và xử lý b
ởi chatbot, cải thiện khả năng tương tác và hiệu suất của nó. Dưới đây là một số phần
quan trọng của tiền xử lý văn bản trong chatbot:
Loại bỏ dấu câu và ký tự đặc biệt: Dấu câu và ký tự đặc biệt thường không cần thiết tr
ong quá trình xử lý văn bản và có thể làm nhiễu thông tin. Do đó, thường cần loại bỏ c
húng hoặc thay thế chúng bằng khoảng trắng.
Chuyển đổi về chữ thường: Để đảm bảo tính nhất quán trong việc so sánh và xử lý văn
bản, thường chuyển đổi toàn bộ văn bản đầu vào thành chữ thường.
Loại bỏ từ dừng (stop words): Từ dừng là các từ phổ biến và không mang ý nghĩa đặc
biệt (ví dụ: "và," "là," "một"). Loại bỏ các từ này có thể giảm kích thước của dữ liệu v
à cải thiện hiệu suất xử lý.
Tách từ (tokenization): Quá trình chia dữ liệu văn bản thành các đơn vị nhỏ hơn, thườ
ng là các từ hoặc các từ ngữ. Điều này giúp chatbot hiểu cấu trúc của câu và có thể xử
lý từng phần riêng biệt.
Lemmatization hoặc stemming: Lemmatization là quá trình chuyển đổi các từ về dạng
cơ bản của chúng (ví dụ: "running" thành "run"). Stemming là một phương pháp tươn
g tự nhưng thường thực hiện bằng cách cắt bớt các tiền tố và hậu tố của từ. Điều này g
iúp giảm số lượng biến thể của từ và làm cho việc tìm kiếm và so sánh dễ dàng hơn.
Xử lý đồng nghĩa và từ đồng nghĩa: Để cải thiện khả năng hiểu và tương tác với người
dùng, chatbot có thể được cấu hình để hiểu các từ đồng nghĩa và cách sử dụng chúng t
rong ngữ cảnh.
Loại bỏ ký tự đặc biệt và URL: Đôi khi, dữ liệu đầu vào có thể chứa các ký tự đặc biệt
không cần thiết hoặc đường dẫn URL không liên quan. Loại bỏ chúng giúp làm sạch d
ữ liệu.
Vector hóa (embedding): Trong một số trường hợp, chatbot có thể sử dụng các phương
pháp vector hóa như Word2Vec hoặc FastText để biểu diễn văn bản dưới dạng vectơ s
ố học để dễ dàng xử lý và tìm kiếm thông tin.
Tiền xử lý văn bản là một bước quan trọng để đảm bảo chatbot hoạt động hiệu quả và
hiểu người dùng tốt hơn. Cách tiền xử lý cụ thể có thể thay đổi tùy theo loại chatbot v
à mục tiêu cụ thể của nó.
Sau quá trình tiền xử lý văn bản để làm sạch và biến đổi dữ liệu đầu vào, bước tiếp the
o là xây dựng mô hình chatbot.
Để làm điều này, chúng ta cần xác định rõ luồng làm việc của chatbot và cách nó nên
phản hồi trong mỗi tình huống. Mô hình chatbot có thể sử dụng các kỹ thuật máy học
như RNN, LSTM, GRU, hoặc các mô hình NLP tiên tiến như Transformer (như GPT-
3 và BERT) để hiểu và xử lý ngôn ngữ tự nhiên của người dùng.
Ngoài ra, chatbot cũng phải áp dụng logic quyết định để xác định hành động cụ thể tro
ng các tình huống. Ví dụ, nếu người dùng hỏi về thời tiết, chatbot sẽ sử dụng mô hình
NLP để hiểu câu hỏi, sau đó áp dụng quy tắc để gọi dịch vụ thời tiết và trả lời người d
ùng một cách chính xác.
Cuối cùng, sau khi xây dựng và kiểm tra mô hình, chúng ta triển khai chatbot trên nền
tảng mong muốn và tích hợp nó với các hệ thống khác nếu cần. Quá trình này đòi hỏi
kiến thức rộng về lập trình, máy học, và NLP để tạo ra một chatbot thông minh và hiệ
u quả.
Thư viện tiền xử lý văn bản:

NLTK (Natural Language Toolkit): Cung cấp các công cụ cho việc tách từ, loại bỏ s
top words, phân tích cú pháp, và nhiều công cụ khác để tiền xử lý văn bản.
1. Định nghĩa
Natural Language Toolkit (NLTK) là một thư viện mã nguồn mở của ngôn ngữ
Python, được sử dụng rộng rãi trong lĩnh vực xử lý ngôn ngữ tự nhiên (NLP). Thư
viện này được phát triển bởi một nhóm các nhà nghiên cứu thuộc trường Đại học
Pennsylvania vào những năm đầu của thế kỷ 21 và đã trở thành một trong những
thư viện NLP phổ biến nhất.
NLTK cung cấp một bộ công cụ toàn diện cho việc tiền xử lý, phân tích cú pháp,
rút trích đặc trưng, huấn luyện mô hình, và đánh giá hiệu suất của các ứng dụng xử
lý ngôn ngữ tự nhiên. Nó cũng cung cấp một số dữ liệu ngôn ngữ tự nhiên được sử
dụng để huấn luyện các mô hình xử lý ngôn ngữ tự nhiên.
2. Các tính năng
Tokenization: NLTK cung cấp các công cụ để chia câu và từ trong văn bản thành
các phần tử riêng lẻ, gọi là tokens. Tokenization là một bước quan trọng trong xử
lý ngôn ngữ tự nhiên.
Stop words removal: Stop words là các từ phổ biến như "a", "an", "the", "in",
"on",... có ít ý nghĩa trong xử lý ngôn ngữ tự nhiên. NLTK cung cấp danh sách các
stop words và các công cụ để loại bỏ chúng từ văn bản.
Stemming: Stemming là quá trình chuyển đổi các từ về dạng gốc của chúng. Ví dụ,
các từ "running", "runs", "run" đều được chuyển thành "run". NLTK hỗ trợ nhiều
thuật toán stemming khác nhau.
Part-of-speech tagging: Các từ trong văn bản có thể được phân loại vào các phần
loại từ (part-of-speech) khác nhau, ví dụ như danh từ, động từ, tính từ,... NLTK
cung cấp các công cụ để phân loại các từ vào các phần loại từ này.
Named entity recognition: NLTK cung cấp các công cụ để nhận dạng các thực thể
tên riêng trong văn bản, ví dụ như tên người, địa danh, tên tổ chức,...
Sentiment analysis: NLTK có thể được sử dụng để phân tích cảm xúc trong văn
bản. Các công cụ cho phân tích cảm xúc được xây dựng trên cơ sở dữ liệu từ điển
và các mô hình phân loại dựa trên máy học.
Machine learning: NLTK cung cấp các công cụ để huấn luyện và áp dụng các mô
hình học máy cho các tác vụ xử lý ngôn ngữ tự nhiên.
Corpora: NLTK chứa một số lượng lớn các bộ dữ liệu (corpora) văn bản cho các
mục đích khác nhau, ví dụ như từ điển, văn bản thử nghiệm, dữ liệu huấn luyện mô
hình,...
3. Các công cụ hỗ trợ
Corpus
NLTK cung cấp cho người dùng một tập hợp các tài liệu văn bản có sẵn gọi là
corpus. Corpus là một bộ sưu tập các văn bản cụ thể được sử dụng để huấn luyện
và kiểm tra các mô hình xử lý ngôn ngữ tự nhiên.
Tokenization
Tokenization là quá trình chia các câu hoặc văn bản thành các token (từ hoặc các
đơn vị khác). NLTK cung cấp một số phương pháp tokenization khác nhau như
tokenization dựa trên khoảng trắng, tokenization dựa trên từ điển và tokenization
dựa trên các biểu thức chính quy.
Part-of-Speech tagging
Part-of-Speech (POS) tagging là quá trình gán nhãn cho từng từ trong câu dựa trên
vai trò ngữ pháp của từ đó trong câu. NLTK cung cấp các công cụ để thực hiện
POS tagging bằng nhiều phương pháp khác nhau, bao gồm các phương pháp dựa
trên rule-based và machine learning.
Chunking
Chunking là quá trình tìm kiếm và trích xuất các cụm từ có ý nghĩa khác nhau từ
câu, như các cụm danh từ, cụm động từ, cụm tính từ, v.v. NLTK cung cấp các công
cụ để thực hiện chunking dựa trên các phương pháp như regular expressions và
machine learning.
Named Entity Recognition
Named Entity Recognition (NER) là quá trình trích xuất thông tin về các thực thể có
tên như tên riêng, địa danh, tên tổ chức từ văn bản. NLTK cung cấp các công cụ để
thực hiện NER bằng nhiều phương pháp khác nhau, bao gồm các phương pháp dựa
trên rule-based và machine learning.
spaCy: Một thư viện xử lý ngôn ngữ tự nhiên mạnh mẽ với khả năng tách từ, trích xu
ất thực thể và phân tích cú pháp nhanh chóng.
1. Định Nghĩa
spaCy là thư viện mã nguồn mở miễn phí để xử lý ngôn ngữ tự nhiên (NLP) nâng
cao trong Python.
Nếu bạn đang làm việc với nhiều văn bản, cuối cùng bạn sẽ muốn biết thêm về nó.
Ví dụ, nó nói về cái gì? Những từ này có nghĩa gì trong ngữ cảnh? Ai đang làm gì
với ai? Những công ty và sản phẩm nào được đề cập? Những văn bản nào giống
nhau?
spaCy được thiết kế đặc biệt để sử dụng trong sản xuất và giúp bạn xây dựng các
ứng dụng xử lý và “hiểu” khối lượng lớn văn bản. Nó có thể được sử dụng để xây
dựng hệ thống trích xuất thông tin hoặc hiểu ngôn ngữ tự nhiên hoặc để xử lý
trước văn bản cho việc học sâu.
2. Tính năng
NAME DESCRIPTION
Tokenization Segmenting text into words, punctuations marks etc.
Part-of-speech (POS) Taggin Assigning word types to tokens, like verb or noun.
g
Dependency Parsing Assigning syntactic dependency labels, describing the relations
between individual tokens, like subject or object.
Lemmatization Assigning the base forms of words. For example, the lemma of
“was” is “be”, and the lemma of “rats” is “rat”.
Sentence Boundary Finding and segmenting individual sentences.
Detection (SBD)
Named Entity Labelling named “real-world” objects, like persons, companies or
Recognition (NER) locations.
Entity Linking (EL) Disambiguating textual entities to unique identifiers in a knowledge
base.
Similarity Comparing words, text spans and documents and how similar they
are to each other.
Text Classification Assigning categories or labels to a whole document, or parts of a
document.
Rule-based Matching Finding sequences of tokens based on their texts and linguistic
annotations, similar to regular expressions.
Training Updating and improving a statistical model’s predictions.
Serialization Saving objects to files or byte strings.

3. spaCy’s Processing Pipeline


The first step for a text string, when working with spaCy, is to pass it to an NLP
object. This object is essentially a pipeline of several text pre-processing operations
through which the input text string has to go through.

Source: https://course.spacy.io/chapter3
As you can see in the figure above, the NLP pipeline has multiple components, such
as tokenizer, tagger, parser, ner, etc. So, the input text string has to go through all
these components before we can work on it.
4. Benefits of spaCy
Here are some of the benefits of spaCy:
 Fast and efficient: spaCy được thiết kế để hoạt động nhanh chóng và hiệu quả,
khiến nó trở thành lựa chọn lý tưởng để xử lý khối lượng lớn dữ liệu văn bản.
Các mô hình của nó được tối ưu hóa để chạy trên cả CPU và GPU, cho phép
thời gian xử lý nhanh hơn.
 Easy-to-use API.: spaCy có API trực quan và dễ sử dụng giúp làm việc đơn
giản. Tài liệu của nó cũng toàn diện và thân thiện với người dùng, giúp bạn dễ
dàng bắt đầu với thư viện
 Wide range of NLP capabilities: spaCy cung cấp nhiều khả năng NLP, bao
gồm mã thông báo, gắn thẻ một phần giọng nói, nhận dạng thực thể được đặt
tên, phân tích cú pháp phụ thuộc, v.v. Điều này làm cho nó trở thành một công
cụ mạnh mẽ cho nhiều nhiệm vụ NLP khác nhau.
 Pre-trained models: spaCy cung cấp các mô hình được đào tạo trước cho một
số ngôn ngữ, có thể được tinh chỉnh cho các trường hợp sử dụng cụ thể. Điều
này có thể tiết kiệm thời gian và công sức khi xây dựng các ứng dụng NLP.
 Active development and community: spaCy là một dự án mã nguồn mở có
cộng đồng phát triển tích cực. Điều này có nghĩa là các lỗi được sửa nhanh
chóng, đồng thời các tính năng và mô hình mới thường xuyên được bổ sung.
 Overall, spaCy is a powerful and versatile NLP library that offers a range of
benefits, making it a popular choice for researchers and developers alike.
Trong việc xây dựng một chatbot, bạn có thể tận dụng cả hai thư viện spaCy và
NLTK để đạt được sự kết hợp tốt nhất của tốc độ và tích hợp mô hình NLP mạnh
mẽ cùng với các công cụ xử lý ngôn ngữ tự nhiên phức tạp. Dưới đây là một số
cách bạn có thể sử dụng cả hai thư viện trong chatbot:

1. Sử dụng spaCy cho xử lý cơ bản:


- Sử dụng spaCy để tách từ và phân tích cú pháp văn bản đầu vào của người dùng.
SpaCy sẽ xử lý nhanh chóng và hiệu quả các tác vụ này.
- Sử dụng các mô hình ngôn ngữ của spaCy để nhận diện thực thể, phân tích ý định
(intent), hoặc thậm chí để thực hiện giải quyết dựa trên quy tắc cơ bản.
2. Sử dụng NLTK cho các tác vụ phức tạp:
- NLTK cung cấp nhiều công cụ và tài liệu cho xử lý ngôn ngữ tự nhiên phức tạp.
Bạn có thể sử dụng NLTK để thực hiện các tác vụ như phân tích tôn vinh, phân tích ý
định chi tiết, hoặc tạo ra các tương tác phức tạp dựa trên ngữ cảnh.
3. Kết hợp hai thư viện:
- Sử dụng spaCy để xử lý và phân tích cơ bản đầu vào từ người dùng, sau đó sử
dụng kết quả này làm đầu vào cho NLTK khi cần thực hiện các xử lý phức tạp hơn. Ví
dụ, bạn có thể sử dụng spaCy để tách từ và phân loại câu hỏi, sau đó sử dụng NLTK
để phân tích ý định và trả lời câu hỏi dựa trên ngữ cảnh.
4. Tùy chỉnh và mở rộng:
- Sử dụng tích hợp cả hai thư viện để tùy chỉnh và mở rộng chatbot của bạn. Bạn có
thể thêm các quy tắc tùy chỉnh cho spaCy hoặc sử dụng mô hình NLP của spaCy để
huấn luyện trên dữ liệu của bạn, đồng thời sử dụng tích hợp của NLTK để xử lý các
tác vụ đặc biệt.
Sử dụng cả hai thư viện cho chatbot giúp bạn tận dụng tốc độ và hiệu suất của spaCy
cùng với tính linh hoạt và tính nâng cao của NLTK để xây dựng một chatbot mạnh mẽ
và đáp ứng được đa dạng các yêu cầu của người dùng.
Phần tiền xử lý văn bản trong một chatbot là một bước quan trọng để làm cho dữ liệu
đầu vào từ người dùng trở nên dễ dàng xử lý và phân tích hơn. Phần này thường bao
gồm các công việc như tách từ, loại bỏ stopwords, chuẩn hóa văn bản, và các tác vụ
xử lý ngôn ngữ tự nhiên khác. Dưới đây là cách bạn có thể thực hiện tiền xử lý văn
bản trong chatbot, sử dụng cả hai thư viện spaCy và NLTK:
1. Tách từ (Tokenization):
- Sử dụng spaCy để tách câu và từ trong đoạn văn bản đầu vào. SpaCy đã tích hợp
sẵn các mô hình ngôn ngữ và có thể tách từ hiệu quả.
- NLTK cũng cung cấp các công cụ tách từ, như `nltk.word_tokenize()`, để thực hiện
tác vụ này.
2. Loại bỏ Stopwords:
- Sử dụng NLTK để loại bỏ stopwords (các từ phổ biến như "and," "the," "is,"...)
khỏi văn bản. NLTK cung cấp danh sách stopwords cho nhiều ngôn ngữ khác nhau.
3. Chuẩn hóa văn bản:
- Sử dụng spaCy hoặc NLTK để chuẩn hóa văn bản. Chuẩn hóa có thể bao gồm việc
chuyển đổi tất cả chữ hoa thành chữ thường, loại bỏ dấu câu, hoặc thậm chí chuyển
đổi các từ viết tắt thành từ đầy đủ (ví dụ: "can't" thành "cannot").
4. Làm sạch văn bản (Text Cleaning):
- Sử dụng cả hai thư viện để loại bỏ các ký tự đặc biệt không cần thiết, bỏ qua
khoảng trắng thừa, và làm sạch văn bản để giảm tiêu đề.
5.Làm phong phú thông tin (Feature Engineering):
- Sử dụng NLTK và spaCy để trích xuất thông tin quan trọng từ văn bản, chẳng hạn
như từ loại, tên thực thể, và ý định. Điều này có thể giúp chatbot hiểu rõ hơn về nội
dung của câu hỏi hoặc phản hồi từ người dùng.
Cách tiền xử lý văn bản cụ thể sẽ phụ thuộc vào yêu cầu của dự án và ngôn ngữ bạn
đang làm việc. Kết hợp sử dụng spaCy và NLTK có thể giúp bạn thực hiện các tác vụ
tiền xử lý một cách hiệu quả và linh hoạt hơn.
Thư viện hỗ trợ xây dựng mô hình:
scikit-learn: Thư viện máy học phổ biến cho Python, được sử dụng cho việc xây dựng
các mô hình phân loại và gom cụm.
 TensorFlow: Một thư viện mã nguồn mở của Google cho việc xây dựng và đào tạ
o mạng nơ-ron sâu.

1. Tensorflow là gì?
TensorFlow chính là thư viện mã nguồn mở cho machine learning nổi tiếng
nhất thế giới, được phát triển bởi các nhà nghiên cứu từ Google. Việc hỗ trợ mạnh mẽ
các phép toán học để tính toán trong machine learning và deep learning đã giúp việc ti
ếp cận các bài toán trở nên đơn giản, nhanh chóng và tiện lợi hơn nhiều.
Các hàm được dựng sẵn trong thư viện cho từng bài toán cho phép TensorFlow
xây dựng được nhiều neural network. Nó còn cho phép bạn tính toán song song tr
ên nhiều máy tính khác nhau, thậm chí trên nhiều CPU, GPU trong cùng 1 máy hay
tạo ra các dataflow graph – đồ thị luồng dữ liệu để dựng nên các model.
Được viết bằng C++ và thao tác interface bằng Python nên phần
performance của TensorFlow cực kỳ tốt. Đối tượng sử dụng nó cũng đa dạng không
kém: từ các nhà nghiên cứu, nhà khoa học dữ liệu và dĩ nhiên không thể thiếu các lập
trình viên.

2. Lịch sử ra đời TensorFlow


Ra mắt lần đầu vào cuối năm 2015, phiên bản TensorFlow ổn định cuối cùng
cũng xuất hiện vào năm 2017. Là mã nguồn mở dưới sự cho phép của Apache Open
Source, giờ đây bạn có thể sử dụng, điều chỉnh và tái đóng góp phiên bản được điều
chỉnh đó, đổi lại không cần phải trả bất cứ đồng nào cho Google.

3. Kiến trúc của TensorFlow


Kiến trúc TensorFlow hoạt động được chia thành 3 phần:
– Tiền xử lý dữ liệu
– Dựng model
– Train và ước tính model

4. Cách TensorFlow hoạt động


TensorFlow cho phép các lập trình viên tạo ra dataflow graph, cấu trúc mô
tả làm thế nào dữ liệu có thể di chuyển qua 1 biểu đồ, hay 1 sê-ri các node đang xử lý.
Mỗi node trong đồ thị đại diện 1 operation toán học, và mỗi kết nối hay edge giữa các
node là 1 mảng dữ liệu đa chiều, hay còn được gọi là ‘tensor’.
TensorFlow cung cấp tất cả những điều này cho lập trình viên theo phương
thức của ngôn ngữ Python. Vì Python khá dễ học và làm việc, ngoài ra còn cung cấp
nhiều cách tiện lợi để ta hiểu được làm thế nào các high-level abstractions có thể kết
hợp cùng nhau. Node và tensor trong TensorFlow là các đối tượng Python, và các
ứng dụng TensorFlow bản thân chúng cũng là các ứng dụng Python.
Các operation toán học thực sự thì không được thi hành bằng Python. Các thư
viện biến đổi có sẵn thông qua TensorFlow được viết bằng các binary C++ hiệu
suất cao. Python chỉ điều hướng lưu lượng giữa các phần và cung cấp các high-level
abstraction lập trình để nối chúng lại với nhau.
TensorFlow 2.0, được ra mắt vào tháng 10 năm 2019, cải tiến framework
theo nhiều cách dựa trên phản hồi của người dùng, để dễ dàng và hiệu quả hơn khi
làm việc cùng nó (ví dụ: bằng cách sử dụng các Keras API liên quan đơn giản cho
việc train model). Train phân tán dễ chạy hơn nhờ vào API mới và sự hỗ trợ cho
TensorFlow Lite cho phép triển khai các mô hình trên khá nhiều nền tảng khác nhau.
Tuy nhiên, nếu đã viết code trên các phiên bản trước đó của TensorFlow thì bạn phải
viết lại, đôi lúc 1 ít, đôi lúc cũng khá đáng kể, để tận dụng tối đa các tính năng mới
của TensorFlow 2.0.

5. Lợi ích từ TensorFlow


Lợi ích dễ thấy nhưng quan trọng nhất mà TensorFlow cung cấp cho việc
lập trình machine learning chính là abstraction. Thay vì phải đối phó với những tình
huống rườm rà từ việc thực hiện triển khai các thuật toán, hay tìm ra cách hợp lý để
chuyển output của 1 chức năng sang input của 1 chức năng khác, giờ đây bạn có thể
tập trung vào phần logic tổng thể của 1 ứng dụng hơn. TensorFlow sẽ chăm sóc phần
còn lại thay cho bạn.
Ngoài ra TensorFlow còn ung cấp các tiện ích bổ sung cho các lập trình viên
cần debug cũng như giúp bạn tự suy xét các ứng dụng TensorFlow. Chế độ eager
execution cho phép bạn đánh giá và sửa đổi từng operation của biểu đồ 1 cách riêng
biệt và minh bạch, thay vì phải dựng toàn bộ biểu đồ dưới dạng 1 đối tượng độc lập
vốn khá mơ hồ hay phải đánh giá chung tổng thể. Cuối cùng, 1 tính năng khá độc đáo
của TensorFlow là TensorBoard. TensorBoard cho phép bạn quan sát 1 cách trực quan
những gì TensorFlow đang làm.
TensorFlow còn có nhiều cải tiến từ sự hậu thuẫn từ các ekíp thương mại hạng
A tại Google. Google không những tiếp lửa cho tiến độ nhanh chóng cho sự phát triển
đằng sau dự án, mà còn tạo ra nhiều phục vụ độc đáo xung quanh TensorFlow để nó
dễ dàng deploy và sử dụng: như silicon TPU mình đã nói ở trên để tăng tốc hiệu suất
đám mây Google, 1 online hub cho việc chia sẻ các model được tạo với framework, sự
hiện diện của in-browser và gần gũi với mobile của framework, và nhiều hơn thế
nữa…

6. Giới thiệu các Component của TensorFlow


Tensor
Tên của TensorFlow được đưa ra trực tiếp là nhờ vào framework cốt lõi của nó:
Tensor. Trong TensorFlow, tất cả các tính toán đều liên quan tới các tensor. 1 tensor là
1 vector hay ma trận của n-chiều không gian đại diện cho tất cả loại dữ liệu. Tất cả giá
trị trong 1 tensor chứa đựng loại dữ liệu giống hệt nhau với 1 shape đã biết (hoặc đã
biết 1 phần). Shape của dữ liệu chính là chiều của ma trận hay mảng.
Một tensor có thể được bắt nguồn từ dữ liệu input hay kết quả của 1 tính toán.
Trong TensorFlow, tất cả các hoạt động được tiến hành bên trong 1 graph – biểu đồ.
Biểu đồ là 1 tập hợp tính toán được diễn ra liên tiếp. Mỗi operation được gọi là 1 op
node (operation node) và được kết nối với nhau.
Biểu đồ phát thảo các op và kết nối giữa các node. Tuy nhiên, nó không hiển
thị các giá trị. Phần edge của các node chính là tensor, 1 cách để nhập operation với
dữ liệu.

Graph
TensorFlow sử dụng framework dạng biểu đồ. Biểu đồ tập hợp và mô tả tất cả
các chuỗi tính toán được thực hiện trong quá trình training. Biểu đồ cũng mang rất
nhiều lợi thế:
– Nó được làm ra để chạy trên nhiều CPU hay GPU, ngay cả các hệ điều hành trên
thiết bị điện thoại.
– Tính di động của biểu đồ cho phép bảo toàn các tính toán để bạn sử dụng ngay hay
sau đó. Biểu đồ có thể được lưu lại để thực thi trong tương lai.
– Tất cả tính toán trong biểu đồ được thực hiện bằng cách kết nối các tensor lại với
nhau. 1 tensor có 1 node và 1 edge. Node mang operation toán học và sản xuất các
output ở đầu cuối. Các edge giải thích mối quan hệ input/output giữa các node.

7. Danh sách các thuật toán nổi bật được hỗ trợ bởi TensorFlow
Tính tới thời điểm phiên bản ra mắt TensorFlow 1.10, nó đã sở hữu built-in API cho:
– Linear regression: tf.estimator.LinearRegressor
– Classification: tf.estimator.LinearClassifier
– Deep learning classification: tf.estimator.DNNClassifier
– Deep learning wipe and deep: tf.estimator.DNNLinearCombinedClassifier
– Booster tree regression: tf.estimator.BoostedTreesRegressor
– Boosted tree classification: tf.estimator.BoostedTreesClassifier

8. Các option tải dữ liệu vào TensorFlow


Bước đầu tiên trước khi train 1 thuật toán machine learning là load dữ liệu. Có
2 cách thông dụng để load dữ liệu:
- Load dữ liệu vào bộ nhớ: đây là phương pháp đơn giản nhất. Bạn load tất cả
dữ liệu vào bộ nhớ như 1 mảng đơn. Bạn cũng có thể viết code bằng Python. Những
dòng code này không liên quan gì tới TensorFlow.
- Pipeline dữ liệu TensorFlow. TensorFlow sở hữu built-in API và nó sẽ giúp
bạn load dữ liệu, thực thi các operation và feed thuật toán machine learning 1 cách dễ
dàng. Phương pháp này hoạt động tốt đặc biệt khi bạn có 1 dataset lớn. Ví dụ: các
hình ảnh thu được được biết khá là khổng lồ và không thể fit vào bộ nhớ. Pipeline dữ
liệu sẽ tự quản lý phần bộ nhớ.

9. Giải pháp sẽ là gì?


Load dữ liệu vào bộ nhớ
Nếu dataset của bạn không quá lớn, chẳng hạn như dưới 10 GB, bạn có thể
dùng phương pháp đầu tiên. Dữ liệu có thể dễ dàng fit vào bộ nhớ. Bạn cũng có thể
dùng 1 thư viện nổi tiếng có tên là Pandas để import các tệp CSV. 1
Load dữ liệu với TensorFlow pipeline
Phương pháp thứ 2 sẽ hoạt động tốt nhất nếu bạn có 1 dataset lớn. Ví dụ: nếu
bạn có 1 dataset nặng 50 GB và máy tính của bạn chỉ có 16GB dung lượng thì rõ ràng
là máy sẽ crash thôi.

Trong tình huống này, bạn cần dựng 1 TensorFlow pipeline. Đường ống sẽ load
dữ liệu trong batch, hay chunk nhỏ. Mỗi batch sẽ được push tới pipeline và sẵn sàng
cho việc training. Dựng 1 pipeline là 1 giải pháp tuyệt vời vì nó còn cho bạn sử dụng
phép tính toán song song. Nghĩa là TensorFlow sẽ train model qua nhiều CPU. Thúc
đẩy sự tính toán và cho phép training mạng lưới thần kinh mạnh mẽ hơn.
 PyTorch: Một thư viện mã nguồn mở của Facebook cho việc xây dựng và đào tạo
mạng nơ-ron sâu, trở nên phổ biến trong cộng đồ học máy.

1. PyTorch là gì?
Pytorch là một framework mã nguồn mở hỗ trợ cho Deep Learning được
phát triển bởi Facebook. Cùng với Tensorflow và Keras, đây là một trong những
framework phổ biến nhất được sử dụng trong các bài toán về trí tuệ nhân tạo.
Sở hữu lượng người dùng đông đảo và một cộng đồng lớn mạnh, Pytorch đã
vươn lên vị trí thứ 2 về số lượng người dùng chỉ sau Tensorflow vào năm 2019.
Trong nghiên cứu các ứng dụng trí tuệ nhân tạo, Pytorch thường được ưu tiên
sử dụng vì có thể giúp triển khai các bài toán một cách dễ dàng. Pytorch hỗ trợ đắc lực
cho các nhà phát triển thực hiện Debug (gỡ lỗi) và Data Visualize (trực quan hóa
dữ liệu) với cơ chế Dynamic Computation Graph.

2. Những lợi ích khi sử dụng PyTorch


 Mã nguồn mở giúp PyTorch xây dựng một cộng đồng lớn mạnh với nguồn tài
nguyên chất lượng.
 Khả năng xử lý đồ họa mạnh mẽ giúp kiểm soát CPU & GPU rõ ràng.
 Tập hợp nhiều Pythonic tự nhiên.
 Dễ dàng xử lý code khi gặp bug.
 Có TouchScript giúp triển khai các ứng dụng vào quy mô sản xuất để mở rộng quy
mô.
 Các hàm, cú pháp cơ bản trong Pytorch giúp xử lý các bài toán về AI một cách
nhanh chóng.

3. Các đặc điểm cơ bản của PyTorch


Tensor là gì?
Tensor có thể là một vectơ hoặc ma trận đa chiều và đại diện cho các loại
dữ liệu. Tất cả các giá trị trong một tensor sẽ có kiểu dữ liệu giống hệt nhau. Hình
dạng của dữ liệu cũng là kích thước các mảng hoặc ma trận.

Tensor cũng có thể được xử lý bởi CPU hoặc GPU để giúp hoạt động nhanh hơn. Có
nhiều loại Tensor khác nhau như Float Tensor, Double Tensor, Half Tensor, Int Tensor
và Long Tensor. PyTorch sử dụng Float Tensor 32-bit làm mặc định.

Các hoạt động toán học


Code để thực hiện các phép toán trong PyTorch cũng giống như trong Numpy
(một thư viện toán học phổ biến của Python). Người dùng cần khởi tạo 2 Tensor và
thực hiện các phép toán như cộng, trừ, nhân và chia với chúng.
Dynamic Computation Graph
Các đồ thị tính toán trong PyTorch cho phép framework tính toán các giá trị
gradient cho các Neural Network được xây dựng. PyTorch sử dụng Dynamic
Computation Graph cho phép người dùng có thể xây dựng xen kẽ và định giá đồ thị.
Ngoài ra, dạng đồ thị này còn thân thiện với Debug vì cho phép thực thi code từng
dòng. Dynamic Computation Graph là một tính năng quan trọng khiến PyTorch trở
thành lựa chọn ưu tiên trong ngành.
Datasets và DataLoader
Làm việc với bộ dữ liệu lớn yêu cầu tải tất cả dữ liệu vào bộ nhớ trong một lần
duy nhất để tiết kiệm thời gian. Điều này gây ra tình trạng đầy bộ nhớ và các chương
trình chạy chậm.
PyTorch cung cấp hai dữ liệu ban đầu là DataLoader và Dataset cho phép
người dùng sử dụng dữ liệu của riêng họ cũng như các tập dữ liệu được tải trước.
Khởi tạo ma trận
Để khởi tạo ma trận với các số ngẫu nhiên trong PyTorch, bạn sẽ sử dụng hàm randn
() và cung cấp một tensor chứa đầy các số ngẫu nhiên. Các phép toán ma trận cơ bản
và phép toán chuyển vị trong PyTorch cũng tương tự như NumPy.

4. Các module phổ biến của PyTorch


Autograd: là module phân biệt tự động của PyTorch. Module này tạo ra một đồ thị
xoay chiều có hướng với một Tensor đầu vào và một tensor đầu ra.
Optim: là một package với các thuật toán được viết sẵn cho các trình tối ưu hóa, có
thể được sử dụng để xây dựng Neural Network (Mạng nơ-ron nhân tạo trong AI)
Nn: bao gồm các class khác nhau giúp xây dựng các mô hình Neural Network. Tất cả
các module trong PyTorch đều là các subclass của nn.

 ChatterBot: Một thư viện cho việc xây dựng chatbot dựa trên nguyên tắc học máy
và xử lý ngôn ngữ tự nhiên. Cung cấp cơ sở dữ liệu câu hỏi và câu trả lời.

1. Chatterbot là gì?
ChatterBot là một thư viện Python giúp bạn tạo ra một chat bot có khả
năng trả lời tự động từ input của người dùng. ChatterBot sử dụng thuật toán lựa
chọn của máy học để tạo ra các loại Response khác nhau. Điều này giúp các nhà phát
triển dễ dàng tạo các chatbot có khả năng trò chuyện và tự động hóa cuộc hội thoại
với người dùng. Để biết thêm chi tiết về các ý tưởng và khái niệm đằng sau
ChatterBot hãy xem Process Flow Diagram (Sơ đồ luồng xử lý ở bên dưới).

Độc lập Ngôn ngữ


Thiết kế Độc lập Ngôn ngữ của ChatterBot cho phép nó được Huấn luyện để có thể nói
bất cứ ngôn ngữ nào. Ngoài ra bản chất Machinelearing của ChatterBot cho phép một
Instance là tác nhân cải thiện kiến thức của chính nó về các phản ứng có thể có khi nó
tương tác với con người và từ các nguồn dữ liệu khác.

Cách ChatterBot hoạt động


ChatterBot là một thư viện Python được thiết kế để giúp dễ dàng tạo một phần mềm
mà ở đó nó có thể tham gia vào việc giao tiếp hay còn gọi là chatbot.

Một instance của ChatterBot chưa được train, start mà chưa có kiến thức về cách giao
tiếp. Mỗi khi người dùng nhập một statement, thư viện sẽ lưu văn bản mà họ đã nhập
và văn bản mà bot phản hồi lại. Khi số lượng input mà ChatterBot nhận được tăng thì
số lượng các response mà nó có thể trả lời cũng như độ chính xác của từng response có
liên quan đến input statement đó cũng tăng theo.

Chương trình này lựa chọn response phù hợp nhất bằng cách tìm kiếm statement đã
biết gần nghĩa nhất với input statement, sau đó nó chọn một response từ các response
đã biết của statement đó. (Cái này khá giống với app Simimi)

2. Độc lập Ngôn ngữ


Thiết kế Độc lập Ngôn ngữ của ChatterBot cho phép nó được Huấn luyện để có
thể nói bất cứ ngôn ngữ nào. Ngoài ra bản chất Machinelearing của ChatterBot cho
phép một Instance là tác nhân cải thiện kiến thức của chính nó về các phản ứng có thể
có khi nó tương tác với con người và từ các nguồn dữ liệu khác.

3. Cách ChatterBot hoạt động


ChatterBot là một thư viện Python được thiết kế để giúp dễ dàng tạo một phần
mềm mà ở đó nó có thể tham gia vào việc giao tiếp hay còn gọi là chatbot.
Một instance của ChatterBot chưa được train, start mà chưa có kiến thức về
cách giao tiếp. Mỗi khi người dùng nhập một statement, thư viện sẽ lưu văn bản mà
họ đã nhập và văn bản mà bot phản hồi lại. Khi số lượng input mà ChatterBot nhận
được tăng thì số lượng các response mà nó có thể trả lời cũng như độ chính xác của
từng response có liên quan đến input statement đó cũng tăng theo.
Chương trình này lựa chọn response phù hợp nhất bằng cách tìm kiếm
statement đã biết gần nghĩa nhất với input statement, sau đó nó chọn một response từ
các response đã biết của statement đó. (Cái này khá giống với app Simimi)
Tài liệu tham khảo
[1] nguyen, thoa. “Tensorflow Là Gì? 10 Tài Liệu Học Tensoflow Đầy đủ Nhất.” TopDev, 3

Aug. 2020, topdev.vn/blog/tensorflow-la-gi/.

[2] Tùng, Đông. PyTorch Là Gì? So Sánh PyTorch và TensorFlow. 30 Oct. 2022,

wiki.tino.org/pytorch-la-gi/. Accessed 20 Sept. 2023.

[3] “[ChatterBot] Thư Viện Chatbot Hay Ho Dành Cho Python| Phần 1.” Viblo.asia, 18 Oct.

2020, viblo.asia/p/chatterbot-thu-vien-chatbot-hay-ho-danh-cho-python-phan-1-

ByEZkJa4KQ0. Accessed 20 Sept. 2023.

[4] “SpaCy | Saturn Cloud.” Saturncloud.io, 4 Apr. 2023, saturncloud.io/glossary/spacy/.

Accessed 20 Sept. 2023.

[5] spaCy. “SpaCy 101: Everything You Need to Know · SpaCy Usage Documentation.”

SpaCy 101: Everything You Need to Know, 2016, spacy.io/usage/spacy-101.

[6] “NLTK - Công Cụ Hỗ Trợ Quan Trọng Cho Nghiên Cứu Xử Lý Ngôn Ngữ Tự Nhiên.”

Waodate.com, waodate.com/blog/nltk. Accessed 20 Sept. 2023.

You might also like