Xây dựng chatbot Python

Trong bài viết thứ hai của loạt chatbot này, hãy tìm hiểu cách xây dựng một chatbot dựa trên quy tắc và thảo luận về các ứng dụng kinh doanh của chúng

Chatbot đã trở nên cực kỳ phổ biến trong những năm gần đây và việc sử dụng chúng trong ngành đã tăng vọt. Họ đã tìm được chỗ đứng vững chắc trong hầu hết mọi tác vụ yêu cầu giao dịch công khai dựa trên văn bản. Ví dụ, chúng đã trở nên quan trọng trong ngành công nghiệp hỗ trợ đến mức gần 25% tất cả các hoạt động dịch vụ khách hàng dự kiến ​​sẽ sử dụng chúng vào năm 2020

Trong phần đầu của Hướng dẫn sử dụng Chatbot cho người mới bắt đầu, chúng ta đã thảo luận về chatbot là gì, mức độ phổ biến của chúng và các trường hợp sử dụng của chúng trong ngành. Chúng tôi cũng đã thấy công nghệ đã phát triển như thế nào trong 50 năm qua

Trong phần thứ hai của loạt bài này, chúng tôi sẽ hướng dẫn bạn cách xây dựng một chatbot dựa trên Quy tắc đơn giản trong Python. Trước khi bắt đầu với hướng dẫn, chúng ta cần hiểu các loại chatbot khác nhau và cách chúng hoạt động

Các loại chatbot

Chatbots có thể được phân thành hai loại khác nhau, dựa trên cách chúng được xây dựng

Chatbot dựa trên quy tắc

Chatbots dựa trên quy tắc khá đơn giản. Họ được cung cấp một cơ sở dữ liệu về các câu trả lời và được cung cấp một bộ quy tắc giúp họ tìm ra câu trả lời phù hợp từ cơ sở dữ liệu được cung cấp. Họ không thể tạo ra câu trả lời của riêng mình nhưng với cơ sở dữ liệu rộng lớn về câu trả lời và các quy tắc được thiết kế thông minh, họ có thể làm việc rất hiệu quả và hữu ích

Dạng Chatbots dựa trên quy tắc đơn giản nhất có các bảng đầu vào một đối một và phản hồi của chúng. Các bot này cực kỳ hạn chế và chỉ có thể phản hồi các truy vấn nếu chúng khớp chính xác với thông tin đầu vào được xác định trong cơ sở dữ liệu của chúng

Chatbot dựa trên AI

Với sự gia tăng trong việc sử dụng máy học trong những năm gần đây, một cách tiếp cận mới để xây dựng chatbot đã xuất hiện. Sử dụng trí tuệ nhân tạo, có thể tạo ra các chatbot cực kỳ trực quan và chính xác phù hợp với các mục đích cụ thể

Không giống như họ hàng dựa trên quy tắc của chúng, các chatbot dựa trên AI dựa trên các mô hình học máy phức tạp cho phép chúng tự học

Bây giờ chúng ta đã quen thuộc với cách thức hoạt động của chatbot, chúng ta sẽ xem xét các thư viện sẽ được sử dụng để xây dựng Chatbot dựa trên quy tắc đơn giản của chúng ta

Bộ công cụ ngôn ngữ tự nhiên [NLTK]

Bộ công cụ ngôn ngữ tự nhiên là một thư viện Python giúp dễ dàng xử lý 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 nhiều tài nguyên dựa trên ngôn ngữ như Mạng từ đa ngôn ngữ mở, cũng như quyền truy cập vào nhiều thư viện xử lý văn bản

Cụm từ thông dụng [RegEx] trong Python

 Cụm từ thông dụng là một chuỗi ký tự đặc biệt giúp bạn tìm kiếm và tìm các mẫu từ/câu/chuỗi ký tự trong các tập hợp chuỗi, sử dụng cú pháp chuyên biệt. Chúng được sử dụng rộng rãi để tìm kiếm và khớp văn bản trong UNIX

Python bao gồm hỗ trợ cho biểu thức chính quy thông qua gói 

hello
{'hello', 'howdy', 'hi', 'hullo', 'how do you do'}
timings
{'time', 'clock', 'timing'}
2

Bạn muốn nâng cấp khả năng Python của mình?

Xây dựng chatbot

Chatbot dựa trên quy tắc rất đơn giản này sẽ hoạt động bằng cách tìm kiếm từ khóa cụ thể trong thông tin đầu vào do người dùng cung cấp. Các từ khóa sẽ được sử dụng để hiểu hành động mà người dùng muốn thực hiện [ý định của người dùng]. Khi mục đích được xác định, bot sẽ chọn ra một phản hồi phù hợp với mục đích

