TF-IDF是一种应用于文本的变换,用于在向量空间中获得两个实值向量。然后,我们可以通过取向量的点积并将其除以其范数的乘积来获得任何一对向量的余弦相似度。得出向量之间角度的余弦值。余弦相似度是两个非零向量之间相似度的量度。使用此公式,我们可以找出任意两个文档d1和d2之间的相似性。
Cosine Similarity (d1, d2) = Dot product(d1, d2) / ||d1|| * ||d2||
其中d1,d2是两个非零向量。
现在,我们对NLP流程有了一个清晰的想法。现在是时候完成真正的任务,即创建聊天机器人了。我们在这里将聊天机器人命名为“ ROBO ”。
导入必要的库
======
import nltk
import numpy as np
import random
import string # to process standard python strings
语料库
===
对于我们的示例,我们将使用聊天机器人的Wikipedia页面作为语料库。复制页面中的内容,并将其放置在名为“ chatbot.txt”的文本文件中。但是,您可以使用您选择的任何语料库。
读取数据
====
我们将读取corpus.txt文件,并将整个语料库转换为句子列表和单词列表,以进行进一步的预处理。
f=open(‘chatbot.txt’,‘r’,errors = ‘ignore’)
raw=f.read()
raw=raw.lower()# converts to lowercase
nltk.download(‘punkt’) # first-time use only
nltk.download(‘wordnet’) # first-time use only
sent_tokens = nltk.sent_tokenize(raw)# converts to list of sentences
word_tokens = nltk.word_tokenize(raw)# converts to list of words
让我们看一个send_tokens和word_tokens的例子
sent_tokens[:2]
[‘a chatbot (also known as a talkbot, chatterbot, bot, im bot, interactive agent, or artificial conversational entity) is a computer program or an artificial intelligence which conducts a conversation via auditory or textual methods.’,
‘such programs are often designed to convincingly simulate how a human would behave as a conversational partner, thereby passing the turing test.’]
word_tokens[:2]
[‘a’, ‘chatbot’, ‘(’, ‘also’, ‘known’]
预处理原始文本
=======
现在,我们将定义一个名为LemTokens的函数,该函数将把令牌作为输入并返回标准化的令牌。
lemmer = nltk.stem.WordNetLemmatizer()
#WordNet is a semantically-oriented dictionary of English included in NLTK.
def LemTokens(tokens):
return [lemmer.lemmatize(token) for token in tokens]
remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)
def LemNormalize(text):
return LemTokens(nltk.word_tokenize(text.lower().translate(remove_punct_dict)))
关键字匹配
=====
接下来,我们将定义机器人的问候语功能,即如果用户输入的是问候语,则机器人应返回问候语响应.ELIZA使用简单的关键字匹配来问候语。我们将在此处使用相同的概念。
GREETING_INPUTS = (“hello”, “hi”, “greetings”, “sup”, “what’s up”,“hey”,)
GREETING_RESPONSES = [“hi”, “hey”, “nods”, “hi there”, “hello”, “I am glad! You are talking to me”]
def greeting(sentence):
for word in sentence.split():
if word.lower() in GREETING_INPUTS:
return random.choice(GREETING_RESPONSES)
产生反应
====
为了产生我们的机器人对输入问题的回应,将使用文档相似性的概念。因此,我们首先导入必要的模块。
- 从scikit学习库中,导入TFidf矢量化器,以将原始文档的集合转换为TF-IDF功能的矩阵。
from sklearn.feature_extraction.text import TfidfVectorizer
- 另外,从scikit学习库导入余弦相似度模块
from sklearn.metrics.pairwise import cosine_similarity
_这将用于查找用户输入的单词与语料库中的单词之间的相似性。_这是聊天机器人的最简单的实现。
我们定义了一个函数响应,该函数在用户的发声中搜索一个或多个已知关键字,并返回几种可能的响应之一。如果找不到与任何关键字匹配的输入,它将返回一个响应:“对不起!我不明白你的意思。”
def response(user_response):
robo_response=‘’
sent_tokens.append(user_response)
TfidfVec = TfidfVectorizer(tokenizer=LemNormalize, stop_words=‘english’)
tfidf = TfidfVec.fit_transform(sent_tokens)
vals = cosine_similarity(tfidf[-1], tfidf)
idx=vals.argsort()[0][-2]
flat = vals.flatten()
flat.sort()
req_tfidf = flat[-2]
if(req_tfidf==0):
robo_response=robo_response+“I am sorry! I don’t understand you”
return robo_response
else:
robo_response = robo_response+sent_tokens[idx]
return robo_response
最后,我们将根据用户的输入来提供我们的机器人在开始和结束对话时要说的内容。
flag=True
print(“ROBO: My name is Robo. I will answer your queries about Chatbots. If you want to exit, type Bye!”)
while(flag==True):
user_response = input()
user_response=user_response.lower()
if(user_response!=‘bye’):
if(user_response==‘thanks’ or user_response==‘thank you’ ):
flag=False
print(“ROBO: You are welcome…”)
else:
if(greeting(user_response)!=None):
print("ROBO: "+greeting(user_response))
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
最后
Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
👉Python所有方向的学习路线👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
👉Python必备开发工具👈
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
👉Python全套学习视频👈
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
👉实战案例👈
学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。
因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。
👉大厂面试真题👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-2NVEnNgZ-1712781781198)]