Professional Documents
Culture Documents
Proposal
Proposal
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.
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. 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.
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
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.
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.
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).
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] Tùng, Đông. PyTorch Là Gì? So Sánh PyTorch và TensorFlow. 30 Oct. 2022,
[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-
[5] spaCy. “SpaCy 101: Everything You Need to Know · SpaCy Usage Documentation.”
[6] “NLTK - Công Cụ Hỗ Trợ Quan Trọng Cho Nghiên Cứu Xử Lý Ngôn Ngữ Tự Nhiên.”