ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ML-For-Beginners NLP 实战:把 Marvin 从随机回复升级为支持情感与名词短语的对话机器人

ML-For-Beginners NLP 实战:把 Marvin 从随机回复升级为支持情感与名词短语的对话机器人 ML-For-Beginners NLP 实战把 Marvin 从随机回复升级为支持情感与名词短语的对话机器人【免费下载链接】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 的作业 Make a Bot talk back丹麦语翻译版英文版见 6-NLP/2-Tasks/assignment.md展开它要求你把上一节写出的只会随机回话的聊天机器人 Marvin升级为能根据输入文本的情感极性选择回应、并识别名词短语追加追问的版本。读完后你将掌握 TextBlob 的polarity分级判断、ConllExtractor名词短语抽取与pluralize()词形处理这三个 NLP 核心 API 的实战用法并能按仓库给定的评分标准rubric独立完成一份可交付的bot.py。作业任务与交付标准作业原文丹麦语版 translations/da/6-NLP/2-Tasks/assignment.md的核心指令可以概括为三点基础能力回顾在前几节课程中你已经编写过一个基础聊天机器人——它会不断给出随机回答直到你输入bye为止升级目标让回复不那么随机——当用户说出特定内容例如why、how这类触发词时触发对应的特定回复技术提示扩展机器人时思考机器学习可以让这类工作少一些手工规则并明确允许使用NLTK 或 TextBlob库来降低实现难度。交付物是一份新的、带文档注释的bot.py文件。仓库中给出的评分标准rubric如下表它直接定义了合格作业的三条边界等级标准优秀Exemplary提交一份新的、有文档说明的bot.py文件合格Adequate提交了一份新的 bot 文件但其中存在 bug需改进Needs Improvement没有提交任何文件这个 rubric 值得注意的一点是它把文档化作为优秀档的必要条件也就是说光把代码跑通还不够还要在代码或配套说明中解释你的机器人是如何做关键词触发与情感判断的。起点上一节的随机回复机器人本次作业的前置成果来自 6-NLP/1-Introduction-to-NLP/README.md 中的练习——模仿 1966 年 MIT 的 Eliza心理治疗师程序写一个只会用随机语句接话的机器人。仓库中的参考答案 6-NLP/1-Introduction-to-NLP/solution/bot.py 的核心逻辑是import random 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?] # ... 打印开场白后进入循环 while True: user_input input( ) if user_input.lower() bye: break else: response random.choices(random_responses)[0] print(response)从源码看这个版本的回复与用户输入完全无关random.choices从固定列表里抽签input()的内容只被用来判断是否退出见 bot.py 第 16-24 行。这正是作业要解决的问题——回复必须与输入产生真实的语义关联。用到的 NLP 概念情感极性与名词短语抽取6-NLP/2-Tasks/README.md 系统介绍了 NLP 常见任务分词tokenization、词嵌入embeddings、句法分析与词性标注parsing POS tagging、词频统计、N-grams、名词短语抽取、情感分析、词形变化inflection与词干/词根还原lemmatization。对本次作业直接起作用的是其中两个情感分析TextBlob 用polarity极性-1.0 到 1.0负向到正向与subjectivity主观性0.0 到 1.0两个维度量化一句话的情感。README 指出一种典型做法是由人工专家标注一份正面/负面词语清单再把该模型套到文本上计算极性得分——TextBlob 的极性计算正是这类基于词典方法的实现这也是机器学习让关键词判断少一些手工的第一层体现你不再自己维护why/how的 if-else而是让库去理解整句的情绪。名词短语抽取从句子中找出主语/宾语这类名词短语例如the quick red fox jumped over the lazy brown dog中可抽出quick red fox与lazy brown dog是理解句意的常用手段。TextBlob 提供的ConllExtractor使用的是基于 ConLL-2000 分块语料训练出的 chunk parsing 模型语料为《华尔街日报》第 15-18 节、约 21 万个 token 作训练集第 20 节约 4.7 万个 token 作测试集。句法解析parsing示意引自 6-NLP/2-Tasks/images/parse.png——名词短语抽取正是建立在这类短语结构识别之上。环境准备按 6-NLP/1-Introduction-to-NLP/README.md 的Prerequisites部分本课程的编码任务基于 Python 3推荐配合 VS Code 的 Python 扩展。安装 NLP 依赖的两条命令pip install -U textblob python -m textblob.download_corpora需要注意的适用前提ConllExtractor在 solution/bot.py 中来自textblob.np_extractors模块它依赖 ConLL-2000 分块语料。如果运行时提示缺少语料请按 TextBlob 官方说明把所需的 corpora如 conll2000 相关语料与 pattern 工具库安装齐全后再运行否则TextBlob(user_input, np_extractorextractor)会因语料缺失而报错。参考实现逐行解析仓库给出的完整参考答案是 6-NLP/2-Tasks/solution/bot.py全文如下import random from textblob import TextBlob from textblob.np_extractors import ConllExtractor extractor ConllExtractor() def main(): print(Hello, I am Marvin, the friendly 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: # Create a TextBlob based on the user input. Then extract the noun phrases user_input_blob TextBlob(user_input, np_extractorextractor) np user_input_blob.noun_phrases response if user_input_blob.polarity -0.5: response Oh dear, that sounds bad. elif user_input_blob.polarity 0: response Hmm, thats not great. elif user_input_blob.polarity 0.5: response Well, that sounds positive. elif user_input_blob.polarity 1: response Wow, that sounds great. if len(np) ! 0: # There was at least one noun phrase detected, so ask about that and pluralise it # e.g. cat - cats or mouse - mice response response Can you tell me more about np[0].pluralize() ? else: response response Can you tell me more? print(response) print(It was nice talking to you, goodbye!) # Start the program main()逐段拆解其关键设计1. 复用 ConllExtractor 实例第 3-4 行在模块加载时即创建ConllExtractor()实例之后每轮对话都通过TextBlob(user_input, np_extractorextractor)复用第 21 行。np_extractor是 TextBlob 的可选参数用于替换默认的短语抽取器user_input_blob.noun_phrases随即返回该句中检测到的名词短语元组。2. 四级极性阈值决定回应语气情感判断的核心在 第 24-31 行它把连续的极性值离散成四个梯度条件回应前缀语气polarity -0.5Oh dear, that sounds bad.明显负面polarity 0Hmm, thats not great.中性偏负polarity 0.5Well, that sounds positive.中性偏正polarity 1Wow, that sounds great.明显正面由于polarity取值范围是[-1.0, 1.0]这四个分支覆盖了整个值域且互不重叠负端先截断然后以 0 和 0.5 为界向上分级。README 特别注明只有四个梯度是示例你可以自行增加更多档位——这是作业留给你的自定义空间比如把中性段再细分为冷淡/平淡/温和。3. 名词短语追问与单复数变化第 33-38 行 处理追问部分只要noun_phrases非空就取第一个短语np[0]调用pluralize()变成复数如cat - cats、mouse - mice拼进Can you tell me more about ...?若未抽到任何名词短语则退化为不带主题的Can you tell me more?。这里的pluralize()就是 README 中Inflection词形变化一节讲的单复数转换能力的实际应用。4. 退出机制与主流程user_input.lower() bye的大小写无关退出判断沿用自上一节的随机机器人外层while True循环与打印开场说明 → 接收输入 → 计算情感回应 → 名词短语追问 → 打印的流程与作业步骤清单完全一致。预期运行输出按 README 给出的示例会话一个符合要求的机器人应产生如下交互用户输入以开头Hello, I am Marvin, the friendly robot. You can end this conversation at any time by typing bye After typing each answer, press enter How are you today? I am ok Well, that sounds positive. Can you tell me more? I went for a walk and saw a lovely cat Well, that sounds positive. Can you tell me more about lovely cats? cats are the best. But I also have a cool dog Wow, that sounds great. Can you tell me more about cool dogs? I have an old hounddog but he is sick Hmm, thats not great. Can you tell me more about old hounddogs? bye It was nice talking to you, goodbye!观察这段输出可以看到两点行为差异输入I am ok时没有抽到名词短语回应退化为不带主题的追问而a lovely cat、a cool dog、an old hounddog都成功抽出名词短语并以复数形式lovely cats、cool dogs、old hounddogs进入追问——这正是ConllExtractorpluralize()链路生效的证据。对照作业要求自查与扩展方向用 rubric 对照上面的实现自查有交付文件新bot.py、无 bug对空名词短语、大小写退出均有兜底分支、有文档代码内注释解释了情感分级与复数化的意图——三者齐备才够优秀档。作业原文还留了两个明确的扩展方向可作为你超出参考实现的加分项关键词触发why、how等特定词应触发特定回复。最简单的做法是在情感判断前增加if why in user_input.lower()之类的检查而更少手工的做法正如作业所提示的——用 NLP 手段例如词性标注后按疑问词/功能词触发或后几节课会学的机器学习分类器替代纯字符串匹配。让机器人更可信README 的 Knowledge Check 提出三个思考题——同情式的回应会不会骗用户以为机器人真的听懂了识别出名词短语是否让机器人更有说服力为什么从句子中抽取名词短语这件事本身有用把这三个问题的答案写进你的bot.py文档中恰好满足 rubric 对documented的要求。小结这份作业的完整技术路径是从 随机回复机器人 出发用 TextBlob 的 polarity 分级 让回应匹配情绪用 ConllExtractor 名词短语抽取与 pluralize 追问 让回应带上用户话题最后按 rubric 三档标准 交付一份带注释的新bot.py。相关背景概念分词、词嵌入、N-grams、情感分析等可继续查阅 6-NLP/2-Tasks/README.md后续章节则会进入情感分析、机器翻译与酒店评论分类等更深入的 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),仅供参考
返回列表