
ML-For-Beginners 之 NLP 入门课自然语言处理导论与用 Python 亲手构建对话机器人【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners自然语言处理NLP是机器学习落地到生产软件最著名的领域之一。本篇文章基于《ML-For-Beginners》课程中 NLP 章节的第一课英文原课位于 6-NLP/1-Introduction-to-NLP/README.md本仓库还收录了包括保加利亚语在内的多语种翻译如 translations/bg/6-NLP/1-Introduction-to-NLP/README.md系统梳理计算语言学的核心概念、图灵测试与 ELIZA 的历史脉络并手把手带你用 Python 3 编写一个能陪聊的简易对话机器人。读完本文你将理解让机器理解语言为何如此困难也能独立跑通机器人代码、读懂其实现细节为后续学习分词、语法解析与情感分析等进阶主题打好地基。真正的语言理解非常困难插图来自课程作者 Jen Looper收录于 6-NLP/1-Introduction-to-NLP/images/comprehension.png这一课学什么语言的想法、定义与概念本课覆盖两大部分内容它们是后续所有 NLP 课程的地基语言languages是怎么一回事语言如何演化发展人类对语言的主要研究方向有哪些计算机处理文本的定义与概念包括解析parsing、语法grammar、识别名词与动词等。本课已含少量编程任务同时引入若干重要概念它们会在后续课程中被一步步实现成代码。本课几乎没有数学公式重点在于建立 NLP 的直觉与历史背景因此非常适合零基础入门。它属于整个《ML-For-Beginners》课程体系中的6-NLP 章节共 5 课的开篇章节入口见 6-NLP/README.md。计算语言学让计算机处理乃至理解语言计算语言学Computational Linguistics是持续了几十年的研究与开发领域研究计算机如何与语言协作甚至如何理解、翻译、使用语言与人沟通。自然语言处理NLP是与之紧密相关的子领域聚焦于计算机如何处理自然语言——也就是人类日常使用的语言。可以先用一个生活场景来建立直觉手机语音听写phone dictation。当你对着手机说话而不是打字或者向虚拟语音助手提问时你的语音首先被转成文本然后被程序按你所说的语言进行解析parsed随后被识别出的关键词会被处理成手机或助手能看懂并据以行动的结构化指令。这个语音 → 文本 → 解析 → 关键词 → 动作的流水线正是 NLP 在生产软件中最典型的应用形态之一。你日常使用的文字处理软件、移动 App中往往都内嵌了某种 NLP 能力不妨观察一下身边哪些产品在悄悄做这件事。为什么完美理解语言是个难题技术之所以能实现是因为有人写了程序。上世纪的一些科幻作家预言人类会主要与计算机对话而计算机总能精确理解人类的意思。现实证明这远比想象中困难——今天这个问题虽然被理解得透彻多了但要达到对句子含义的完美理解仍存在显著挑战尤其是涉及幽默或讽刺sarcasm这类情绪化表达时。一个常被低估的障碍是很多人甚至母语者对基础的语法并不熟练。你可能还记得课堂上老师分析句子成分区分名词noun与动词verb、副词adverb与形容词adjective分清一般现在时与现在进行时。好消息是计算机非常擅长套用形式化规则——你将在后续课程中学习编写能像人一样解析句子的代码真正的难题在于理解句子的含义meaning与情感sentiment这正是 NLP 更深处的挑战。前置要求与工具链本课面向初学者核心前提是会读本课使用的主要语言即可不要求解数学题。动手写代码时需要准备Python 3 基础本课示例基于 Python 3.8会用到输入input、循环loop、文件读取与数组array等基础语法Visual Studio Code Python 扩展推荐在 VS Code 中直接运行 Python也可以任选你习惯的 Python IDETextBlob一个简化版 Python 文本处理库。按如下命令安装到系统务必同时安装其语料库 corporapip install -U textblob python -m textblob.download_corpora说明TextBlob 是为后续课程中真正的文本处理任务分词、词性标注等准备的依赖本课动手环节只需要 Python 标准库random即使尚未安装 TextBlob 也能完成机器人练习。让机器开口说话图灵测试的构想人类让计算机理解自然语言的尝试可以追溯到几十年前最早思考这一问题的科学家之一是艾伦·图灵Alan Turing。图灵测试20 世纪 50 年代图灵在研究人工智能时设想能否设计一场打字对话测试让一个人通过书面交流与另一端的对象对话且不确定对方到底是人还是计算机如果经过足够长的对话人类仍无法判断回答是否出自计算机之手——我们是否可以说这台计算机在思考这就是著名的图灵测试思想实验它把智能/理解从一个哲学问题转化为一个可以被对话实验检验的操作性判据。灵感来源模仿游戏图灵灵感的直接来源是一种派对游戏The Imitation Game模仿游戏审讯者独自待在房间需要通过递纸条提问判断另一房间中两人各自的性别而房间里的玩家会故意用误导性回答来迷惑审讯者同时又要装出诚实作答的样子。图灵把房间里的玩家替换成人与机器便得到图灵测试的雏形——这解释了为何图灵测试本质上考验的是能否骗过人类观察者。ELIZA1960 年代的程序化共情1960 年代MIT 科学家约瑟夫·魏岑鲍姆Joseph Weizenbaum开发了 ELIZA仓库文档中引用原始论文 1966 年发表于 ACM——一个计算机心理治疗师会向人类提问并营造出它听懂了的错觉。ELIZA 的原理很有代表性它能解析句子、识别某些语法结构与关键词从而给出像样的回答但它并不真正理解句子。例如面对格式为 I am难过sad 的句子它会重组并替换句中词语生成 你难过多久了How long have you been sad?这种回应看似在追问实际只是改动词时态、插入几个词若找不到可回应的关键词它就抛出一个适用于许多话题的随机应答它很容易被骗用户输入 You area bicycle你是一辆自行车 时它可能答 How long haveI beena bicycle?我当自行车多久了而非更合理的回复。ELIZA 的价值在于它示范了表面规则的拼装 ≠ 语义理解也让人直观看到基于规则的系统rule-based能做到什么、在何处失效。这正是本课之后引入机器学习方法解析自然语言的动机所在。原课中还配有一段展示 ELIZA 原始程序对话的视频链接见 6-NLP/1-Introduction-to-NLP/README.md建议配合观看加深印象。动手实践用 Python 编写一个基础对话机器人对话机器人chatbot是接收用户输入、看起来像是理解并聪明作答的程序。与 ELIZA 不同我们即将构建的机器人没有一整套让它显得聪明的规则它只有一项能力——用随机应答把对话延续下去。这些泛化应答在几乎所有琐碎闲聊里都接得住话。设计计划构建机器人的步骤非常清晰打印使用说明告诉用户如何与机器人互动进入循环接收用户输入若用户要求退出则结束程序处理输入并决定应答此处为从应答列表里随机挑一条打印应答回到第 2 步继续循环。实现与仓库参考代码课程仓库为这个练习提供了可直接运行的参考实现 6-NLP/1-Introduction-to-NLP/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!)逐段解读这份参考实现能帮你更快写出自己的版本应答池random_responses是一个包含 6 句通用应答的 Python 列表。仓库注释特别提醒你可以自行增删条目甚至翻译成你自己的语言——把机器人本地化就是这么简单开场白4 句print完成自我介绍机器人名叫 Marvin、退出方式输入bye、操作约定每次输入后回车以及开场问题主循环while True让对话持续进行直到显式退出接收输入input( )在终端显示提示符并等待用户输入退出条件if user_input.lower() bye: break。这里用.lower()把输入统一转为小写再比较因此用户无论输入bye、BYE、ByE都能正常退出——处理用户不按规范输入正是健壮交互的第一步随机应答random.choices(random_responses)[0]从列表中随机取一条。需要注意random.choices返回的是列表所以加[0]取出唯一元素若改用random.choice(random_responses)则可直接拿到字符串收尾跳出循环后打印告别语It was nice talking to you, goodbye!。建议先不要看答案参照上述设计计划自己独立编写再用 solution/bot.py 对照改进。预期运行效果下面是课程给出的示例会话以开头的行是用户输入可以作为你验证程序的基准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!可以观察到每次用户发言机器人都会从 6 条应答中随机挑选一条因此同一输入可能得到不同回应示例中连续两次出现Why do you say that?正体现了随机性。停下来思考编写并运行机器人后请思考三个直指 NLP 核心的问题随机应答真的能骗过某人、让他以为机器人理解了自己吗要让机器人更有效它应该具备哪些能力如果一个机器人真能理解某个句子的含义它是否也需要记住对话中之前句子的含义这三个问题分别指向对话智能的评判标准、基于规则/基于学习的解析方法与上下文与记忆是贯穿后续全部 NLP 课程的主线。挑战把思考变成代码挑战任务从上面三个停下来思考的问题中任选其一尝试用代码实现或先在纸上用伪代码写出方案。提示一个可行方向要给 Marvin 增加看起来更懂的能力可以先做关键词规则匹配——例如用if/elif判断输入中是否包含 sad、happy、music 等词并给出针对性应答再回退到随机应答。这正是 ELIZA 当年所用策略的简化版而更进阶的理解含义则需要借助机器学习与词性分析属于后续课程如 6-NLP/2-Tasks的内容。课后作业找到并迷惑一个真实机器人课程配套作业 6-NLP/1-Introduction-to-NLP/assignment.md 会让你把知识带回真实世界机器人无处不在——网站、银行应用、打电话给金融服务公司咨询账户信息时的语音机器人等。作业要求你找到这样一个机器人并尝试迷惑它如果你成功迷惑了它分析这为什么会发生并写一篇短文描述你的体验与猜测的机器人架构。评分标准如下摘自 assignment.md标准优秀合格待改进完成度写出完整一页短文说明假定的机器人架构并详述使用体验短文不完整或调研不充分未提交短文尝试迷惑真实机器人会让你切身体会到基于规则系统与真正的语义理解之间的差距——这也是本课 ELIZA 案例的当代延伸。回顾、延伸阅读与下一步若想继续深入课程推荐了以下延伸资料本课参考书目均为公共学术资料计算语言学Lenhart Schubert 所著的Computational Linguistics收录于《斯坦福哲学百科全书》Stanford Encyclopedia of Philosophy, Spring 2020 版——系统了解计算语言学学科全貌的权威条目WordNet普林斯顿大学 2010 年发布的WordNet词网项目wordnet.princeton.edu——按词义组织的大型英语词汇数据库是后续词义消歧、语义相似度等任务的常用资源。下一步下一课将系统介绍一系列解析自然语言 机器学习的新方法学完本课后你就可以带着语言处理的两大难点句法解析 vs. 语义情感理解的框架继续前行。整章学习可配合课程内置的课前/课后测验详见仓库 quiz-app 与各课 README检验掌握程度。从图灵测试、ELIZA 到 Marvin你已走完 NLP 的启蒙三站——现在动手让机器开口吧。【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考