ML-For-Beginners NLP 入门从图灵测试、Eliza 到写出第一个 Python 对话机器人【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners本篇是 ML-For-Beginners 课程第 6 周「自然语言处理」的第一课带你了解 NLPNatural Language Processing自然语言处理的学科定位与发展脉络——从图灵测试、模仿游戏到 MIT 的 Eliza 程序——并在「无数学公式」的前提下用 Python 3 亲手实现一个名为 Marvin 的随机应答式对话机器人掌握「用户输入循环 退出条件 随机回复」这一构建对话系统的最小骨架为后续课程中的分词tokenization、词性标注POS tagging与情感分析打下基础。NLP 与计算语言学一个应用最广的机器学习领域NLP 是机器学习在生产软件中应用最广、最为人知的领域之一。你可能每天都在使用嵌入了 NLP 功能而不自知的软件——文字处理程序的拼写检查、手机输入法、语音助手都是典型例子。先厘清两个概念计算语言学Computational Linguistics研究计算机如何「工作于、理解、翻译并与语言交流」的研究与开发领域已持续数十年。自然语言处理NLP其相关分支聚焦于计算机如何处理「自然」的、即人类语言。案例手机语音听写的处理链条如果你曾对手机口述文字、或向虚拟助手提问那么你的语音经历了如下处理流程语音被转换成文本形式文本被从你所说的语言中进行解析parsing检测出的关键词被整理成手机或助手能够理解并据此执行的格式。这一技术之所以可行是因为有人编写了相应的计算机程序。几十年前一些科幻作家预言人们将主要靠说话与计算机交互、且计算机总能准确理解其含义——但事实证明这比许多人想象的要难得多。即便在理解「句子意义」方面实现「完美」的自然语言处理依然面临重大挑战当涉及理解幽默、或检测句子中的讽刺情绪时难度尤其高。这里你会想起学校里老师讲解句子语法成分的课堂。有些国家把语法和语言学作为专门学科教授在许多国家这些内容则是语言学习的一部分小学学习读写母语、中学学习第二语言。如果你分不清名词和动词、副词和形容词也别担心如果你被simple present一般现在时与present progressive现在进行时的区别困扰你并不孤单——这对许多母语者来说都有难度。好消息是计算机非常擅长应用形式化规则本课程会教你编写能像人一样解析句子的代码。后续更棘手的挑战才是理解句子的含义meaning与情感sentiment。课程前置条件本课程的唯一硬性前提是能够读懂本课使用的语言不需要解任何数学题。虽然原作者用英文撰写但课程已翻译为多种语言可在仓库translations/目录下找到 40 多种语言版本文中用于对比不同语言语法规则的示例句子不做翻译解释性文字已翻译含义仍可理解。编码任务使用 Python示例基于Python 3.8。你需要并会用到Python 3 基础本课使用input、循环、文件读取、数组Visual Studio Code Python 扩展也可以使用其他 Python IDETextBlob一个简化的 Python 文本处理库按官方说明安装并同时安装语料库corpora命令如下pip install -U textblob python -m textblob.download_corpora提示可以直接在 VS Code 中运行 Python。与机器对话的历史图灵测试、模仿游戏与 Eliza让计算机理解人类语言的历史可追溯数十年之前最早考虑自然语言处理的科学家之一是Alan Turing。图灵测试The Turing Test20 世纪 50 年代Turing 在研究人工智能时设想能否设计一个对话测试让人类通过文字通信与另一个人或一台计算机对话而对话者不确定对方是人还是机器如果经过一定长度的对话后人类无法判断回答来自计算机那么这台计算机能否被认为具有思考能力灵感来源「模仿游戏」这个想法源于一个聚会游戏The Imitation Game提问者独处在房间里任务是判定另一房间中的两个人一男一女分别是谁。提问者可以发送纸条并思考哪些问题能让书面答案暴露对方的性别。当然另一个房间里的玩家可以通过误导性或令人困惑的回答来欺骗提问者同时又要表现出诚实作答的样子。Eliza 的开发20 世纪 60 年代MIT 科学家Joseph Weizenbaum开发了Eliza——一个计算机「心理咨询师」它会向人类提问并营造出理解其回答的样子。Eliza 能解析句子、识别某些语法结构和关键词从而给出合理的回答但谈不上真正理解句子。例如当输入形如「I amsad」的句子时Eliza 可能会重排和替换句子中的词生成回复「How long haveyou beensad」。这营造出 Eliza 理解了陈述并提出了追问的假象而实际上它只是改变了时态、添加了一些词。当 Eliza 找不到可应答的关键词时它会随机回复一条适用于许多不同陈述的通用语句。Eliza 很容易被骗如果用户写「You areabicycle」它可能回复「How long haveI beenabicycle?」而不是一个更合乎逻辑的回答。实战练习编写一个基础对话机器人对话机器人conversational bot与 Eliza 类似引导用户输入并表现得像是理解并智能地回应了输入。与拥有多条规则、营造智能对话假象的 Eliza 不同本课的机器人只有一种能力——用几乎适用于任何琐碎对话的随机回复来维持对话。计划构建对话机器人的步骤如下打印说明文字告知用户如何与机器人交互开始一个循环接受用户输入如果用户要求退出则退出处理用户输入并决定回复本例中回复是从一组可能的通用回复中随机选取的打印回复回到第 2 步继续循环。构建机器人首先定义一组随机回复你可以添加自己的回复或翻译成自己的语言random_responses [That is quite interesting, please tell me more., I see. Do go on., Why do you say that?, Funny weather weve been having, isnt it?, Lets change the subject., Did you catch the game last night?]期望的样例输出如下以开头的行是用户输入Hello, I am Marvin, the simple robot. You can end this conversation at any time by typing bye After typing each answer, press enter How are you today? I am good thanks That is quite interesting, please tell me more. today I went for a walk Did you catch the game last night? I did, but my team lost Funny weather weve been having, isnt it? yes but I hope next week is better Lets change the subject. ok, lets talk about music Why do you say that? because I like music! Why do you say that? bye It was nice talking to you, goodbye!参考实现与源码解析课程提供的完整参考实现位于 solution/bot.py全文如下import random # This list contains the random responses (you can add your own or translate them into your own language too) random_responses [That is quite interesting, please tell me more., I see. Do go on., Why do you say that?, Funny weather weve been having, isnt it?, Lets change the subject., Did you catch the game last night?] print(Hello, I am Marvin, the simple robot.) print(You can end this conversation at any time by typing bye) print(After typing each answer, press enter) print(How are you today?) while True: # wait for the user to enter some text user_input input( ) if user_input.lower() bye: # if they typed in bye (or even BYE, ByE, byE etc.), break out of the loop break else: response random.choices(random_responses)[0] print(response) print(It was nice talking to you, goodbye!)对照上文的四步计划可以从源码结构看其逐条落地方式步骤 1打印交互说明四个print语句依次输出机器人身份「Hello, I am Marvin, the simple robot.」、退出方式输入bye、回车确认方式以及第一句开场白「How are you today?」。步骤 2循环 输入 退出判断 处理 输出while True:建立无限循环input( )以作为提示符阻塞等待用户输入。退出判断使用user_input.lower() bye——先转小写再比较因此BYE、ByE、byE等任意大小写形式都能触发break跳出循环。处理逻辑只有一行random.choices(random_responses)[0]从 6 条通用回复列表中随机抽取一条random.choices返回单元素列表取下标[0]得到字符串。循环结束后的收尾break跳出循环后程序继续执行循环之外的print(It was nice talking to you, goodbye!)这与样例输出最后一行一致。值得注意的是这个机器人没有任何语义分析——它不会把输入与回复关联这正是它与 Eliza 的区别所在Eliza 尚且能通过改写句式营造「理解」的假象而 Marvin 完全靠随机性撑场面。停下来思考Stop and consider你认为这些随机回复能「骗」过人让人以为机器人真的理解了他吗机器人需要具备哪些功能才能更有效如果一个机器人能真正「理解」句子的含义它是否还需要「记住」对话中前几句的含义 挑战Challenge从上面任意一个「停下来思考」问题入手尝试用代码实现它或在纸上用伪代码写出解决方案。课后作业与延伸阅读作业「寻找一个机器人」完整的作业说明见 assignment.md。任务要求你在网站、银行应用或电话客服等场景中找到一个真实机器人分析它并尝试「搞晕」它如果能成功分析你认为原因何在并写一篇短文说明你的经验。评分标准Rubric要求一篇完整页面长度的论文解释所推测的机器人架构并概述你的体验。参考阅读Schubert, Lenhart, Computational Linguistics,The Stanford Encyclopedia of PhilosophySpring 2020 EditionPrinceton University About WordNet. WordNet, 2010.下一课在 Common NLP tasks and techniques 中你将学习分词、词嵌入embeddings、解析与词性标注parsing POS tagging、词/短语频率统计、N-grams 等处理自然语言的常用方法以及机器学习在这些任务中的应用。整个第 6 周课程的完整脉络共 5 课NLP 入门 → 常见任务与技术 → 机器翻译与情感分析 → 酒店评论数据准备 → 用 NLTK 做情感分析见 6-NLP/README.md。【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考