手把手教您解决90%的自然语言处理问题

简介: 本文将讲解如何从零开始,有效地处理自然语言问题的指南和技巧:首先解释如何构建机器学习解决方案来解决上面提到的问题。然后转向更细致的解决方案。

0b50c2155cb4d4cf39038542f711458eb55e1bb0

如何将5W和H应用于文本数据!

文本数据无处不在

从文本数据中提取有意义和值得学习的数据是自然语言处理(NLP)的一个非常重要的研究课题。NLP是一个非常大的领域,NLP有几个最常使用的关键应用:

·识别不同的用户/客户群。

·准确的检测和提取不同类别的反馈。

·根据意图对文本进行分类。

本文将讲解如何从头开始有效地处理这些问题的指南和技巧:首先解释如何构建机器学习解决方案来解决上面提到的问题。然后转向更细致的解决方案,比如特性工程、单词向量和深度学习。

第一步:收集你的数据

每个机器学习问题都始于数据。本文中,我们将使用一个名为“社交媒体上的灾难”的数据集:投稿人查看了超过一万条的推文,然后指出每条推文是否提到了灾难事件。

我们的任务是检测哪些推文是关于灾难事件的,因为有潜在的应用专门收集紧急事件并通知执法部门。这个任务的特殊挑战是两个类都包含用于查找推文的相同搜索条件,所以我们不得不用更微妙的差异来区分它们。

在本文中,我们将有关灾难的推文称为“灾难”,其他推文称为“无关紧要的”。正如Richard Socher所描述的那样,查找和标记足够的数据来训练模型比试图优化复杂的无监督方法通常更快、更简单、更便宜。

第二步:清理你的数据

“你的模型只能和你的数据一样好”。一个干净的数据集能够使模型学习有意义的特征,所以应当是先查看数据然后再清理数据。

以下是用来清理你的数据的清单(详见代码):

1、删除所有不相关的字符,例如任何非字母数字字符。

2、把你的文章分成一个个单独的单词。

3、删除不相关的单词。

4、将所有字符转换为小写。

5、考虑将拼错的单词或拼写单词组合成一个单独的表示。

6、考虑词形化。

在遵循这些步骤并检查额外的错误之后,我们可以开始使用干净的、标记的数据来训练模型!

第三步:找到一个好的数据表示

机器学习模型以数值作为输入。我们的数据集是一个句子的列表,所以为了能够提取数据。我们首先要找到一种方法使我们的算法能理解它:也就是数字列表。

e9a861c238f7f01916b15b5b1627c0307b090d85 

一组以数据矩阵表示的笑脸

独热编码(Bag of Words)

计算机文本表示的一种方法是将每个字符单独编码为一个数字(例如ASCII)。这对于大多数数据集来说是不可能的,所以我们需要更高层次的方法。

例如,我们可以在我们的数据集中建立一个所有的单词的词汇表,并将一个唯一的索引与词汇表中的每个单词联系起来。每个句子被表示为一个列表,只要我们的词汇表中有不同单词的数量。在这个列表中的每个索引中,我们标记出在我们的句子中出现了多少次给定的单词。这被称为Bag of Words模型,因为它是一种完全无视我们句子中词语顺序的表现形式。

bbcdeb01276f5287a3739ab7600ad0754b1e7dad 

可视化嵌入

为了查看嵌入是否捕获了与我们的问题相关的信息(例如,tweet是否与灾难有关),我们选择可视化并查看这些类这个方法,但是由于词汇表通常非常大,并且在20000个维度中可视化数据是不可能的,像PCA这样的技术将有助于将数据压缩到两个维度。如下图。

18c1475f51204befafc2f0d643221d95554e84db 

嵌入后这两个类依旧不太好分开,仅仅是降低了维度。为了看Bag of Words特征是否有用,我们根据它们来训练一个分类器。

第四步:分类

当涉及到对数据进行分类时,逻辑回归是最简单可用的工具,训练简单,结果可解释,可以很容易的从模型中提取最重要的系数。将数据分成一个适用于我们的模型和测试集的训练集,以了解它如何推广到不可见的数据。训练结束后得到了75.4%的准确度,虽然这个精度足够满足我们的需求,但是我们还是应该试图去理解它是如何工作的。

第五步:检查

混淆矩阵

第一步是了解我们模型的错误类型,以及哪种类型的错误是最不可取。在我们的例子中,误报是将不相关的tweet归为灾难,而漏报是将灾难归类为不相关的tweet。如果要优先处理每个潜在的事件,就要降低漏报率,如果受到资源的限制,那么会游戏那考虑降低误报率。将这些信息可视化的一个好方法是使用混淆矩阵,将我们的模型与真实标签的预测相比较。理想情况下,矩阵将是从左上角到右下角的对角线。

