在当今数字化时代,聊天机器人已经成为日常生活中不可或缺的一部分。无论是在教育门户网站还是电子商务网站上,总能看到“与聊天”的选项。点击后,便进入了一个对话界面。聊天机器人是一种模拟器,用于与人类(特别是客户)互动,以了解他们的疑问或特定查询。由于不能总是有客服支持,有时,会有聊天机器人来理解客户的查询,并专业地回应他们。这个概念并不是最近才出现的;它最早出现在20世纪50年代。艾伦·图灵提出了一个想法:如果一台计算机能够与人交流而不让人意识到是计算机(聊天机器人)在回应,会怎样?这个想法后来被称为“图灵测试”,也就是聊天机器人的起源。1966年,约瑟夫·魏岑鲍姆引入了第一个聊天机器人,并将其命名为E.L.I.Z.A.。总之,聊天机器人可以与以下等式联系起来:
聊天机器人 =人工智能+ 人机交互
为了更好地理解,大多数使用苹果手机的人都有一个叫做S.I.R.I的术语……,称之为聊天机器人,而微软用户有Cortana,谷歌助手等。聊天机器人是这些数字助手的技术术语。
虽然存在许多聊天机器人,但仍有一些形式在其他形式中脱颖而出,这些聊天机器人如下:
根据应用,聊天机器人被分类为:
根据设计,聊天机器人再次被分类为:
聊天机器人在全球范围内有多种用途,但以下是一些关键应用领域,聊天机器人可以被使用:
对于所有概念,核心思想是技术架构,因此将在本主题中查看聊天机器人概念背后的技术架构。让从前端开始,逐步深入到后端以澄清。
在忙碌日程中,大多数人使用Swiggy、Zomato,甚至A.C.T……互联网,或任何其他基本的日常应用程序来满足需求。在这里,考虑的是A.C.T……互联网连接,以便更好地理解,因为这是大流行时期,都知道互联网在生活中有多重要。如果互联网在高峰时段中断,会打开A.C.T……应用程序并提交投诉,看起来像这样。
以下是聊天机器人从零开始工作的最关键步骤:
语料库导入
:这是需要首先处理的确切步骤,因此需要为机器人提供一些基本的短语、陈述或单词,以学习客户发送的查询,因此没有语料库或数据,聊天机器人概念将毫无意义,因为无法通过理解语料库(数据)并用适当的解决方案或回复回应客户询问的查询。例如,如果客户询问一些信息或问题,系统必须理解,并应该合理地回答;否则,聊天或客户服务就没有用处了,对吧!这几乎就像一个对Python、机器学习或任何与数据科学相关的技术一无所知的人参加工作面试。他们会入选吗?不,对吧,因为有关人员没有回答面试官提出的问题。预处理数据(文本大小写处理)
:在导入语料库之后,即使有大量数据或信息(原始数据),如果不进行清理,模型的输出将不准确,因为不洗泥巴衣服就不能穿得适合办公室,对吧?同样,不能在不清理的情况下处理原始数据。因此,在聊天机器人过程中,收到的任何信息或数据,无论是转换为小写还是大写,以避免误解或误表示,因为收到许多数据,为了使其有助于系统理解,需要进行这种转换。分词
:将句子或段落转换为单个单词集合。将转换为术语的主要目的是聊天机器人不会像人类那样理解术语;它将重视单词而不是句子或任何东西。因此,正在将它们转换为单个单词。词干提取
:将屈折变化(特定单词可以是任何时态形式)的单词减少到它们的词干(基本形式)。这几乎就像所有的昵称;名字是实体,类似于词干提取。词袋模型(BoW)
:在将句子转换为单词之后,进行词干提取过程。这种特定的BoW通过向量嵌入将单词转换为数字。这简单地意味着特定单词或单词重复了多少次,并且它们以层次模式放置,如下所示。独热编码
:这是聊天机器人过程中的最后一个。在这里,所有分类变量都被转换为机器学习用于进一步处理的形式(向量到数字/机器级别)。以下是使用Python实现聊天机器人的代码示例:
# 导入库
import numpy as np # 数值计算
import nltk # 自然语言处理库
import string # 字符串用途
import random
# 读取语料库
f = open('program.txt','r',errors = 'ignore')
raw_doc = f.read()
raw_doc = raw_doc.lower()
nltk.download('punkt')
nltk.download('wordnet')
sent_tokens = nltk.sent_tokenize(raw_doc)
word_tokens = nltk.word_tokenize(raw_doc)
# 句子标记样本
sent_tokens[:5]
# 单词标记样本
word_tokens[:5]
# 文本预处理
lemmer = nltk.stem.WordNetLemmatizer()
def LemTokens(tokens):
return [lemmer.lemmatize(token) for token in tokens]
remove_punch_dict = dict((ord(punct), None) for punct in string.punctuation)
def LemNormalize(text):
return LemTokens(nltk.word_tokenize(text.lower().translate(remove_punch_dict)))
# 问候
greet_inputs = ("hey", "hello", "welcome", "vanakkam")
greet_responses = ["vanakkam", "nandrigal", "thanks for the words", "hey thanks man"]
def greet(sentence):
for word in sentence.split():
if word.lower() in greet_inputs:
return random.choice(greet_responses)
# 响应生成
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
def response(user_response):
robo1_response = ''
TfidVec = TfidfVectorizer(tokenizer=LemNormalize, stop_words='english')
tfidf = TfidVec.fit_transformer(sent_tokens)
vals = cosine_similarity(tfidf[-1], tfidf)
idx=vals.argsort()[0][-2]
flat=vals.flatten()
flat.sort()
req_tfidf = float
if(req_tfidf==0):
robo1_response=robo1_response+"I am sorry! I cant understand the query"
return robo1_response
else:
robo1_response = robo1_response+sent_tokens[idx]
return robo1_response
# 对话
flag = True
print("BOT: My name is Premanand. Let's start our conversation!")
while(flag==True):
user_response=input()
user_response=user_response.lower()
if(user_response!='bye'):
if(user_response=='thanks' or user_response=='nandrigal'):
flag = False
print("BOT: Hey thanks for the conversation.. Anything else?")
else:
if(greet(user_response)!=None):
print("BOT:" +greet(user_response))
else:
sent_tokens.append(user_response)
word_tokens=word_tokens+nltk.word_tokenize(user_response)
final_words=list(set(word_tokens))
print("BOT:", end="")
print(response(user_response))
sent_tokens.remove(user_response)
else:
flag=False
print("BOT: Have a nice day! It's nice talking to you!")
通过本文,可以了解到聊天机器人是什么,它的历史和类型,以及聊天机器人的技术架构。此外,还了解了聊天机器人如何逐步工作,从句子到独热编码过程的每个步骤。请在评论区域留下想法/意见。从错误中学习是最喜欢的名言;如果发现有什么不正确的地方,请指出来;渴望向像这样的学习者学习。
阅读博客上更多关于聊天机器人的文章。
关于,简而言之,是Premanand S,助理教授和数据科学研究员。技术爱好:学习Python、机器学习和深度学习。