最新使用Python从头开始构建简单的Siri机器人?(1),面试4个月被17家公司拒绝了

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

例子:

考虑一个包含100个单词的文档,其中单词“ phone”出现5次。

那么电话的术语频率(即tf)为(5/100)= 0.05。现在,假设我们有1000万个文档,其中有1000万个单词出现在电话中。然后,反向文档频率(即IDF)计算为log(10,000,000 / 1,000)=4。因此,Tf-IDF权重是这些数量的乘积:0.05 * 4 = 0.20。

TF-IDF可以在scikit学习中实现为:

sklearn.feature_extraction.text导入TfidfVectorizer

余弦相似度

=====

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))

else:

print(“ROBO: “,end=””)

print(response(user_response))

sent_tokens.remove(user_response)

else:

flag=False

print(“ROBO: Bye! take care…”)

就是这样。我们已经用NLTK编写了我们的第一个聊天机器人。现在,让我们看看它如何与人类互动:

使用Python从头开始构建简单的Siri机器人?

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 12
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值