🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​

📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

​​

 🖍foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟👋

文章目录

什么是自然语言处理?

自然语言处理 (NLP) 技术

1) 代币化

2)词干提取和词形还原

3) 停用词去除

4)TF-IDF

词频

逆向文档频率

5)关键词提取

6) 词嵌入

Word2Vec

8) 主题建模

9) 文本摘要

10)命名实体识别

关键要点


自然语言处理是人工智能的一个子领域,旨在让机器像人类一样理解自然语言。NLP 技术的力量可以追溯到 1950 年代的图灵测试(也称为模仿游戏),该测试用于确定机器是否可以被认为是智能的。”

如果一台计算机能够欺骗人类相信它是人类,那么它就应该被称为智能计算机。”- 艾伦图灵

什么是自然语言处理?

自然语言处理 (NLP) 是计算机科学的一个领域,特别是人工智能 (AI) 的一个子集,专注于使计算机能够像人类一样理解文本和口语。它需要开发算法和模型,使计算机能够理解、解释和生成书面和口头形式的人类语言。

机器中自然语言处理的任务分为两个子任务:-

  • 自然语言理解:不仅旨在处理语言的句法结构,而且还从中导出语义的技术属于此子任务——语音识别、命名实体识别、文本分类。
  • 自然语言生成:从 NLU 派生的知识通过语言生成更进一步。例如 – 问答、文本生成(您在上面读过的 GPT 的诗)、语音生成(在虚拟助手中找到)。  

现在,诸如语言翻译、搜索自动建议之类的NLP应用程序从名称来看可能看起来很简单,但它们是使用一些基本且简单的 NLP 技术的管道开发的。在继续讨论这些技术之前,让我们简要概述一下常用的两种主要类型的 NLP 算法 -

  • 基于规则的系统 - 这些算法使用预定义的规则和模式来处理和理解语言。

  • 基于机器学习的系统——这些算法使用统计和机器学习技术从数据中学习,并根据文本中的模式进行预测或分类。

自然语言处理 (NLP) 技术

自然语言处理 (NLP) 用于从文本中提取数据的十大技术是:

1) 代币化

在进行自然语言处理时,标记化是最基本和最简单的 NLP 技术之一。在为任何 NLP 应用程序预处理文本时,标记化是一个重要步骤。一个长时间运行的文本字符串被分解成更小的单元,称为标记,这些单元构成单词、符号、数字等。这些标记是构建块,有助于在开发 NLP 模型时理解上下文。大多数分词器使用“空格”作为分隔符来形成分词。基于建模的语言和目的,NLP 中使用了多种标记化技术——

  • 基于规则的标记化
  • 空白标记化
  • 空间分词器
  • 子词分词
  • 基于字典的标记化
  • Penn Tree的标记化

让我们尝试在 Python 中实现 Tokenization NLP 技术。我们首先使用 scikit-learn 加载 20newsgroup 文本分类数据集。

该数据集包含 20 个不同类别的新闻。

让我们看一下 20Newsgroup 文本分类数据集中的示例文本。

该文本采用字符串形式,我们将使用 NLTK 的 word_tokenize 函数对文本进行标记。

 上面的输出不是很干净,因为它有单词、标点符号和符号。让我们编写一小段代码来清理字符串,这样我们就只有单词了。

 我们也删除了换行符以及数字和符号,并将所有单词转换为小写。正如您在下面看到的,标记化的输出现在看起来更加清晰。

我们已经了解了如何在单词级别实施标记化 NLP 技术,但是,标记化也发生在字符和子词级别。单词标记化是 NLP 中使用最广泛的标记化技术,但是,要使用的标记化技术取决于您要实现的目标。

2)词干提取和词形还原

