
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本篇技术指南以ML-For-Beginners开源课程中「6-NLP / 1-Introduction-to-NLP」一课德语版对应英文原版为骨架系统梳理自然语言处理NLP的核心概念、历史脉络与动手实践。你将理解 NLP 与计算语言学的关系、图灵测试与 ELIZA 在对话系统史上的地位并基于课程配套的 Python 代码亲手构建一个名为 Marvin 的简易对话机器人掌握输入循环、随机响应与文本处理的基本套路。真正的语言理解是困难的。图示来自课程「1-Introduction-to-NLP」的 images 目录6-NLP/1-Introduction-to-NLP/images/comprehension.png。NLP 与计算语言学先厘清两个概念计算语言学Computational Linguistics是一个跨越数十年的研究与开发领域研究计算机如何与语言协同工作甚至理解、翻译并与语言进行沟通。而自然语言处理Natural Language Processing, NLP是与它紧密相关的子领域聚焦于计算机如何处理自然语言即人类日常使用的语言。简单来说计算语言学是更广的学科底座NLP 是把让机器处理人类语言落到工程与机器学习实践上的那部分。课程6-NLP/README.md指出NLP 是人工智能的一个组成部分已存在超过 50 年根植于语言学领域被用于拼写检查、机器翻译等任务并在医学研究、搜索引擎和商业智能等众多领域有实际应用。在本课程章节中NLP 被定位为人类与机器之间经由语音或文本沟通的桥梁。一个你每天都在用的例子手机听写如果你曾经对着手机说话而不是打字或者向虚拟助手提问那么你的语音已经被转换成文本形式然后从你所说的语言中被**解析parsed**出来。检测到的关键词随后被处理成手机或助手能够理解并据以行动的格式。这个流程看起来简单背后却需要一整套程序语音转文本 → 分词/解析 → 关键词识别 → 意图与响应生成。这正是 NLP 在消费级软件中最典型的落地形态也是课程把电话听写作为开篇例子的原因。为什么理解一个句子这么难几十年前一些科幻作家曾预测人类会主要与计算机对话而计算机总能准确理解人类的意思。事实证明这比想象中困难得多。如今问题虽然被理解得更透彻但想要实现完美的自然语言处理仍然面临巨大挑战尤其是理解句子的含义meaning识别幽默与讽刺等情绪sarcasm / sentiment处理歧义与语境依赖。课程同时点出一个有意思的对比人类哪怕是母语者常常分不清一般现在时与现在进行时这类语法细节而计算机恰恰非常擅长套用形式化规则——写代码让程序像人一样解析句子是可行的真正的难点在于后续理解句子的意义与情绪这正是后续课程如情感分析、酒店评论分析要解决的问题。前置条件与工具链本课几乎没有数学要求核心前置条件是能够阅读课程语言编程部分使用 Python示例基于Python 3.8。课程要求掌握 Python 3 的输入、循环、文件读取与数组等基础能力并推荐如下工具Visual Studio Code Python 扩展也可使用任意你熟悉的 Python IDETextBlob一个简化的 Python 文本处理库用于后续课程的分词、词性标注等任务安装命令如下pip install -U textblob python -m textblob.download_corpora第一条命令安装或升级 TextBlob第二条下载其附带的语料库corpora这些语料是后续做词性标注、情感分析等工作所必需的。与机器对话的起点图灵测试与模仿游戏让计算机理解人类语言的历史可以追溯到几十年前最早思考这一问题的科学家之一是艾伦·图灵Alan Turing。20 世纪 50 年代图灵在研究人工智能时设想了一种对话测试让一个人与另一端的对象可能是人也可能是计算机通过书面文字交流如果在一段时间的对话后人类无法判断自己究竟在与人还是与计算机交谈那么是否可以认为这台计算机在思考这就是著名的图灵测试Turing Test。这一想法的灵感来源于一个名为**模仿游戏The Imitation Game**的聚会游戏一名审讯者独自待在一个房间需要判断另一房间中两人各自的性别。审讯者可以递送纸条并提出问题试图从书面回答中推断性别而另一房间的玩家则既要表现诚实又要通过误导性的回答来迷惑审讯者。图灵测试把这种通过问答判断对方是谁的框架移植到了人与机器的判定上。ELIZA最早的心理治疗师聊天机器人20 世纪 60 年代MIT 科学家约瑟夫·维森鲍姆Joseph Weizenbaum开发了ELIZA一个计算机心理治疗师它会向人类提问并营造出理解对方回答的假象。ELIZA 的运作机制值得仔细拆解它能够解析句子、识别特定的语法结构与关键词从而给出看起来合理的回答但并不能真正理解句子。例如当用户说我是I am难过ELIZA 会重组并替换句中的词语回应您难过多久了How long have you been sad。它只是改变了时态、添加了一些词语却给人留下理解并追问的印象。更典型的破绽是当 ELIZA 无法识别某个它没有预设回答的关键词时它会返回一条适用于许多场景的随机回复。比如用户说你是一个自行车You are a bicycle它可能会回答我是自行车多久了——而不是一个合理的回应。这生动地说明了基于模式匹配的对话系统与真正的语义理解之间的鸿沟。上图为课程配套翻译图片资源中的 ELIZA 对话界面示例translated_images/de/eliza.84397454cda9559b.webpELIZA 反复追问您有什么烦恼吗您觉得这其中的关联是什么依靠关键词置换维持对话。动手实验用 Python 构建你的第一个对话机器人课程的核心实践环节是编写一个类似 ELIZA 的对话机器人但刻意做得比 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 条通用回复。源码注释特别说明你可以自行添加更多回复或把它们翻译成你自己的语言——这是课程鼓励的扩展点。引导语程序先打印 4 行欢迎语告知用户机器人叫 Marvin、输入bye可随时结束对话、每次输入后按回车。主循环while True构成无限循环每次通过input( )读取用户输入。退出条件user_input.lower() bye做了一次大小写归一化因此bye、BYE、ByE等任意大小写组合都能触发退出——这是处理用户输入时的实用技巧。随机回复random.choices(random_responses)[0]从列表中随机选取一条回复。注意这里使用的是random.choices返回列表再取下标[0]与random.choice直接返回单个元素效果等价。收尾退出循环后打印告别语。运行效果示例以下示例输出来自课程文档用户输入以开头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!可以观察到回复完全随机、与用户输入内容无关但因为它们是万金油式的通用句子对话在表面上是连贯的。这正是早期聊天机器人看似智能、实则机械的直观演示。停下来想一想课程在实验末尾提出了三个值得深入思考的问题你认为这些随机回复会让某人误以为机器人真的理解了自己吗这个机器人需要具备哪些功能才能更有效如果一个机器人真的能理解一个句子的含义它是否还需要记住对话中之前句子的含义第 3 个问题尤为关键它指向对话系统的状态state与上下文记忆问题——这正是后续课程如用 NLTK 做情感分析和更现代的对话 AI 所处理的课题。挑战把想一想变成代码课程的 挑战环节要求从上面三个停下来想一想的问题中选择一个尝试用代码实现或在纸上用伪代码写出解决方案。例如你可以尝试为机器人增加记住用户刚才说了什么的能力或者为常见关键词如musicweather配置定向回复——这其实就是向 ELIZA 式规则系统迈出的一步。课后作业寻找一个机器人并试图迷惑它课程配套作业6-NLP/1-Introduction-to-NLP/assignment.md非常有趣任务机器人无处不在——网站、银行应用、电话客服例如致电金融服务公司咨询时。请你找到一个真实运行的机器人分析它并尝试迷惑它。如果成功迷惑了它思考为什么会发生这种情况并写一篇短文记录你的体验。评分标准Rubric完成一篇完整的短文说明推测的机器人架构并概述你的体验即可获得优秀Exemplary文章不完整或调研不充分为合格Adequate未提交则为需改进Needs Improvement。这个作业把课堂上的随机回复机器人与真实世界中的商业客服机器人联系起来训练你逆向分析对话系统的能力。本课在课程体系中的位置与下一步本课是ML-For-Beginners课程第六大章节「Getting started with natural language processing」见 6-NLP/README.md的第一课。该章节以欧洲语言与文学为主题背景——你将在后续课程中与简·奥斯汀《傲慢与偏见》中的伊丽莎白·班纳特和达西先生对话并通过欧洲酒店评论学习情感分析。章节共 5 课Introduction to natural language processing本课Common NLP tasks and techniquesTranslation and sentiment analysis with machine learningPreparing your dataNLTK for Sentiment Analysis下一课 6-NLP/2-Tasks/README.md 将介绍 NLP 的常见任务与技术分词Tokenization、词嵌入Embeddings、解析与词性标注Parsing Part-of-speech Tagging、词频统计Word and Phrase Frequencies与N-grams——这些正是本课结尾预告的其他解析自然语言与机器学习的方法也是你在安装 TextBlob 与语料库之后即将动手实践的技能。小结通过本课你可以建立对 NLP 的完整认知框架从计算语言学与 NLP 的概念区分6-NLP/README.md到图灵测试与模仿游戏的历史脉络再到 ELIZA 的机制剖析模式匹配 vs 真实理解最后通过 bot.py 亲手实现一个可运行的对话机器人。核心收获有三点NLP 的本质是让机器处理人类语言难点不在于形式规则计算机擅长而在于语义、情绪与上下文早期对话系统图灵测试、ELIZA通过关键词置换与随机回复营造智能假象理解其局限是学习现代 NLP 的重要铺垫动手路径已经打通安装 TextBlob 与语料库、运行 Marvin 机器人、完成迷惑真实机器人的课后作业即可无缝衔接到分词、词性标注等下一课内容。课程还建议有兴趣的读者进一步阅读计算语言学的学术综述如斯坦福哲学百科的 Computational Linguistics 条目与普林斯顿大学的 WordNet 项目以加深对计算机如何处理语言这一主题的理解。【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考