Chatbot Archives - Cao Đẳng FPT M?ng c c??c bng ? xét tuyển //westview-heights.com/tag/chatbot Cao Đẳng FPT M?ng c c??c bng ? tuyển sinh theo hình thức xét tuyển h?sơ. Tiêu chí đào tạo: Thực học ?Thực nghiệp! Mon, 18 Sep 2023 09:28:38 +0000 vi hourly 1 //wordpress.org/?v=6.4.1 //westview-heights.com/wp-content/uploads/cropped-logo-fpt-32x32.png Chatbot Archives - Cao Đẳng FPT M?ng c c??c bng ? xét tuyển //westview-heights.com/tag/chatbot 32 32 Chatbot Archives - Cao Đẳng FPT M?ng c c??c bng ? xét tuyển //westview-heights.com/tin-tuc-poly/ha-noi-tin-sinh-vien/cach-tao-chatbot-bang-python.html Mon, 18 Sep 2023 09:28:38 +0000 //westview-heights.com/?p=253834 Chatbot đã không còn xa l?hiện nay đối với người dùng Internet nếu muốn hỏi-đáp v?một lĩnh vực gì đó. Tuy nhiên, đ?tạo ra Chatbot bằng Python, hẳn nhiều người còn chưa biết làm. Hãy cùng tìm ...

The post Cách tạo Chatbot bằng Python appeared first on Cao Đẳng FPT M?ng c c??c bng ? xét tuyển.

]]>
Chatbot đã không còn xa l?hiện nay đối với người dùng Internet nếu muốn hỏi-đáp v?một lĩnh vực gì đó. Tuy nhiên, đ?tạo ra Chatbot bằng Python, hẳn nhiều người còn chưa biết làm. Hãy cùng tìm hiểu nhé!

Chatbot là gì?

Chatbot trong Python là một phần mềm s?dụng Trí tu?nhân tạo (AI) đ?nói chuyện tương tác với mọi người bằng ngôn ng?có th?văn bản hoặc giọng nói. Hầu hết, những chatbot này nói chuyện bằng âm thanh hoặc văn bản và chúng có th?d?dàng bắt chước ngôn ng?của con người đ?nói chuyện với mọi người theo cách có v?t?nhiên như con người.

Việc đào tạo máy học dựa trên quy tắc dạy cho chatbot tr?lời các câu hỏi dựa trên một b?quy tắc được đưa ra khi bắt đầu huấn luyện. Những quy tắc này có th?rất đơn giản hoặc rất khó hiểu. Chatbot dựa trên quy tắc rất giỏi trong việc tr?lời các câu hỏi đơn giản, nhưng chúng thường không th?x?lý các câu hỏi hoặc yêu cầu phức tạp hơn.

Ảnh minh họa

Chatbot trong th?h?ngày nay

Ngày nay, chúng ta có Chatbot thông minh được h?tr?bởi AI và s?dụng x?lý ngôn ng?t?nhiên (NLP) đ?hiểu lệnh văn bản và giọng nói t?con người cũng như học hỏi t?các tương tác trước đây của h?

Chatbots đã tr?thành một cách tiêu chuẩn đ?các công ty và thương hiệu có s?hiện diện trực tuyến nói chuyện với khách hàng của h?(nền tảng trang web và mạng xã hội).

Chatbot được phát triển dựa trên Python là một công c?hữu ích vì chúng cho phép thương hiệu và khách hàng nói chuyện với nhau ngay lập tức. Hãy nghĩ v?Siri của Apple, Alexa của Amazon và Cortana của Microsoft. S?dĩ trong bài viết tôi chọn ngôn ng?Python đ?xây dựng demo ứng dụng nh?này đ?tận dụng b?thư viện học máy Machines Learning (ML)

Lợi ích Chatbot cho doanh nghiệp

Khi nói đến việc tạo mối quan h?tốt với khách hàng, chatbot có th?là một công c?rất hữu ích. Doanh nghiệp của bạn có th?s?dụng nó đ?xây dựng kết nối mạnh m?với khách truy cập trang web bằng cách tìm hiểu và nói chuyện với h? Bằng cách s?dụng chatbot, bạn không ch?có th?đạt được mục tiêu tiếp th?của mình mà còn có th?bán được nhiều hàng hơn và cung cấp dịch v?khách hàng tốt hơn.