Danh sách các từ khóa mà bot sẽ tìm kiếm và từ điển các câu trả lời sẽ được xây dựng thủ công dựa trên trường hợp sử dụng cụ thể của chatbot

Chúng tôi sẽ thiết kế một chatbot rất đơn giản cho Ngân hàng. Bot sẽ có thể trả lời lời chào [Xin chào, Xin chào, v.v. ] và sẽ có thể trả lời các câu hỏi về giờ làm việc của ngân hàng

Quy trình về cách chatbot sẽ xử lý đầu vào được hiển thị bên dưới;

Luồng cách chatbot sẽ xử lý

Chúng tôi sẽ làm theo các bước dưới đây để xây dựng chatbot của chúng tôi

  1. Nhập phụ thuộc
  2. Xây dựng danh sách từ khóa
  3. Xây dựng từ điển ý định
  4. Xác định một từ điển các câu trả lời
  5. Phù hợp với ý định và tạo phản hồi

Nhập phụ thuộc

Điều đầu tiên chúng ta cần làm là nhập các gói/thư viện mà chúng ta sẽ sử dụng.

hello
{'hello', 'howdy', 'hi', 'hullo', 'how do you do'}
timings
{'time', 'clock', 'timing'}
2 là gói xử lý biểu thức chính quy trong Python. Chúng tôi cũng sẽ sử dụng WordNet từ NLTK. WordNet là một cơ sở dữ liệu từ vựng xác định các mối quan hệ ngữ nghĩa giữa các từ. Chúng tôi sẽ sử dụng WordNet để xây dựng một từ điển các từ đồng nghĩa với các từ khóa của chúng tôi. Điều này sẽ giúp chúng tôi mở rộng danh sách từ khóa mà không cần phải giới thiệu thủ công mọi từ có thể mà người dùng có thể sử dụng

# Importing modules
import re
from nltk.corpus import wordnet

Xây dựng danh sách từ khóa

Khi chúng tôi đã nhập thư viện của mình, chúng tôi sẽ cần xây dựng danh sách các từ khóa mà chatbot của chúng tôi sẽ tìm kiếm. Danh sách này có thể đầy đủ như bạn muốn. Bạn càng có nhiều từ khóa, chatbot của bạn sẽ hoạt động tốt hơn

Như đã thảo luận trước đây, chúng tôi sẽ sử dụng Mạng từ để xây dựng từ điển các từ đồng nghĩa với từ khóa của chúng tôi. Để biết chi tiết về cách cấu trúc Mạng từ, hãy truy cập trang web của họ

Mã số

# Building a list of Keywords
list_words=['hello','timings']
list_syn={}
for word in list_words:
    synonyms=[]
    for syn in wordnet.synsets[word]:
        for lem in syn.lemmas[]:
            # Remove any special characters from synonym strings
            lem_name = re.sub['[^a-zA-Z0-9 \n\.]', ' ', lem.name[]]
            synonyms.append[lem_name]
    list_syn[word]=set[synonyms]
print [list_syn]

đầu ra

hello
{'hello', 'howdy', 'hi', 'hullo', 'how do you do'}
timings
{'time', 'clock', 'timing'}

Tại đây, trước tiên, chúng tôi xác định danh sách các từ 

# Building a list of Keywords
list_words=['hello','timings']
list_syn={}
for word in list_words:
    synonyms=[]
    for syn in wordnet.synsets[word]:
        for lem in syn.lemmas[]:
            # Remove any special characters from synonym strings
            lem_name = re.sub['[^a-zA-Z0-9 \n\.]', ' ', lem.name[]]
            synonyms.append[lem_name]
    list_syn[word]=set[synonyms]
print [list_syn]
1 mà chúng tôi sẽ sử dụng làm từ khóa của mình. Chúng tôi đã sử dụng Mạng từ để mở rộng danh sách ban đầu của mình với các từ đồng nghĩa của từ khóa. Danh sách từ khóa này được lưu trữ trong 
# Building a list of Keywords
list_words=['hello','timings']
list_syn={}
for word in list_words:
    synonyms=[]
    for syn in wordnet.synsets[word]:
        for lem in syn.lemmas[]:
            # Remove any special characters from synonym strings
            lem_name = re.sub['[^a-zA-Z0-9 \n\.]', ' ', lem.name[]]
            synonyms.append[lem_name]
    list_syn[word]=set[synonyms]
