ML-For-Beginners 课程之 NLP 入门:从计算语言学、图灵测试到第一个 Python 对话机器人
2026/9/10 22:31:46 网站建设 项目流程

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 IDE);
  • TextBlob:一个简化的 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.webp):ELIZA 反复追问"您有什么烦恼吗?""您觉得这其中的关联是什么?",依靠关键词置换维持对话。

动手实验:用 Python 构建你的第一个对话机器人

课程的核心实践环节是编写一个类似 ELIZA 的对话机器人,但刻意做得比 ELIZA 更简单:它只有一种能力——用随机回复让对话持续下去,这些回复几乎适用于任何琐碎对话。

实现计划

构建对话机器人的步骤非常清晰:

  1. 打印使用说明,告知用户如何与机器人交互;
  2. 启动一个循环:
    1. 接收用户输入;
    2. 若用户要求退出,则结束循环;
    3. 处理输入并确定回复(此处是从通用回复列表中随机选取一条);
    4. 打印回复;
  3. 跳回步骤 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 we've been having, isn't it?", "Let's 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"做了一次大小写归一化,因此byeBYEByE等任意大小写组合都能触发退出——这是处理用户输入时的实用技巧。
  • 随机回复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 we've been having, isn't it? > yes but I hope next week is better Let's 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!

可以观察到:回复完全随机、与用户输入内容无关,但因为它们是"万金油"式的通用句子,对话在表面上是连贯的。这正是早期聊天机器人"看似智能、实则机械"的直观演示。

停下来想一想

课程在实验末尾提出了三个值得深入思考的问题:

  1. 你认为这些随机回复会让某人误以为机器人真的理解了自己吗?
  2. 这个机器人需要具备哪些功能才能更有效?
  3. 如果一个机器人真的能"理解"一个句子的含义,它是否还需要"记住"对话中之前句子的含义?

第 3 个问题尤为关键,它指向对话系统的状态(state)与上下文记忆问题——这正是后续课程(如用 NLTK 做情感分析)和更现代的对话 AI 所处理的课题。

挑战:把"想一想"变成代码

课程的 🚀 挑战环节要求:从上面三个"停下来想一想"的问题中选择一个,尝试用代码实现,或在纸上用伪代码写出解决方案。例如,你可以尝试为机器人增加"记住用户刚才说了什么"的能力,或者为常见关键词(如"music""weather")配置定向回复——这其实就是向 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 课:

  1. Introduction to natural language processing(本课)
  2. Common NLP tasks and techniques
  3. Translation and sentiment analysis with machine learning
  4. Preparing your data
  5. NLTK 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询