Có nhiều cách chatbot có th?cải thiện cách bạn nói chuyện với khách hàng và giúp doanh nghiệp của bạn phát triển:

  • Tăng s?tương tác của khách hàng
  • Cải thiện việc tạo khách hàng tiềm năng
  • Giảm chi phí dịch v?khách hàng
  • Giám sát d?liệu người tiêu dùng đ?hiểu rõ hơn
  • Đưa ra chiến lược tiếp th?đàm thoại
  • Cân bằng t?động hóa với s?tiếp xúc của con người
  • Đáp ứng mong đợi của khách hàng
  • Đạt được kh?năng m?rộng h?tr?/span>
  • Hợp lý hóa quy trình giới thiệu khách hàng của bạn
  • Làm cho hành trình của khách hàng suôn s?hơn

Làm cách nào đ?tạo Chatbot bằng Python?

Chúng ta s?thực hiện từng bước quá trình xây dựng chatbot Python.

Chúng ta s?s?dụng các k?thuật học sâu (Deep Learning) đ?xây dựng một chatbot. Chatbot s?học t?tập d?liệu có các danh mục (mục đích s?dụng), mẫu và câu tr?lời.

Chúng ta s?dụng mạng thần kinh tái phát đặc biệt (LSTM) đ?tìm ra danh mục nào phù hợp với tin nhắn của người dùng và sau đó tôi chọn một phản hồi ngẫu nhiên t?danh sách phản hồi.

Bây gi?chúng ta s?s?dụng Python đ?xây dựng chatbot, nhưng trước tiên hãy xem cách sắp xếp các tệp và loại tệp chúng ta s?tạo:

  • Intents.json ?Tệp d?liệu có các mẫu và phản hồi được xác định trước.
  • train_chatbot.py ?Trong tệp Python này, chúng ta viết một tập lệnh đ?xây dựng mô hình và huấn luyện chatbot của mình.
  • Words.pkl ?Đây là một tệp mà trong đó chúng tôi lưu tr?các t?đối tượng Python chứa danh sách t?vựng của chúng ta.
  • Class.pkl ?Tệp chọn lớp chứa danh sách các danh mục các t?được lưu lại trong quá trình học.
  • Chatbot_model.h5 ?Đây là mô hình được đào tạo chứa thông tin v?mô hình và có trọng s?của các nơ-ron.
  • Chatgui.py ?Đây là tập lệnh Python mà chúng ta đã triển khai GUI cho chatbot của mình. Người dùng có th?d?dàng tương tác với bot.

Các bước trong mô hình đơn giản đ?tạo Chatbot bằng Python t?đầu

  • Bước 1: Nhập và tải file d?liệu

Trước tiên, chúng ta cần tạo một tệp có tên train_chatbot.py. Đây là file cần thiết mà chatbot của chúng ta cần và thiết lập các biến mà chúng ta s?s?dụng trong d?án Python của mình.train_chatbot.py

Tệp d?liệu có định dạng JSON nên chúng ta đã s?dụng tệp này đ?đọc tệp bằng Python.json packageJSON

Code mẫu

import nltk

from nltk.stem import WordNetLemmatizer

lemmatizer = WordNetLemmatizer()

import json

import pickle

import numpy as np

from keras.models import Sequential

from keras.layers import Dense, Activation, Dropout

from keras.optimizers import SGD

from tensorflow.keras.optimizers import SGD

import random

words=[]

classes = []

documents = []

ignore_words = [‘?’, ‘!’]

data_file = open(‘intents.json’).read()

intents = json.loads(data_file)

  • Bước 2: D?liệu tiền x?lý

Trước khi có th?tạo mô hình học máy hoặc học sâu t?d?liệu văn bản ban đầu, chúng ta phải x?lý d?liệu theo nhiều cách khác nhau mà chúng ta s?dụng thư viện X?lý ngôn ng?t?nhiên (nltk). Tùy theo nhu cầu mà chúng ta phải s?dụng các thao tác khác nhau đ?x?lý trước d?liệu.

Mã hóa d?liệu văn bản là điều đầu tiên và cơ bản nhất bạn có th?làm với nó. Tokenizing là quá trình chia văn bản thành nhiều phần nh? chẳng hạn như các t?