print [list_syn]
2

Có thể dễ dàng thêm các từ khóa mới vào 

# Building a list of Keywords
list_words=['hello','timings']
list_syn={}
for word in list_words:
    synonyms=[]
    for syn in wordnet.synsets[word]:
        for lem in syn.lemmas[]:
            # Remove any special characters from synonym strings
            lem_name = re.sub['[^a-zA-Z0-9 \n\.]', ' ', lem.name[]]
            synonyms.append[lem_name]
    list_syn[word]=set[synonyms]
print [list_syn]
1. Chatbot sẽ tự động kéo các từ đồng nghĩa của chúng và thêm chúng vào từ điển từ khóa. Bạn cũng có thể chỉnh sửa trực tiếp 
# Building a list of Keywords
list_words=['hello','timings']
list_syn={}
for word in list_words:
    synonyms=[]
    for syn in wordnet.synsets[word]:
        for lem in syn.lemmas[]:
            # Remove any special characters from synonym strings
            lem_name = re.sub['[^a-zA-Z0-9 \n\.]', ' ', lem.name[]]
            synonyms.append[lem_name]
    list_syn[word]=set[synonyms]
print [list_syn]
2 nếu muốn thêm các từ hoặc cụm từ cụ thể mà bạn biết người dùng của mình sẽ sử dụng

Xây dựng từ điển ý định

Khi danh sách từ khóa của chúng tôi hoàn tất, chúng tôi cần xây dựng một từ điển khớp từ khóa của chúng tôi với ý định. Chúng tôi cũng cần định dạng lại các từ khóa theo một cú pháp đặc biệt giúp chúng hiển thị với chức năng tìm kiếm của Biểu thức chính quy

Mã số

# Building dictionary of Intents & Keywords
keywords={}
keywords_dict={}
# Defining a new key in the keywords dictionary
keywords['greet']=[]
# Populating the values in the keywords dictionary with synonyms of keywords formatted with RegEx metacharacters 
for synonym in list[list_syn['hello']]:
    keywords['greet'].append['.*\\b'+synonym+'\\b.*']

# Defining a new key in the keywords dictionary
keywords['timings']=[]
# Populating the values in the keywords dictionary with synonyms of keywords formatted with RegEx metacharacters 
for synonym in list[list_syn['timings']]:
    keywords['timings'].append['.*\\b'+synonym+'\\b.*']
for intent, keys in keywords.items[]:
    # Joining the values in the keywords dictionary with the OR [|] operator updating them in keywords_dict dictionary
    keywords_dict[intent]=re.compile['|'.join[keys]]
print [keywords_dict]

đầu ra

________số 8

Từ điển được cập nhật và định dạng được lưu trữ trong 

# Building a list of Keywords
list_words=['hello','timings']
list_syn={}
for word in list_words:
    synonyms=[]
    for syn in wordnet.synsets[word]:
        for lem in syn.lemmas[]:
            # Remove any special characters from synonym strings
            lem_name = re.sub['[^a-zA-Z0-9 \n\.]', ' ', lem.name[]]
            synonyms.append[lem_name]
    list_syn[word]=set[synonyms]
print [list_syn]
5. Mục đích là chìa khóa và chuỗi từ khóa là giá trị của từ điển

Hãy xem xét một cặp khóa-giá trị của từ điển 

# Building a list of Keywords
list_words=['hello','timings']
list_syn={}
for word in list_words:
    synonyms=[]
    for syn in wordnet.synsets[word]:
        for lem in syn.lemmas[]:
            # Remove any special characters from synonym strings
            lem_name = re.sub['[^a-zA-Z0-9 \n\.]', ' ', lem.name[]]
            synonyms.append[lem_name]
    list_syn[word]=set[synonyms]
print [list_syn]
5 để hiểu cú pháp của Cụm từ thông dụng;

# Building a list of Keywords
list_words=['hello','timings']
list_syn={}
for word in list_words:
    synonyms=[]
    for syn in wordnet.synsets[word]:
        for lem in syn.lemmas[]:
            # Remove any special characters from synonym strings
            lem_name = re.sub['[^a-zA-Z0-9 \n\.]', ' ', lem.name[]]
            synonyms.append[lem_name]
    list_syn[word]=set[synonyms]
print [list_syn]
1

Vì chúng tôi cần chatbot của mình để tìm kiếm các từ cụ thể trong các chuỗi đầu vào lớn hơn, chúng tôi sử dụng các chuỗi siêu ký tự sau

