基于Bert和通用句子编码的Spark-NLP文本分类


基于Bert和通用句子编码的Spark-NLP文本分类

文章插图
 
自然语言处理(NLP)是许多数据科学系统中必须理解或推理文本的关键组成部分 。常见的用例包括文本分类、问答、释义或总结、情感分析、自然语言BI、语言建模和消歧 。
NLP在越来越多的人工智能应用中是越来越重要 。如果你正在构建聊天机器人、搜索专利数据库、将患者与临床试验相匹配、对客户服务或销售电话进行分级、从财务报告中提取摘要,你必须从文本中提取准确的信息 。
文本分类是现代自然语言处理的主要任务之一,它是为句子或文档指定一个合适的类别的任务 。类别取决于所选的数据集,并且可以从主题开始 。
每一个文本分类问题都遵循相似的步骤,并用不同的算法来解决 。更不用说经典和流行的机器学习分类器,如随机森林或Logistic回归,有150多个深度学习框架提出了各种文本分类问题 。
文本分类问题中使用了几个基准数据集,可以在nlpprogress.com上跟踪最新的基准 。以下是关于这些数据集的基本统计数据 。
基于Bert和通用句子编码的Spark-NLP文本分类

文章插图
 
简单的文本分类应用程序通常遵循以下步骤:
  • 文本预处理和清理
  • 特征工程(手动从文本创建特征)
  • 特征向量化(TfIDF、频数、编码)或嵌入(word2vec、doc2vec、Bert、Elmo、句子嵌入等)
  • 用ML和DL算法训练模型 。
Spark-NLP中的文本分类在本文中,我们将使用通用句子嵌入(Universal Sentence Embeddings)在Spark NLP中建立一个文本分类模型 。然后我们将与其他ML和DL方法以及文本向量化方法进行比较 。
Spark NLP中有几个文本分类选项:
  • Spark-NLP中的文本预处理及基于Spark-ML的ML算法
  • Spark-NLP和ML算法中的文本预处理和单词嵌入(Glove,Bert,Elmo)
  • Spark-NLP和ML算法中的文本预处理和句子嵌入(Universal Sentence Encoders)
  • Spark-NLP中的文本预处理和ClassifierDL模块(基于TensorFlow)
正如我们在关于Spark NLP的重要文章中所深入讨论的,在ClassifierDL之前的所有这些文本处理步骤都可以在指定的管道序列中实现,并且每个阶段都是一个转换器或估计器 。这些阶段按顺序运行,输入数据帧在通过每个阶段时进行转换 。也就是说,数据按顺序通过各个管道 。每个阶段的transform()方法更新数据集并将其传递到下一个阶段 。借助于管道,我们可以确保训练和测试数据经过相同的特征处理步骤 。
基于Bert和通用句子编码的Spark-NLP文本分类

文章插图
 
Universal Sentence Encoders在自然语言处理(NLP)中,在建立任何深度学习模型之前,文本嵌入起着重要的作用 。文本嵌入将文本(单词或句子)转换为向量 。
基本上,文本嵌入方法在固定长度的向量中对单词和句子进行编码,以极大地改进文本数据的处理 。这个想法很简单:出现在相同上下文中的单词往往有相似的含义 。
像Word2vec和Glove这样的技术是通过将一个单词转换成向量来实现的 。因此,对应的向量“猫”比“鹰”更接近“狗” 。但是,当嵌入一个句子时,整个句子的上下文需要被捕获到这个向量中 。这就是“Universal Sentence Encoders”的功能了 。
Universal Sentence Encoders将文本编码成高维向量,可用于文本分类、语义相似性、聚类和其他自然语言任务 。在Tensorflow hub中可以公开使用预训练的Universal Sentence Encoders 。它有两种变体,一种是用Transformer编码器训练的,另一种是用深度平均网络(DAN)训练的 。
Spark NLP使用Tensorflow hub版本,该版本以一种在Spark环境中运行的方式包装 。也就是说,你只需在Spark NLP中插入并播放此嵌入,然后以分布式方式训练模型 。
为句子生成嵌入,无需进一步计算,因为我们并不是平均句子中每个单词的单词嵌入来获得句子嵌入 。
Spark-NLP中ClassifierDL和USE在文本分类的应用在本文中,我们将使用AGNews数据集(文本分类任务中的基准数据集之一)在Spark NLP中使用USE和ClassifierDL构建文本分类器,后者是Spark NLP 2.4.4版中添加的最新模块 。
ClassifierDL是Spark NLP中第一个多类文本分类器,它使用各种文本嵌入作为文本分类的输入 。ClassifierDLAnnotator使用了一个在TensorFlow内部构建的深度学习模型(DNN),它最多支持50个类 。
基于Bert和通用句子编码的Spark-NLP文本分类

文章插图
 
也就是说,你可以用这个classifirdl在Spark NLP中用Bert、Elmo、Glove和Universal Sentence Encoders构建一个文本分类器 。


推荐阅读