?đây, chúng ta xem xét các mẫu, s?dụng chức năng chia câu thành các t?và thêm từng t?vào danh sách t? Chúng ta cũng lập danh sách các lớp mà th?của chúng tôi thuộc v?nltk.word_tokenize()

Code mẫu

for intent in intents[‘intents’]:

    for pattern in intent[‘patterns’]:

        #tokenize each word

        w = nltk.word_tokenize(pattern)

        words.extend(w)

        #add documents in the corpus

        documents.append((w, intent[‘tag’]))

        # add to our classes list

        if intent[‘tag’] not in classes:

            classes.append(intent[‘tag’])

Bây gi? chúng ta s?tìm hiểu nghĩa của từng t?và loại b?bất k?t?nào đã có trong danh sách. Lemmatizing là quá trình thay đổi một t?thành dạng b?đ?của nó và sau đó tạo một tệp Pick đ?lưu tr?các đối tượng Python mà chúng ta s?s?dụng khi d?đoán.

Code mẫu

# tách, chia nh?các t?và thực hiện x?lý tránh trùng lặp các t?/span>

words = [lemmatizer.lemmatize(w.lower()) for w in words if w not in ignore_words]

words = sorted(list(set(words)))

# lớp sắp xếp t?/span>

classes = sorted(list(set(classes)))

# documents = s?kết hợp giữa mẫu và d?kiến ý định ng?nghĩa của t?/span>

print (len(documents), “documents”)

# classes = ý định ng?nghĩa của t?/span>

print (len(classes), “classes”, classes)

# words = tất c?các t? t?vựng ng?nghĩa của t?/span>

print (len(words), “unique lemmatized words”, words)

pickle.dump(words,open(‘words.pkl’,’wb’))

pickle.dump(classes,open(‘classes.pkl’,’wb’))

  • Bước 3: Tạo d?liệu đào tạo và kiểm tra d?liệu huấn luyện

Bây gi? chúng ta s?tạo d?liệu huấn luyện, bao gồm c?đầu vào và đầu ra. Mẫu s?là đầu vào của chúng ta và lớp mà mẫu s?là đầu ra của chúng ta. Nhưng máy tính không đọc được ch?nên chúng ta s?biến ch?thành s?

Code mẫu

# Tạo d?liệu huấn luyện

training = []

output_empty = [0] * len(classes)

# Tập huấn luyện cho từng t?trong câu

for doc in documents:

    # khởi tạo t?/span>

    bag = []

    # list các t?được mã hóa trong mẫu

    pattern_words = doc[0]

    pattern_words = [lemmatizer.lemmatize(word.lower()) for word in pattern_words]

    # tạo mảng t?của chúng ta bằng 1, nếu tìm thấy t?khớp trong mẫu hiện tại

    for w in words:

        bag.append(1) if w in pattern_words else bag.append(0)

    # đầu ra là ‘0’ cho mỗi th?và ‘1’ cho th?hiện tại (cho mỗi mẫu)  (for each pattern)

    output_row = list(output_empty)

    output_row[classes.index(doc[1])] = 1

    training.append([bag, output_row])

# xáo trộn các tính năng của chúng tôi và biến thành np.array

random.shuffle(training)

training = np.array(training)

# tạo danh sách đào tạo và kiểm tra. X – mẫu, Y – ý định

train_x = list(training[:,0])

train_y = list(training[:,1])

print(“Training data created”)

  • Bước 4: Xây dựng mô hình

Bây gi?d?liệu đào tạo của chúng ta đã sẵn sàng, chúng ta s?xây dựng mạng lưới thần kinh với mô hình máy học sâu 3 lớp. Chúng ta thực hiện việc này bằng Keras  API tuần t? Sau khi huấn luyện mô hình trong 500 lần lặp, nó chính xác 100%. Hãy đặt tên tập tin là “ chatbot model.h5?và lưu nó.

Code mẫu

# Tạo mô hình – 3 lớp. Lớp đầu tiên 128 nơ-ron, lớp th?hai 64 nơ-ron và lớp đầu ra th?3 chứa s?lượng nơ-ron với softmax là s?lượng ý định đ?d?đoán.

