ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

ML-For-Beginners 之 NLP 入门:从计算语言学到用 Python 构建你的第一个对话机器人

2026/9/12 15:52:46 拓冰建站 浏览量
ML-For-Beginners 之 NLP 入门:从计算语言学到用 Python 构建你的第一个对话机器人 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 中 NLP自然语言处理系列第一课《Introduction to natural language processing》对应仓库内 translations/es/6-NLP/1-Introduction-to-NLP/README.md 及其英文原文 6-NLP/1-Introduction-to-NLP/README.md展开。你将理解 NLP 与计算语言学的关系回顾图灵测试与 Eliza 的历史并亲手用 Python 3.8 实现一个具备伪智能能力的对话机器人。读完本文你可以独立完成课程配套的 作业寻找一个机器人并为后续的 NLP 实战课程词元化、情感分析等打好概念基础。真正的语言理解是困难的。图片来源Jen Looper课程插图位于6-NLP/1-Introduction-to-NLP/images/comprehension.png一、NLP 与计算语言学先厘清两个概念计算语言学Computational Linguistics是一个延续数十年的研究与开发领域它研究计算机如何处理语言——更进一步如何理解、翻译甚至与语言交流。而自然语言处理NLPNatural Language Processing是与之紧密相关的领域聚焦于计算机如何处理自然语言即人类使用的语言。在 ML-For-Beginners 的课程体系中NLP 被定位为机器学习应用最广泛的领域之一并且大量用于生产环境软件。课程大纲6-NLP/README.md对这一单元的定义是NLP 是计算机程序理解人类以口语和书面语表达的语言的能力是人工智能AI的组成部分。它已有超过 50 年的历史根植于语言学领域可用于拼写检查、机器翻译等任务并在医学研究、搜索引擎和商业智能等领域有广泛应用。一个身边的例子手机听写如果你曾经用语音代替打字或向虚拟助手提问那么你的语音首先被转换成文本然后从你所说的语言中被解析parsed。被检测到的关键词会被进一步处理成手机或助手能够理解并据此行动的格式。这个例子说明 NLP 并非遥不可及的技术而是每天发生在你手边的输入法、语音助手和搜索引擎里的真实过程。为什么理解语言这么难这个流程之所以能工作是因为有人编写了计算机程序。几十年前一些科幻作家预测人类将主要与计算机对话而计算机总能准确理解人类意图。遗憾的是这比许多人想象的更难。尽管今天这个问题已被理解得好得多但要实现完美的NLP——特别是理解句子的含义识别幽默或从一句话中检测讽刺这类情绪——仍然面临巨大挑战。这也解释了为什么课程会带你回顾学校里的语法课名词、动词、副词、形容词的区分简单现在时与现在进行时的区别……这些对人类母语者都颇具挑战。好消息是计算机非常擅长应用形式化规则你将要学习的代码可以像人类一样解析句子而更大的挑战——理解句子的意义与情感倾向——则是后续课程的重点。二、课程前置条件与开发环境本节课程几乎没有数学门槛主要前置条件是能读懂课程所用语言无需解方程。以下是环境要求以仓库内文档为准依赖说明Python 3.8所有编码任务均以 Python 3.8 编写涉及输入input、循环、文件读取、数组等基础语法Visual Studio Code Python 扩展也可以使用任意你熟悉的 Python IDETextBlob一个简化的 Python 文本处理库内部构建于 NLTK 与 pattern 之上获取课程仓库并进入本课目录git clone https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners cd ML-For-Beginners/6-NLP/1-Introduction-to-NLP安装 TextBlob 并下载其语料库corpora课程文档给出的命令如下pip install -U textblob python -m textblob.download_corpora 提示你可以在 VS Code 环境中直接运行 Python也可以直接在终端里执行python bot.py运行下文代码。三、与机器对话的历史从图灵测试到 Eliza让计算机理解人类语言的尝试可以追溯至数十年前最早考虑这一问题的科学家之一是艾伦·图灵Alan Turing。图灵测试The Turing Test20 世纪 50 年代图灵在研究人工智能时设想了一个对话式测试通过打字通信让一个人类与一台计算机交谈而交谈中的人类无法确定自己是在与另一个人还是与计算机对话。如果在足够长的对话之后人类仍无法判断回答是否来自计算机那么是否可以认为这台计算机在思考这个想法启发了整个 AI 领域对机器能否思考的长期追问也是 NLP 要解决的核心问题雏形。灵感来源模仿游戏The Imitation Game图灵测试的灵感来自一个名为模仿游戏的聚会游戏一名审讯者独自在一个房间任务是通过纸条提问判断另一房间两人中谁是男性、谁是女性而对面房间的玩家会一边伪装诚实作答一边设法用答案误导和迷惑审讯者。图灵将这种通过书面问答判断对话者身份的博弈结构迁移到了人与机器的场景中。开发 Eliza一个看起来懂你的聊天机器人20 世纪 60 年代MIT 科学家约瑟夫·魏泽鲍姆Joseph Weizenbaum开发了Eliza——一个计算机心理治疗师。它会向人类提问并给人一种理解你回答的印象。Eliza 的工作机制值得拆解这正是本课的核心知识点之一解析句子对输入句子进行解析识别特定的语法结构grammatical constructs和关键词重排与替换当收到形如 I amsad我是 悲伤的的句子时它重组并替换句中词语生成 How long haveyou beensad?你悲伤多久了伪装追问它实际上只是变换了时态、补充了一些词语却制造出理解并追问的假象兜底回复如果找不到它能回应的关键词就随机抛出一句适用于许多场景的通用回复。Eliza 很容易被愚弄如果用户输入 You area bicycle它可能会回应 How long haveI beena bicycle?而不是更合理的回答。这精确地说明了 Eliza 的理解只是关键词匹配加模板替换并不涉及语义理解。注Eliza 的原始描述于 1966 年发表ACM 期刊《ELIZA—A Computer Program for the Study of Natural Language Communication Between Man and Machine》感兴趣可查阅 ACM 存档或百科条目。四、动手实验用 Python 构建基础对话机器人接下来是本课的重头戏——实现一个类似 Eliza 的基础对话机器人。与 Eliza 不同我们的机器人没有多条规则来伪装智能对话它只有一项能力用随机回复让对话继续下去这些回复几乎适用于任何闲聊场景。4.1 构建计划构建对话机器人的步骤打印使用说明告知用户如何与机器人交互启动一个循环接收用户输入如果用户请求退出则退出处理用户输入并确定回复本实验中回复是从一组通用回复中随机挑选打印回复回到第 2 步。这是一个典型的输入—判断—响应循环也是几乎所有基于规则的聊天程序的原型结构。4.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?]仓库中提供了该任务的参考解答 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!)4.3 代码要点解析对照源码有几个实现细节值得展开依据 solution/bot.pyrandom.choices(random_responses)[0]从回复列表中做带权随机选取[0]取出列表形式的返回值中的唯一元素这是本机器人的智能来源——无状态、无记忆、无语义。user_input.lower() bye对输入做小写归一化后再比较因此BYE、ByE、bye等大小写变体都能触发退出这是处理用户输入时的常见防御性写法。死循环 breakwhile True持续监听输入只有用户输入bye才跳出循环并输出告别语保证机器人可以无限次对话。input( )以作为提示符接收一行用户输入与下方示例输出中的行一一对应。4.4 示例运行输出课程文档给出了引导性的示例输出以开头的行是用户输入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!可以看到无论用户说什么机器人都只从六个回复中随机挑选——这正是伪智能的直观演示。4.5 停下来思考课程在实验后设置了三道思考题它们是理解后续 NLP 课程的关键你认为这些随机回复能骗过某人让他以为机器人真的理解了自己吗机器人需要具备哪些特性才能更有效提示主题追踪、状态记忆、语义分析……如果一个机器人真的能理解一句话的含义它是否也需要记住对话中之前句子的含义第 3 问尤其重要——它指向了对话系统的上下文与状态问题这也是后续课程构建更有同情心的机器人的动机。五、NLP 核心技术概念速览下一课预告本课引言提到后续课程会引入解析parsing、语法、名词与动词识别等重要概念。在下一课 6-NLP/2-Tasks/README.md 中你将系统学习这些 NLP 常见任务与技术这里先做概念速览概念一句话说明词元化Tokenization把文本切分为词元/词语需处理标点与不同语言的切分规则词嵌入Embeddings将文本数值化使语义相近或共现的词语在向量空间中聚簇解析与词性标注Parsing POS识别句中词语间的关联并给每个词打上名词、动词、形容词等标签词频与短语频Frequencies统计文本中每个词/短语的出现次数用于大规模文本分析N-grams按固定长度切分词语序列一元、二元、三元直至 n 元名词短语抽取Noun Phrase Extraction抽取出作为主语/宾语的名词短语是理解句子含义的常用手段情感分析Sentiment Analysis衡量文本的正负极性polarity 从 -1.0 到 1.0与客观/主观程度屈折变化Inflection与词形还原Lemmatization获取词的单复数形式或将 flew/flies/flying 还原为词元 fly此外课程还提及WordNet——一个包含多语言词语、同义词、反义词等丰富信息的数据库对构建翻译、拼写检查等语言工具极为有用。六、 挑战让机器人更进一步课程给出的挑战任务如下从上面停下来思考的问题中任选一个尝试用代码实现或用伪代码在纸上写出解决方案。例如你可以尝试让机器人记住用户之前提到的名词短语并在后续对话中追问它——这正是下一课 6-NLP/2-Tasks/README.md 中用 NLP 改进机器人实验利用 TextBlob 的情感极性与ConllExtractor名词短语抽取的雏形。七、作业寻找一个机器人本课配套作业见 6-NLP/1-Introduction-to-NLP/assignment.md机器人无处不在。你的任务找到一个并收养它你可以在网站上、银行应用里、电话里找到它们例如致电金融服务公司咨询或查询账户信息时。分析这个机器人看看你是否能迷惑它。如果能你认为这是为什么写一篇短文描述你的经历。评分标准Rubric如下标准优秀合格待改进论文写出完整一页论文说明推测的机器人架构并概述你的使用体验论文不完整或研究不充分未提交论文这个作业的深层意图是让你用本课学到的伪智能 vs 真理解视角去审视真实世界中的 NLP 产品——它们究竟是基于规则的模板匹配如 Eliza还是真的在理解语义八、复习与自研方向计算语言学领域综述可参考《斯坦福哲学百科全书》中 Lenhart Schubert 撰写的 Computational Linguistics 词条2020 春季版。WordNet 的详细介绍可参考普林斯顿大学的 About WordNet 官方页面。继续沿课程路径学习NLP 常见任务与技术第 2 课、翻译与情感分析第 3 课以及基于欧洲酒店评论的数据准备与NLTK 情感分析实战。小结本课用一条清晰的主线带你进入 NLP 世界从计算语言学的学科定位到图灵测试与Eliza的历史启示再到一个可运行的随机回复对话机器人。核心认知是——关键词匹配与模板替换不等于语义理解而让机器真正理解句子含义乃至幽默与讽刺正是后续所有 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),仅供参考