# Building a list of Keywords
list_words=['hello','timings']
list_syn={}
for word in list_words:
    synonyms=[]
    for syn in wordnet.synsets[word]:
        for lem in syn.lemmas[]:
            # Remove any special characters from synonym strings
            lem_name = re.sub['[^a-zA-Z0-9 \n\.]', ' ', lem.name[]]
            synonyms.append[lem_name]
    list_syn[word]=set[synonyms]
print [list_syn]
2

Trong trình tự cụ thể này, từ khóa [hullo] được đặt giữa một 

# Building a list of Keywords
list_words=['hello','timings']
list_syn={}
for word in list_words:
    synonyms=[]
    for syn in wordnet.synsets[word]:
        for lem in syn.lemmas[]:
            # Remove any special characters from synonym strings
            lem_name = re.sub['[^a-zA-Z0-9 \n\.]', ' ', lem.name[]]
            synonyms.append[lem_name]
    list_syn[word]=set[synonyms]
print [list_syn]
7 trình tự. Điều này cho chức năng Tìm kiếm RegEx rằng tham số tìm kiếm là từ khóa [xin chào]

Dãy đầu tiên 

# Building a list of Keywords
list_words=['hello','timings']
list_syn={}
for word in list_words:
    synonyms=[]
    for syn in wordnet.synsets[word]:
        for lem in syn.lemmas[]:
            # Remove any special characters from synonym strings
            lem_name = re.sub['[^a-zA-Z0-9 \n\.]', ' ', lem.name[]]
            synonyms.append[lem_name]
    list_syn[word]=set[synonyms]
print [list_syn]
8 được đặt giữa một dãy sao
# Building a list of Keywords
list_words=['hello','timings']
list_syn={}
for word in list_words:
    synonyms=[]
    for syn in wordnet.synsets[word]:
        for lem in syn.lemmas[]:
            # Remove any special characters from synonym strings
            lem_name = re.sub['[^a-zA-Z0-9 \n\.]', ' ', lem.name[]]
            synonyms.append[lem_name]
    list_syn[word]=set[synonyms]
print [list_syn]
9 . Trình tự này yêu cầu chức năng Tìm kiếm RegEx tìm kiếm toàn bộ chuỗi đầu vào từ đầu đến cuối để tìm thông số tìm kiếm [chào bạn]

Trong từ điển, nhiều chuỗi như vậy được phân tách bằng toán tử OR 

hello
{'hello', 'howdy', 'hi', 'hullo', 'how do you do'}
timings
{'time', 'clock', 'timing'}
0 . Toán tử này yêu cầu hàm tìm kiếm tìm kiếm bất kỳ từ khóa nào được đề cập trong chuỗi đầu vào

Bạn có thể tìm thêm thông tin chi tiết về Biểu thức chính quy và cú pháp của nó tại đây

Bạn có thể thêm bao nhiêu cặp khóa-giá trị vào từ điển tùy thích để tăng chức năng của chatbot

Xác định câu trả lời

Bước tiếp theo là xác định phản hồi cho từng loại ý định. Phần này rất đơn giản. Các câu trả lời được mô tả trong một từ điển khác với mục đích là chìa khóa

Chúng tôi cũng đã thêm mục đích dự phòng và phản hồi của mục đích đó. Đây là phản hồi không an toàn trong trường hợp chatbot không thể trích xuất bất kỳ từ khóa có liên quan nào từ đầu vào của người dùng

Mã số

# Building a list of Keywords
list_words=['hello','timings']
list_syn={}
for word in list_words:
    synonyms=[]
    for syn in wordnet.synsets[word]:
        for lem in syn.lemmas[]:
            # Remove any special characters from synonym strings
            lem_name = re.sub['[^a-zA-Z0-9 \n\.]', ' ', lem.name[]]
            synonyms.append[lem_name]
    list_syn[word]=set[synonyms]
print [list_syn]
7

Phù hợp với ý định và tạo phản hồi

Bây giờ chúng tôi đã hoàn thành phần cuối của chatbot, chúng tôi sẽ chuyển sang lấy thông tin đầu vào từ người dùng và tìm kiếm chuỗi đầu vào cho các từ khóa của chúng tôi

Chúng tôi sử dụng chức năng Tìm kiếm RegEx để tìm kiếm thông tin nhập của người dùng cho các từ khóa được lưu trữ trong trường giá trị của từ điển 

# Building a list of Keywords
list_words=['hello','timings']
list_syn={}
for word in list_words:
    synonyms=[]
    for syn in wordnet.synsets[word]:
        for lem in syn.lemmas[]:
            # Remove any special characters from synonym strings
            lem_name = re.sub['[^a-zA-Z0-9 \n\.]', ' ', lem.name[]]
            synonyms.append[lem_name]
    list_syn[word]=set[synonyms]