model = Sequential()

model.add(Dense(128, input_shape=(len(train_x[0]),), activation=’relu’))

model.add(Dropout(0.5))

model.add(Dense(64, activation=’relu’))

model.add(Dropout(0.5))

model.add(Dense(len(train_y[0]), activation=’softmax’))

# Biên dịch mô hình. Giảm đ?dốc s?sai lệch ngẫu nhiên với đ?dốc tăng tốc Nesterov cho kết qu?tốt cho mô hình huấn luyện này

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)

model.compile(loss=’categorical_crossentropy’,optimizer=sgd, metrics=[‘accuracy’])

#Tránh lắp quá khớp với mô hình

hist = model.fit(np.array(train_x), np.array(train_y), epochs=500, batch_size=5, verbose=1)

model.save(‘chatbot_model.h5’, hist)

print(“model created”)

  • Bước 5: D?đoán phản hồi (Giao diện người dùng đ?họa (GUI))

Đ?d?đoán câu và nhận được phản hồi t?người dùng, chúng ta hãy tạo một tệp mới có tên chatapp.py

Chúng ta s?tải mô hình đã được đào tạo và sau đó s?dụng giao diện người dùng đ?họa đ?d?đoán phản hồi của bot. Mô hình s?ch?cho chúng ta biết nó thuộc lớp nào, vì vậy chúng ta s?tạo một s?hàm đ?tìm ra lớp đó và sau đó chọn một phản hồi ngẫu nhiên t?danh sách phản hồi. Một lần nữa, chúng ta tải các tệp ‘ words.pkl’ và ‘ classes.pkl ‘ mà chúng ta đã tạo khi huấn luyện mô hình của mình:

Code mẫu

import nltk

from nltk.stem import WordNetLemmatizer

lemmatizer = WordNetLemmatizer()

import pickle

import numpy as np

from keras.models import load_model

model = load_model(‘chatbot_model.h5’)

import json

import random

intents = json.loads(open(‘intents.json’).read())

words = pickle.load(open(‘words.pkl’,’rb’))

classes = pickle.load(open(‘classes.pkl’,’rb’))

Đ?d?đoán lớp huần luyện học máy, chúng ta s?phải đưa ra thông tin đầu vào giống như cách chúng ta đã làm trong quá trình đào tạo. Vì vậy, chúng ta s?tạo một s?hàm thực hiện tiền x?lý trên văn bản và sau đó đoán lớp.

Code mẫu

def clean_up_sentence(sentence):

    # Mã hóa mẫu = chia các t?thành phần t?mảng

    sentence_words = nltk.word_tokenize(sentence)

    # rút gọn t?/span>

    sentence_words = [lemmatizer.lemmatize(word.lower()) for word in sentence_words]

    return sentence_words

# Tr?v?mảng t? 0 hoặc 1 cho mỗi t?trong b?t?tồn tại trong câu

def bow(sentence, words, show_details=True):

    # Mã hóa mẫu

    sentence_words = clean_up_sentence(sentence)

    # T?mẫu trong ma trận N t?vựng

    bag = [0]*len(words)

    for s in sentence_words:

        for i,w in enumerate(words):

            if w == s:

                # Gán 1 nếu t?có trong thư viện t?/span>

                bag[i] = 1

                if show_details:

                    print (“found in bag: %s” % w)

    return(np.array(bag))

def predict_class(sentence, model):

    # Lọc các t?d?đoàn ?ngưỡng chính xác

    p = bow(sentence, words,show_details=False)

    res = model.predict(np.array([p]))[0]

    ERROR_THRESHOLD = 0.25

    results = [[i,r] for i,r in enumerate(res) if r>ERROR_THRESHOLD]

    # Sắp xếp theo cường đ?sác xuất tốt

    results.sort(key=lambda x: x[1], reverse=True)

    return_list = []

    for r in results:

        return_list.append({“intent”: classes[r[0]], “probability”: str(r[1])})

    return return_list

Sau khi d?đoán lớp, chúng ta s?nhận được phản hồi ngẫu nhiên t?danh sách các ý định.

Code mẫu