794c200b9df2c37ffb7630398a69ea562a7d8348 

混淆矩阵

结果显示该分类器漏报率更高。换句话说,我们的模型最常见的错误是将灾难分类为不相关的。

解释我们的模型

验证我们的模型并解释它的预测结果,重要的是看它使用哪些词作出预测。在数据有偏差时,分类器能在样本数据中做出准确预测,但是这个模型在现实世界中不能很好地推广。在这里,我们为灾难和不相关的推文绘制了最关键的单词表。

880c9089f1c5318adcb465cc3a1d4639ff118d72 

我们分类器的词汇库能够处理大量的词汇。然而,有些词是非常频繁的,而且只会对我们的预测造成干扰。所以接下来,我们将尝试用一种方法来表示能够解释单词频率的句子,看看我们是否能从我们的数据中获得更多的信息。

第六步:掌握词汇结构

TF-IDF

为了帮助我们的模型更多地关注有意义的单词,我们可以在我们的单词模型包上使用TF-IDF评分,下图为新嵌入的PCA投影。

7662f03cf3092bdebba1ba923058c2f85d8e33ac 

可视化TF-IDF嵌入

我们可以看到这两个颜色之间的区别更明显了,这使我们的分类器更容易区分。我们在新的嵌入式系统上培训另一个逻辑回归,并最终达到了76.2%的精确度。一个轻微的改善,提高了模型的性能,所以我们可以考虑升级这个模型了。

38c66f810c6bd459751b7b838de7454abc7aaad7 

TF-IDF:文字的重要性

第七步:Leveraging semantics

Word2Vec

即使是最新的模型也没法将训练中没有遇到的单词进行分类,哪怕是非常相似的单词。为了解决这个问题,我们所用的工具叫做Word2Vec。

Word2Vec是一种查找单词连续嵌入的技术。它可以从阅读大量的文本中学习,并记住在类似的语境中出现的单词。论文的作者开放了一个在非常大的语料库中预先训练的模型,预先训练的向量可以在与这个帖子相关的存储库中找到。

语句级别的表示

为我们的分类器获得一个句子嵌入的一个快速方法是平均Word2Vec得分。这跟以前一样是Bag of Words的方法,但是这次我们只丢掉句子的语法,同时保留一些语义信息。

25a71c1575a9b53d762446ca8e2afeafa09a6bf5 

Word2Vec句子嵌入

下图是我们使用以前的技术实现的新嵌入的可视化:

e4d6c91a25c7ff585c190095143def31d4fdc692 

可视化Word2Vec嵌入

在训练了相同的模型三次(逻辑回归)后,我们得到了77.7%的精度分数,这是现阶段得到的最好的结果!

复杂性/ Explainability trade-oG

由于我们的嵌入没有像以前的模型那样被表示为每个单词一维的矢量,所以很难看出哪些单词与我们的分类最相关。虽然我们仍然可以访问我们的逻辑回归的系数,但它们与我们嵌入的300个维度相关,而不是词的索引。然而,对于更复杂的模型,我们可以利用LIME等黑盒解释器来了解我们的分类器如何工作。

LIME

在GitHub上可以获得开源的LIME。它是一种允许用户解释任何分类器决定的黑盒解释器。

2e78fb9f31c4f8f7a47c5cd2a59828a18347b8c8 

正确的灾难词语被识别为“相关的”

01d60ec1f95aee5412facbf5f146916c57a1a4b0 

在这里,词语对分类的贡献似乎不那么明显

我们需要在一个有代表性的测试用例上运行LIME,看看那些词最关键,用这种方法可以得到像以前模型一样重要的分数,并验证我们模型的预测结果。

8b53f3c50fb30e72dfe3d992ef0781284037f63f

Word2Vec:文字的重要性

由上图可得,这个模型收集了相关性非常高的词,暗示它做出了可以解释的预测结果,所以可以放心的部署到生成中。

第八步:使用端到端的方法来利用语法

由于以上方法省略了单词的顺序,丢弃了句子的句法信息,所以这些方法不能提供足够准确的结果。为此您可以使用更复杂的模型,一种常见的方法是将一个句子作为单个单词向量的序列,使用Word2Vec或者如GloVe、CoVe这样的方法。

74b66552cb47f6cc574a4dd07a0c63c36f31bc92 

一个高度eGective端到端架构(源)

卷积神经网络用于句子分类的训练非常迅速,并且是入门级的深度学习体系结构。卷积神经网络在文本相关的任务中表现非常出色,而且通常比大多数复杂的NLP方法(例如LSTMs和编码器/解码架构)要快得多。这个模型保存了单词的顺序,并学习了有价值的信息,其中的单词序列可以预测我们的目标类。训练这个模型不会比之前的方法麻烦,并且能获得79.5%的准确性。所以下一步应该是使用我们描述的方法来探索和解释预测,以验证它确实是部署到用户的最佳模型。

 