分词化之后的预处理流程中下一个最重要的 NLP 技术是词干化或词形还原。例如,当我们在亚马逊上搜索产品时,假设我们不仅希望看到我们在搜索栏中输入的确切单词的产品,还希望看到我们输入的单词的其他可能形式的产品。如果我们在搜索框中输入“衬衫”,那么我们很可能希望看到包含“衬衫”形式的产品结果。在英语中,相似的单词根据其使用的时态及其在句子中的位置而出现不同的情况。例如,go、going、went 等单词都是相同的单词,但根据句子的上下文使用。词干提取或词形还原 NLP 技术旨在从单词的这些变体生成词根。词干提取是一种粗略的启发式过程,它试图通过切断单词的结尾来实现上述目标,最终可能会或可能不会产生有意义的单词。另一方面,词形还原是一种更复杂的技术,旨在通过使用词汇和词的形态分析来正确地做事。通过删除屈折词尾,它返回称为词条的单词的基本形式或字典形式。

让我们通过一个例子来理解词干提取和词形还原之间的区别。有许多不同类型的词干提取算法,但对于我们的示例,我们将使用 NLTK 库中的 Porter Stemmer 后缀剥离算法,因为它效果最好。

从上面的代码可以看出,词干提取基本上是在最后砍掉字母以获得词根。

 

然而,词形还原器甚至成功地获取了“mice”和“ran”等单词的词根。考虑到这样一个事实,词干提取完全基于规则——我们在英语中有后缀来表示时态,比如“ed”、“ing”——比如“asked”和“asking”。它只是在单词末尾查找这些后缀并剪辑它们。这种方法并不合适,因为英语是一种歧义语言,因此词形还原器比词干分析器效果更好。现在,在标记化之后,让我们对 20newsgroup 数据集的文本进行词形还原。

我们已成功对 20newsgroup 数据集中的文本进行词形还原。现在,让我们继续下一步。

3) 停用词去除

词干化或词形还原之后的预处理步骤是停用词删除。在任何语言中,很多单词只是填充词,没有任何附加意义。这些主要是用来连接句子的词(连词——“because”、“and”、“since”)或用来表示一个词与其他词的关系(介词——“under”、“above”、in、in、 “在”) 。这些单词构成了人类语言的大部分,在开发 NLP 模型时并没有真正的用处。然而,停用词移除并不是针对每个模型实施的明确 NLP 技术,因为它取决于任务。例如,在进行文本分类时,如果需要将文本分为不同的类别(类型分类、过滤垃圾邮件、自动标记生成)然后从文本中删除停用词会很有帮助,因为模型可以专注于定义数据集中文本含义的单词。对于类似的任务文本摘要和机器翻译,可能不需要删除停用词。有多种方法可以使用 Genism、SpaCy 和 NLTK 等库来删除停用词。我们将使用SpaCy库来了解停用词删除 NLP 技术。SpaCy 提供了大多数语言的停用词列表。让我们看看如何加载它。

从词形还原文档中删除停用词只需几行代码。

您可以看到所有填充词都被删除了,尽管文本仍然很不干净。删除停用词至关重要,因为当我们在这些文本上训练模型时,由于这些单词的广泛存在,它们被赋予了不必要的权重,而实际上有用的单词则被降低了权重。

4)TF-IDF

TF-IDF 基本上是一种统计技术,用于说明单词对于文档集合中的文档的重要性。TF-IDF 统计度量是通过乘以 2 个不同的值(术语频率和逆文档频率)来计算的。

词频

这用于计算单词在文档中出现的频率。它由以下公式给出:

TF (t, d) = d 中 t 的计数 / d 中单词的数量

通常出现在文档中的单词(例如停用词)——“the”、“is”、“will”将具有很高的术语频率。

逆向文档频率

在讨论逆文档频率之前,让我们首先了解文档频率。在多个文档的语料库中,文档频率衡量一个单词在整个文档语料库中的出现次数(N)。

DF(t)= t 在 N 个文档中出现的次数

对于我们之前讨论过的常用英语单词来说,这个值会很高。逆文档频率与文档频率正好相反。

IDF(t)= N / N 个文档中 t 的出现次数

这基本上衡量了我们语料库中术语的有用性。特定于特定文档的术语将具有较高的 IDF。生物医学、基因组等术语只会出现在与生物学相关的文档中,并且具有较高的 IDF。

TF-IDF = 词频 * 逆文档频率