print [list_syn]
5. Nếu bạn còn nhớ, các giá trị trong 
# Building a list of Keywords
list_words=['hello','timings']
list_syn={}
for word in list_words:
    synonyms=[]
    for syn in wordnet.synsets[word]:
        for lem in syn.lemmas[]:
            # Remove any special characters from synonym strings
            lem_name = re.sub['[^a-zA-Z0-9 \n\.]', ' ', lem.name[]]
            synonyms.append[lem_name]
    list_syn[word]=set[synonyms]
print [list_syn]
5 từ điển được định dạng bằng các chuỗi siêu ký tự đặc biệt. Hàm tìm kiếm của RegEx sử dụng các chuỗi đó để so sánh các mẫu ký tự trong từ khóa với các mẫu ký tự trong chuỗi đầu vào

Nếu tìm thấy kết quả phù hợp, mục đích hiện tại sẽ được chọn và được sử dụng làm khóa cho từ điển 

hello
{'hello', 'howdy', 'hi', 'hullo', 'how do you do'}
timings
{'time', 'clock', 'timing'}
3 để chọn câu trả lời đúng

Mã số

hello
{'hello', 'howdy', 'hi', 'hullo', 'how do you do'}
timings
{'time', 'clock', 'timing'}
1

Chatbot đã chọn lời chào từ đầu vào của người dùng đầu tiên ['Xin chào'] và trả lời theo mục đích phù hợp. Điều tương tự cũng xảy ra khi nó đặt từ ['thời gian'] trong đầu vào thứ hai của người dùng. Đầu vào thứ ba của người dùng ['Làm cách nào tôi có thể mở tài khoản ngân hàng'] không có bất kỳ từ khóa nào có trong cơ sở dữ liệu của Bankbot và do đó, nó đã chuyển sang mục đích dự phòng

Bạn có thể thêm bao nhiêu từ khóa/cụm từ/câu và ý định tùy thích để đảm bảo chatbot của bạn mạnh mẽ khi nói chuyện với một con người thực tế

Sự kết luận

Blog này là phần giới thiệu thực tế về cách xây dựng một chatbot dựa trên quy tắc rất đơn giản trong python. Chúng tôi chỉ làm việc với 2 ý định trong hướng dẫn này để đơn giản. Bạn có thể dễ dàng mở rộng chức năng của chatbot này bằng cách thêm nhiều từ khóa, ý định và phản hồi hơn

Như chúng ta đã thấy, xây dựng một chatbot dựa trên quy tắc là một quá trình tốn nhiều công sức. Trong môi trường kinh doanh, một chatbot có thể được yêu cầu phải có nhiều ý định hơn tùy thuộc vào các nhiệm vụ mà nó phải đảm nhận

Trong tình huống như vậy, các chatbot dựa trên quy tắc trở nên rất phi thực tế vì việc duy trì một cơ sở quy tắc sẽ trở nên cực kỳ phức tạp. Ngoài ra, chatbot sẽ bị hạn chế nghiêm trọng về khả năng đàm thoại vì gần như không thể mô tả chính xác cách người dùng sẽ tương tác với bot.

Chatbots dựa trên AI là một giải pháp thiết thực hơn nhiều cho các tình huống trong thế giới thực. Trong blog tiếp theo của loạt bài này, chúng ta sẽ xem xét cách xây dựng một Chatbot dựa trên AI đơn giản bằng Python

Bạn có muốn tìm hiểu thêm về học máy và các ứng dụng của nó không?

Làm thế nào để xây dựng AI chatbot?

Cách tạo chatbot từ đầu trong 8 bước .
Bước 1. Cung cấp cho chatbot của bạn một mục đích. .
Bước 2. Quyết định nơi bạn muốn nó xuất hiện. .
Bước 3. Chọn nền tảng chatbot. .
Bước 4. Thiết kế cuộc trò chuyện chatbot trong trình chỉnh sửa chatbot. .
Bước 5. Kiểm tra chatbot của bạn. .
Bước 6. Đào tạo chatbot của bạn. .
Bước 7. Thu thập phản hồi từ người dùng

Khung python nào là tốt nhất cho chatbot?

Golem là một khung python để xây dựng chatbot. Nó được xây dựng cho các nhà phát triển python và nó có thể dễ dàng trích xuất các thực thể từ các tin nhắn hiện có.

Chủ Đề