本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

文章原标题《How to solve 90% of NLP problems: a step-by-step guide》

作者:Emmanuel Ameisen

译者:奥特曼,审校:袁虎。

文章为简译,更为详细的内容,请查看原文

相关文章
|
存储 缓存 Kubernetes
秒级启动万个容器,探秘阿里云容器镜像加速黑科技
阿里云容器与存储团队展开合作,利用DADI加速器支持镜像按需读取和P2P分发,实现3.01秒启动10000个容器,完美杜绝容器冷启动的数分钟漫长等待,以及镜像仓库大规模并行分发场景下的网络拥堵。
6303 0
秒级启动万个容器,探秘阿里云容器镜像加速黑科技
|
7月前
|
存储 弹性计算 网络协议
买前必看:阿里云轻量应用服务器限制说明:实例、镜像、存储、快照、备案及网络限制整理
阿里云轻量应用服务器面向个人及中小企业,2026年升级至200M峰值带宽、不限流量。本文详述其九大限制:实例数量(50台/地域)、镜像(最多15个)、存储(1系统盘+1数据盘)、快照(3个/实例)、网络(无IPv6、不保底带宽)、备案(需≥3个月)、免费试用(2核4G/1月)及适用场景等,助用户合规高效使用。(239字)
872 1
|
12月前
|
编解码 运维 Linux
2025远程控制软件综合测评:跨平台、低延迟与画质谁更胜一筹
2025年远程控制软件:从性能、画质、功能到跨平台体验,全面解析连连控等主流工具。连连控凭4K/165FPS高帧率、低延迟、屏幕墙批量管理及纯净无广告设计,成专业用户首选,助力远程办公与IT运维高效协同。
|
6月前
|
机器学习/深度学习 数据采集 人工智能
AI重塑金融——风控、量化与智能体的革命
金融行业一直是AI技术应用的前沿阵地。从2024年到2026年,AI在金融领域的渗透从“锦上添花”走向“核心驱动”,从“辅助工具”升级为“自主决策者”
628 1
|
7月前
|
人工智能 算法 数据挖掘
1270万毕业生涌入市场:能拿高薪的,都做对了这三件事
2026届高校毕业生达1270万,再创历史新高。就业难主因非总量过剩,而是“结构性错位”:AI、新能源等新赛道岗位激增却缺人,传统岗位却竞争惨烈。破局关键在于升级三类能力——AI工具应用力、行业+技术跨界力、真实项目实操力。普通人亦可切入AI测试等务实路径。行动,永远是解题第一步。
|
存储 UED 容器
15.HarmonyOS响应式表单设计全解析:条件渲染与状态管理
在现代应用开发中,响应式设计已成为标准实践,它能确保应用在不同设备和屏幕尺寸下提供一致且优质的用户体验。本教程将深入探讨HarmonyOS ArkUI框架中的响应式表单设计技术,特别关注条件渲染和状态管理在创建动态、自适应表单界面中的应用。通过案例分析,我们将学习如何创建一个既美观又灵活的表单输入组件。
450 4
|
数据采集 监控 安全
数字孪生与金融:风险管理的新工具
数字孪生技术通过构建物理实体或系统的虚拟模型,实现对金融市场的实时监控、客户行为分析、市场风险预测及业务流程优化,为金融机构提供了全新的风险管理工具,提升了风险管理的精准度和效率。
|
自然语言处理 算法 前端开发
《深挖React Native社交应用:好友推荐算法设计全解析》
在React Native构建的社交应用中,好友推荐算法是拓展社交网络的核心工具。基于三元闭包理论,通过共同好友数量衡量关系紧密度,优先推荐二度好友;结合用户兴趣标签、行为数据(如互动频率、浏览偏好)及时空维度(如地理位置和时间阶段),实现精准推荐。这些技术不仅洞悉用户潜在需求,还显著提升社交互动质量,为用户打造个性化、高效的社交体验,助力社交应用成功发展。
474 5
《深挖React Native社交应用:好友推荐算法设计全解析》
|
Web App开发 缓存 监控
有哪些常用的缓存清除工具?
有哪些常用的缓存清除工具?
1181 0
|
机器学习/深度学习 资源调度 数据可视化
YOLOv11改进策略【注意力机制篇】| 引入Shuffle Attention注意力模块,增强特征图的语义表示
YOLOv11改进策略【注意力机制篇】| 引入Shuffle Attention注意力模块,增强特征图的语义表示
837 1
YOLOv11改进策略【注意力机制篇】| 引入Shuffle Attention注意力模块,增强特征图的语义表示

热门文章

最新文章