TF-IDF 背后的整体思想是通过查找文档中出现频率较高但在语料库中其他位置不出现的单词来查找文档中的重要单词。对于与计算机科学相关的文档,这些词可能是 - 计算、数据、处理器等。但对于天文文档,则可能是 - 外星人、银河系、黑洞等。现在,让我们了解 TF-IDF NLP 技术一个使用 Python 中的 Scikit-learn 库的示例 -

还记得我们的第一份文件吗?

本文档属于“rec.autos”类别。让我们看看 TF-IDF 的结果。

 

除了此人的电子邮件 ID 之外,非常特定于汽车类的单词(如 car、Bricklin、bumper 等)具有很高的 TF-IDF 分数。

5)关键词提取

当你在手机、报纸或书本上阅读一段文字时,你会进行这种不自觉的浏览活动——你大多会忽略填充词,并从文本中找到重要的单词,而其他所有内容都符合上下文。关键字提取与在文档中查找重要关键字的作用完全相同。关键词提取是一种文本分析NLP 技术可在短时间内获得对某个主题有意义的见解。不必浏览文档,可以使用关键词提取技术来简洁文本并提取相关关键词。关键字提取技术在 NLP 应用程序中非常有用,在这种应用程序中,企业想要根据评论识别客户遇到的问题,或者如果您想要从最近的新闻项目中识别感兴趣的主题。

做这件事有很多种方法 -

  1. 一种是通过我们上面看到的 TF-IDF。您可以提取 TF-IDF 最高的前 10 个单词,它们将是您的关键字。
  2. 我们用于关键字提取的另一种方法是使用 Gensim,一个开源 Python 库。本文属于 soc.religion.christianity 类别。现在让我们查看关键字。

这将返回按分数排序的前 10 个关键字。由于该文件与宗教有关,因此您应该会找到诸如圣经、经文、基督徒之类的词。

  1. 关键字提取也可以使用 SpaCy、YAKE(Yet Another Keyword Extractor)和 Rake-NLTK 来实现。您应该尝试使用这些库来实现这种 NLP 技术,看看哪个最适合您的用例。

6) 词嵌入

正如我们所知,机器学习和深度学习算法只接受数字输入,那么我们如何将一段文本转换为可以提供给这些模型的数字。在对文本数据训练任何类型的模型时,无论是分类还是回归,将其转换为数字表示是必要条件。答案很简单,遵循词嵌入方法来表示文本数据。这种 NLP 技术可以让您表示具有相似含义的单词,从而获得相似的表示。

词嵌入也称为向量,是语言中单词的数字表示。这些表示的学习使得具有相似含义的单词的向量彼此非常接近。单个单词被表示为实值向量或预定义的 n 维向量空间中的坐标。 这没有多大意义,不是吗?让我们用一个例子来理解这一点。

考虑如上在 3D 平面中表示的 3-3 维空间。每个单词都由该空间中的坐标(x,y,z)表示。在这个 3 维空间中,含义相似的单词会彼此接近。

  • Walking 和 the king 之间的距离将大于 Walking 和 Walking 之间的距离,因为它们具有相同的词根 walk。
  • 词嵌入对于理解词之间的关系也很有用——就像国王之于女王,男人之于女人。因此,在向量空间中,国王和王后之间的距离大约等于男人和女人之间的距离。

可以使用预定义的词嵌入(在维基百科等庞大的语料库上训练),也可以从头开始为自定义数据集学习词嵌入。有许多不同类型的词嵌入,如GloVe、WordVec、TF-IDF、CountVectorizer、BERT、ELMO 等。我们将在这里讨论的是 Word2vec。

Word2Vec

Word2Vec 是一种神经网络模型,可以从庞大的文本语料库中学习单词关联。Word2vec 可以通过两种方式进行训练,即使用通用词袋模型 (CBOW) 或 Skip Gram 模型。

在CBOW模型中,将每个单词的上下文作为输入,并预测与上下文对应的单词作为输出。考虑一个例句——“天气晴朗,阳光明媚。”

