了解特征工程:文本数据的深度学习方法
介绍
处理非结构化文本数据非常困难,尤其是当您尝试构建智能系统时,它可以像人类一样解释和理解自由流动的自然语言。您需要能够处理并将嘈杂的非结构化文本数据转换为一些结构化的矢量化格式,这些格式可以被任何机器学习算法理解。
来自自然语言处理、机器学习或深度学习的原则属于人工智能这一广泛领域,是交易的有效工具。这里需要记住的一个重点是任何机器学习算法都基于统计学、数学和优化原理。因此,它们不够智能,无法以原始原生形式处理文本。
在本文中,我们将讨论特性工程策略,这些策略常常利用深度学习模型。更具体地说,我们将介绍Word2Vec、GloVe 和FastText模型。
动机
在我们之前的文章中,已经多次讨论过这个话题,特征工程是创造卓越和性能更好的机器学习模型的秘诀。但需要注意的是,即使自动化特征工程出现,您仍然需要了解应用这些技术的核心概念。否则,他们就只是黑箱模型,你仍不知道如何调整你想要解决的问题。
传统模式的缺点
用于文本数据的传统(基于计数)特征工程策略涉及属于通称为Bag of Words模型的模型家族。这包括词频、TF-IDF(词频 - 逆文档频率)、N-gram等。虽然它们是从文本中提取特征的有效方法,但由于模型的固有特性只是一堆非结构化的单词,因此我们会丢失附加信息,如每个文本文档中附近单词的语义、结构、序列和上下文。这为我们探索更复杂的模型提供了足够的动力,这些模型可以捕获这些信息,并为我们提供以词语为载体表示的特征,俗称嵌入。
需要词嵌入
为什么我们应该有足够的动力来学习和构建这些词嵌入?关于语音或图像识别系统,所有信息已经以嵌入高维数据集中的丰富密集特征矢量的形式出现,如音频光谱图和图像像素强度。然而,对于原始文本数据,尤其是基于计数的模型,如Bag of Words,我们正在处理可能具有自己的标识符的单个词并且不捕获单词之间的语义关系。这导致了文本数据的巨大稀疏词向量,因此如果我们没有足够的数据,我们最终可能会得到糟糕的模型甚至过度拟合数据。
为了克服语义和特征稀疏的缺点,我们需要利用矢量空间模型(VSM),以便我们可以在这个连续的向量空间中嵌入基于语义和上下文相似的连续向量空间中嵌入词向量。
事实上,分布式语义学领域的分布假设告诉我们,在相同语境中出现和使用的词在语义上彼此相似并具有相似的含义。总之,有两种主要类型的上下文单词向量。基于计数的方法,如潜在语义分析(Latent Semantic Analysis,LSA)可用于计算词汇在语料库中与其相邻单词出现频率的一些统计度量,然后为这些度量中的每个单词构建密集单词向量。像神经网络语言模型这样的预测方法,试图从它的相邻单词中预测单词,并在语料库中查找单词序列,在这个过程中,它学习了分布式表示,从而给我们提供了密集的单词嵌入。
特征工程策略
让我们来看看处理文本数据并从中提取有意义的特征的一些先进策略,这些策略可用于下游机器学习系统。可以在GitHub存储库中访问本文中使用的所有代码(https://github.com/dipanjanS/practical-machine-learning-with-python/tree/master/bonus%20content/feature%20engineering%20text%20data),以备将来参考。在这里我们将首先加载一些基本的依赖和设置。
现在我们将收集一些我们将执行的所有分析的文档的语料库。对于其中一个语料库,我们将重提文本数据的传统方法中的语料库。为了便于理解,我们提供代码如下。
文本预处理
可以有多种方法来清理和预处理文本数据。在自然语言处理(NLP)管道中大量使用最重要的技术。由于本文的重点是特征工程,我们将重新使用我们的简单的文本预处理程序,它侧重于删除特殊字符、额外的空格、数字、stopwords和更低的文本语料库。
一旦我们准备好了基本的预处理流程,我们首先将其应用于玩具语料库。
现在,我们使用NLTK(自然语言处理工具包)加载我们的另一个基于King James版本的语料库并预处理文本。
以下输出显示了我们语料库中的总行数以及预处理如何处理文本内容。