def getResponse(ints, intents_json):

    tag = ints[0][‘intent’]

    list_of_intents = intents_json[‘intents’]

    for i in list_of_intents:

        if(i[‘tag’]== tag):

            result = random.choice(i[‘responses’])

            break

    return result

def chatbot_response(text):

    ints = predict_class(text, model)

    res = getResponse(ints, intents)

    return res

Bây gi? chúng ta s?tạo giao diện đ?họa người dùng (GUI). Hãy s?dụng thư viện Tkinter, thư viện này có rất nhiều thư viện GUI hữu ích khác.

Chúng ta s?nhận tin nhắn của người dùng và s?dụng các chức năng tr?giúp mà chúng ta đã thực hiện đ?nhận câu tr?lời t?bot và hiển th?nó trên GUI. Đây là mã nguồn đầy đ?của GUI.

#Creating GUI with tkinter

import tkinter

from tkinter import *

def send():

    msg = EntryBox.get(“1.0”,’end-1c’).strip()

    EntryBox.delete(“0.0”,END)

    if msg != ”:

        ChatLog.config(state=NORMAL)

        ChatLog.insert(END, “You: ” + msg + ‘\n\n’)

        ChatLog.config(foreground=”#442265″, font=(“Verdana”, 12 ))

        res = chatbot_response(msg)

        ChatLog.insert(END, “Bot: ” + res + ‘\n\n’)

        ChatLog.config(state=DISABLED)

        ChatLog.yview(END)

base = Tk()

base.title(“CHAT BOT”)

base.geometry(“400×500”)

base.resizable(width=FALSE, height=FALSE)

#Create Chat window

ChatLog = Text(base, bd=0, bg=”white”, height=”8″, width=”50″, font=”Arial”,)

ChatLog.config(state=DISABLED)

#Bind scrollbar to Chat window

scrollbar = Scrollbar(base, command=ChatLog.yview, cursor=”heart”)

ChatLog[‘yscrollcommand’] = scrollbar.set

#Create Button to send message

SendButton = Button(base, font=(“Verdana”,12,’bold’), text=”Send”, width=”12″, height=5, bd=0, bg=”#32de97″, activebackground=”#3c9d9b”,fg=’#ffffff’,                    command= send )

#Create the box to enter message

EntryBox = Text(base, bd=0, bg=”white”,width=”29″, height=”5″, font=”Arial”)

#EntryBox.bind(“<Return>”, send)

#Place all components on the screen

scrollbar.place(x=376,y=6, height=386)

ChatLog.place(x=6,y=6, height=386, width=370)

EntryBox.place(x=128, y=401, height=90, width=265)

SendButton.place(x=6, y=401, height=90)

base.mainloop()

  • Bước 6: Chạy Chatbot Python

Đ?chạy chatbot, chúng tôi có hai tệp chính; train_chatbot.py và chatapp.py.

Đầu tiên, chúng ta huấn luyện mô hình bằng lệnh trong Terminal:

python train_chatbot.py

Nếu chương trình Python đã cài đặt đ?thư viện và môi trường chạy biên dịch cũng như không tìm thấy bất k?sai sót nào trong quá trình đào tạo thì mô hình đã được thực hiện tốt. Sau đó, chúng tôi chạy tệp th?hai đ?khởi động ứng dụng.

python chatgui.py

Trong vài giây, chương trình s?m?một cửa s?GUI. Với GUI, việc nói chuyện với bot thật đơn giản.

Kết qu?chương trình chạy

TẢI XUỐNG MÃ NGUỒN HOÀN THÀNH!

Trong bài viết này, chúng ta đã tìm hiểu v?bước v?cách tạo Chatbot đơn gi?s?dụng thư viện máy học sâu x?lý ngôn ng?t?nhiên (NLTK) trong d?án mã nguồn AI viết bằng Python. Hy vọng bài viết này có th?giúp các bạn sinh viên rất nhiều đ?nâng cao và phát triển các k?năng cũng như ý tưởng logic, điều quan trọng trong việc thực hành lập trình ngôn ng?lập trình python. 

B?môn Ứng dụng phần mềm
Trường Cao đẳng FPT M?ng c c??c bng ? cơ s?Hà Nội

The post Cách tạo Chatbot bằng Python appeared first on Cao Đẳng FPT M?ng c c??c bng ? xét tuyển.

]]>