在上面的句子中,我们尝试预测的单词是 sunny,使用输入作为单词“The day is Bright”的 one-hot 编码向量的平均值。该输入经过神经网络后与目标词“sunny”的 one-hot 编码向量进行比较。计算损失,这就是 CBOW 中学习“sunny”这个词的上下文的方式。

Skip Gram 模型的工作原理与上述方法正好相反,我们将输入作为目标词“sunny”的单热编码向量发送,并尝试输出目标词的上下文。对于每个上下文向量,我们得到 V 概率的概率分布,其中 V 是词汇大小,也是上述技术中单热编码向量的大小。

现在,让我们看看如何在 python 中实现 Word2vec。第一步是从这里下载谷歌预定义的Word2Vec文件。下一步是将 GoogleNews-vectors-negative300.bin 文件放在当前目录中。您可以使用 Gensim 加载此向量。

这个嵌入有 300 个维度,即对于词汇表中的每个单词,我们都有一个 300 个实数值的数组来表示它。现在,我们将使用 word2vec 和来计算诸如 king、queen、walked 等词之间的距离。

我们关于向量之间距离的假设在这里得到了数学证明。女王与国王之间的距离小于国王与步行者之间的距离。  

7) 情感分析

情感分析也称为情感 AI 或观点挖掘,是文本分类最重要的 NLP 技术之一。目标是将推文、新闻文章、电影评论或网络上的任何文本等文本分类为这 3 个类别之一:正面/负面/中立。情绪分析最常用于减少社交媒体平台上的仇恨言论,并从负面评论中识别出陷入困境的客户。

让我们用 python 实现一个情感分析模型。我们将从这里下载推文情绪 Kaggle 数据集。解压它并将其放在当前目录中。

我们需要处理三个类别 - 0 是中性的,-1 是负面的,1 是正面的。可以看到数据是干净的,所以不需要应用清理功能。但是,我们仍然需要实现其他 NLP 技术,例如标记化、词形还原和停用词删除以进行数据预处理。

那么,让我们开始吧。

 到目前为止,我们还没有做过任何新的事情。我们在文章开头讨论的预处理步骤相同,然后使用 word2vec 将单词转换为向量。现在,我们将数据分为训练数据集和测试数据集,并在训练数据集上拟合逻辑回归模型。

逻辑回归是用于分类问题的线性模型。在转向复杂模型之前,最好先拟合一个简单模型。让我们看看我们在测试集上的表现。

考虑到我们使用逻辑回归等简单模型的默认设置,65% 的准确度已经不错了。您可以进行很多实验来提高机器学习模型的性能 -

  • 试验逻辑回归中的超参数。
  • 使用稍微复杂一点的模型,例如朴素贝叶斯或 SVM。
  • 将文本转换为向量后,使用 MinMax Scaler 等标准化技术。

8) 主题建模

主题建模是一种统计 NLP 技术,可分析文本文档语料库以查找隐藏在其中的主题。最好的部分是,主题建模是一种无监督机器学习算法,这意味着它不需要对这些文档进行标记。这项技术使我们能够以人工注释无法达到的规模来组织和总结电子档案。潜在狄利克雷分配是用于主题建模的最强大的技术之一。基本直觉是每个文档都有多个主题,每个主题分布在固定的词汇表上。让我们通过一个例子来理解这一点。

假设我们有一个文档集合。我们目前正在查看的文件与科学相关,更具体地说与生物学主题相关。本文档有许多主题,在左侧用颜色编码。这些主题广泛涉及基因、生物学、神经科学和计算机科学。这些主题中的任何一个都可能在我们语料库中的任何文档中最重要。对于当前文件,与基因和生物学相关的主题最为重要。现在,让我们尝试在 python 中实现它。在我们开始之前先讲几件事:

  • 我们将使用上面使用的情感分析数据集。
  • 需要预处理步骤——标记化、词形还原和停用词删除。由于我们已经对情绪数据执行了此操作,因此我们将从这里开始。

Corpora.dictionary 负责创建单词与其整数 ID 之间的映射,与字典中的非常相似。现在,让我们对此拟合一个 LDA 模型,并将主题数量设置为 3。

