作者:Veysel Kocaman, Data Scientist & ML Researcher ANKIT CHOUDHARY
翻译:赵春光
校对:申利彬
本文约2800字,建议阅读9分钟
本文介绍Spark NLP中是如何使用Annotator和Transformer的。
[ 导读 ]Pipeline具体来说是一个多阶段的序列,每个阶段由一个Transformer或者Estimator组成。各个阶段按顺序执行,并将输入的DataFrame转换和传递给下一个阶段。数据如此按序的在pipeline中传递。我们现在再来看看Spark NLP是如何使用Annotator和Transformer的。
内容
本文是Spark NLP Library中各annotator系列中的第2篇文章。如果你想更多的学习Spark NLP及对应的概念,请先阅读下述文章:
Introduction to Spark NLP: Foundations and Basic Components (Part-I)
https://medium.com/spark-nlp/introduction-to-spark-nlp-foundations-and-basic-components-part-i-c83b7629ed59
本文主要是作为上篇文章的延续。
在机器学习中,常见的一种做法是运行一系列的算法来处理和学习数据。这种算法序列常被称作做Pipeline。
Pipeline具体来说是一个多阶段的序列,每个阶段由一个Transformer或者Estimator组成。各个阶段按顺序执行,并将输入的DataFrame转换和传递给下一个阶段,数据如此按序的在pipeline中传递。每个阶段的transform()方法函数更新这组数据集并传递到下一阶段。因为有了pipeline,训练数据和测试数据会通过确保一致的特征处理环节。
每个使用的annotator 会在pipeline中的这个data frame新添一列
我们现在来看一下Spark NLP是如果使用Annotator和Transformer完成上述过程。假如我们需要将如下几个环节逐一施加在data frame上:
文本分离成语句
分词
正交化
得到词嵌入向量
下面是通过Spark NLP实现这个pipeline的代码:
from pyspark.ml import Pipeline
document_assembler = DocumentAssembler()\ .setInputCol(“text”)\ .setOutputCol(“document”)
sentenceDetector = SentenceDetector()\ .setInputCols([“document”])\ .setOutputCol(“sentences”)
tokenizer = Tokenizer() \ .setInputCols([“sentences”]) \ .setOutputCol(“token”)
normalizer = Normalizer()\ .setInputCols([“token”])\ .setOutputCol(“normal”)
word_embeddings=WordEmbeddingsModel.pretrained()\ .setInputCols([“document”,”normal”])\ .setOutputCol(“embeddings”)
nlpPipeline = Pipeline(stages=[ document_assembler, sentenceDetector, tokenizer, normalizer, word_embeddings, ])
pipel