自然语言处理(NLP)与计算机视觉(CV)是当前人工智能领域的两大重要分支。本文将探讨如何通过机器学习方法让机器从文字中理解人类语言的思想。本文作者为 Insight AI 的 Emmanuel Ameisen,他将为我们介绍在大多数任务上需要遵循的基本思路。
无论是初创公司还是成熟企业,文本数据都可以用于验证、改进和扩展产品的功能。从文本数据中提取信息并学习的科学是 NLP 的一个重要研究方向。
NLP 涉及广泛,每天都有新的研究成果涌现。通过与数百家公司的合作,Insight 团队发现以下几个应用场景尤为常见: - 识别不同的用户/客户群体(例如预测客户流失、顾客终身价值、产品偏好) - 准确检测和提取不同类别的反馈(正面和负面的评论/意见,提到的特定属性,如衣服尺寸/合身度等) - 根据意图对文本进行分类(例如寻求一般帮助,紧急问题)
尽管网上有许多 NLP 论文和教程,但找到从头开始高效学习这些方法的指南和技巧并不容易。
结合每年带领数百个项目组的经验以及顶尖团队的建议,本文将介绍如何利用机器学习解决上述 NLP 问题。我们将从最简单的模型开始,逐步介绍更复杂的解决方案,如特征工程、单词向量和深度学习。
阅读完本文后,你将学会: - 收集、准备和检验数据 - 建立简单的模型,必要时转化为深度学习 - 解释和理解模型,确保捕捉的是信息而非噪声
本文不仅提供一步步的详细指导,还可以作为提供有效标准方法的高层次概述。
每个机器学习项目都始于数据。文本信息的常见来源包括: - 产品评论(来自亚马逊、Yelp 和各种应用商店) - 用户发布的内容(推文、Facebook 上的帖子、StackOverflow 上的问题) - 客户支持记录(客户请求、支持票据、聊天记录)
本文将使用由 CrowdFlower 提供的「社交媒体中出现的灾难」数据集。编者检查了超过 1 万条推文,筛选出与灾难事件相关的推文,排除了无关话题(如电影评论)。
我们的任务是区分灾难性事件与无关事件。例如,当发生紧急事件时,我们希望执法部门能够及时收到通知,而不是在讨论某部电影时被干扰。
我们已经标注了数据,因此知道每条推文属于哪个类别。Richard Socher 提醒我们,标记数据通常比优化复杂的无监督方法更快、更简单、更经济。
遵循的原则是:“模型受限于数据”。数据科学家的重要技能之一是判断下一步是改进模型还是改进数据。先查看数据,再进行清洗,可以确保模型学习到有意义的特征,而不是过度拟合噪声。
以下是一些数据清洗步骤: 1. 删除所有非字母数字字符 2. 将文字分割成单独的单词 3. 删除无关词汇(如推文中的“@”或网址) 4. 将所有字符转换为小写字母 5. 考虑拼写错误和重复拼写的单词归为一类 6. 进行词性还原(如“am”、“are”、“is”统一为“be”)
机器学习模型的输入通常是数值。对于文本数据,我们需要一种方法将其表示为算法可以识别的形式。
一种常见的表示文本的方法是将每个单词单独编码为一个数字。但直接使用这种简单形式的分类器需要从头开始学习单词结构,这在大多数数据集中是不可行的。因此,我们需要更高级的方法。
例如,我们可以为数据集中的所有单词建立一个词汇表,每个单词对应一个不同的数字。这样,句子可以表示为长度为词汇表中不同单词数的列表。在列表的每个索引处,标记该单词在句子中出现的次数。这就是词袋模型(Bag of Words),它忽略了句子中单词的顺序。
当需要对数据进行分类时,通常选择逻辑回归(Logistic Regression),因为它具有通用性和可解释性。训练过程简单,结果也易于解释,便于从模型中提取最重要的参数。
我们将数据分为训练集和测试集。训练完成后,准确率达到 75.4%,这是一个不错的成绩。尽管如此,我们还需要进一步优化模型。
首先,我们需要了解模型的错误类型,特别是最不期望的错误类型。在我们的例子中,误报指将不相关的推文分类为灾难,漏报指将关于灾难的推文归为不相关事件。我们希望降低漏报的情况,以确保在紧急事件发生时能够及时通知执法部门。
我们可以用混淆矩阵来可视化这些信息。理想情况下,混淆矩阵应为从左上到右下的对角线矩阵。
为了验证模型并解释其预测,我们需要查看哪些单词在预测中起主要作用。如果数据有偏差,分类器可能会对样本数据作出准确的预测,但在实际应用中效果不佳。我们可以通过提取和比较模型中的预测系数来找出重要的单词。
为了使模型更关注有意义的单词,我们可以使用 TF-IDF 对词袋模型进行加权。TF-IDF 通过对数据集中单词出现的频率进行加权,并减小高频但只增加噪声的单词的权重。这使得分类器更容易区分两类数据。
经过训练,我们得到了 76.2% 的准确率,这表明 TF-IDF 方法有所改进。
我们的最新模型能够识别高信号单词。然而,如果训练集中没有出现过的单词,模型可能无法准确分类。为了解决这个问题,我们需要捕捉单词的含义。
Word2Vec 是一种通过大量文本学习单词含义的技术。通过阅读大量文本,Word2Vec 记住了哪些单词倾向于出现在相似的上下文中。训练足够多的数据后,每个单词会生成一个 300 维的向量,这些向量表示意思相近的单词。
我们使用预训练的 Word2Vec 模型来提高准确性。通过平均句子中所有单词的 Word2Vec 向量,我们保留了一些语言信息,但忽略了语法。
我们已经介绍了生成简洁句子嵌入的方法。但为了更好地处理文本顺序,我们可以使用更复杂的模型,直接输入整个句子并预测标签。一个常见的方法是使用卷积神经网络(CNN)。
CNN 在处理文本相关任务时表现出色,训练速度也很快。通过 CNN,我们可以捕捉单词顺序并学习哪些单词序列可以预测目标类别。
经过训练,CNN 的准确率达到 79.5%。接下来,我们将继续探索和解释预测结果,以验证它是否是最优模型。
本文总结了成功使用的方法: - 从一个简单快速的模型开始 - 解释其预测 - 了解其错误类型 - 根据这些知识来判断下一步的工作——处理数据还是寻找更复杂的模型
这些方法适用于特定场景,但思想适用于各种问题。希望本文对你有所帮助,欢迎提出意见和问题。