从 LDA 挖掘的主题中,您可以看到政治讨论在 Twitter 上非常常见,尤其是在我们的数据集中。“莫迪”一词颇为流行。这三个主题之间存在非常细微的差别。

  • 第一个话题更多的是关于选举和反对派。
  • 第二个话题的主题不是很明确。
  • 第三个主题是政治和宗教的混合。

您还可以使用 pyLDAvis 可视化这些结果。

每个圆圈代表一个主题,每个主题分布在右侧所示的单词上。

        

您可以将鼠标悬停在每个主题上以查看其中的单词分布。请注意,单词可以在主题之间共享。pyLDAvis 提供了一种非常直观的方式来查看和解释拟合的 LDA 主题模型的结果。

选择主题数量的最佳方式取决于两个因素:

  • 主题应该有不同的可分离主题。一个主题不应包含两个容易分离的主题。在这种情况下,您可以增加主题数量并查看。
  • 主题之间不应有重叠。不同的话题应该有尽可能不同的主题。重叠也可以通过上图中重叠的圆圈看出。

9) 文本摘要

这种 NLP 技术用于以流畅、连贯的方式简洁、简短地总结文本。摘要对于从文档中提取有用信息非常有用,而无需逐字阅读。如果由人来完成,这个过程非常耗时,自动文本摘要从根本上减少了时间。

有两种类型的文本摘要技术。

  • 基于提取的摘要:在这种技术中,提取文档中的一些关键短语和单词来进行摘要。对原文没有做任何改动。

  • 基于抽象的摘要:在这种文本摘要技术中,从捕获最有用信息的原始文档中创建新的短语和句子。摘要的语言和句子结构与原始文档不同,因为这种技术涉及释义。我们还可以克服基于提取的方法中发现的语法不一致。

我们将使用 Spacy 在 python 中实现文本摘要。我们还定义了要总结的文档。

下一步是对文档进行标记并删除停用词和标点符号。之后,我们将使用计数器来计算单词的频率并获取文档中出现频率最高的 5 个单词。

好吧,这很简单。现在,让我们通过除以最大频率来标准化频率,以便更好地处理。

现在,我们将根据单词在句子中出现的频率(使用上述标准化频率)来衡量句子的权重。

 最后一步是使用 nlargest 获取文档中权重最高的 3 个句子来生成摘要。

如果你看到它,总结非常好。genism 中还有其他方法或内置函数可以做到这一点,但结果可能不是那么好。

10)命名实体识别

NER是信息提取的一个子领域,它处理从非结构化文档中定位命名实体并将其分类为预定义的类别,如人名、组织、位置、事件、日期等。NER 在某种程度上类似于关键字提取,只不过提取的关键字被放入已经定义的类别中。这确实比我们在关键字提取方面领先一步。Spacy 中有内置函数可以执行此操作。我们将使用一篇文章的新摘录。

SpaCy 可以在一两行中轻松地从中提取实体。

与提取的实体关联的预定义类别是不言自明的,除了:

  • CARDINAL- 代表可数的数字。
  • GPE-代表国家、城市、州。
  • NORP- 适用于民族或宗教或政治团体。 

要了解有关这些类别的更多信息,您可以参考此文档。我们还可以使用 SpaCy 提供的函数 displacy 来可视化带有实体的文本。
 

在这里,我们使用了预定义的 NER 模型,但您也可以从头开始训练自己的 NER 模型。但是,当数据集非常特定于域并且 SpaCy 无法在其中找到大多数实体时,这很有用。通常发生这种情况的例子之一是印度城市和公众人物的名字——spacy 无法准确地标记它们。

关键要点

  • 这些属于文本预处理领域的 NLP 技术中的一些 - 标记化、词形还原、停用词删除将被使用,而不管你正在使用的 NLP 应用程序如何。
  • 而其他技术在分析文本时更有用,例如 TF-IDF、关键字提取、文本摘要和 NER。它们还可以作为在分类任务上训练 NLP 模型时的骨干,因为它们可以轻松地从文本中提取有用的信息。
  • 主题建模等 NLP 技术在从大型语料库中提取主题和标记数据集方面非常yuyu
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