当前位置:   article > 正文

比较两个生产级NLP库:运行Spark-NLP和spaCy的管道

比较两个生产级nlp库:训练spark-nlp和spacy的管道

编者注:文中超链接如果不能访问可以点击“阅读原文”访问本文原页面;可以参考2018年5月21-24日伦敦Strata数据会议上的教学辅导课《使用spaCy和Spark NLP进行自然语言理解》。

在本博客系列的第一篇中我介绍了两个自然语言处理库(John Snow Labs的Apache Spark NLP和Explosion AI的spaCy),并用它们训练了分词和词性标注的模型。在本篇中我将继续构建并运行一个自然语言处理(NLP)管道,来把这些训练好的模型应用于新的文本数据。

导入测试数据是一个具有挑战性的步骤,因为我的测试数据是由未格式化的、未进行句子边界界定的文本构成的,是粗糙的和异构的。我要处理一个包含.txt文件的文件夹,并且需要将结果保存为文字标签的格式以便将其与正确的答案进行比较。下面让我们来解决它:

spaCy

start = time.time()

path = “./target/testing/”

files = sorted([path + f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))])

prediction = {}

for file in files:

    fo = io.open(file, mode=’r’, encoding=’utf-8′)

    content = []

    for doc in nlp_model(re.sub(“\\s+”, ‘ ‘, fo.read())):

        content.append((doc.text, doc.tag_))

    prediction[file] = content

    fo.close()

    

print (time.time() – start)

另一种并行计算方法是使用generator和spaCy的语言管道。 像下面这样的方式也可以解决数据导入的问题。

spaCy

from spacy.language import Language

import itertools

def genf():

    path = “./target/testing/”

    files = sorted([path + f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))])

    for file in files:

        fo = io.open(file, mode=’r’, encoding=’utf-8′)

        t = re.sub(“\\s+”, ‘ ‘, fo.read())

        fo.close()

        yield (file, t)

        

gen1, gen2 = itertools.tee(genf())

files = (file for (file, text) in gen1)

texts = (text for (file, text) in gen2)

start = time.time()

prediction = {}

for file, doc in zip(files, nlp_model.pipe(texts, batch_size=10, n_threads=12)):

    content = []

    for d in doc:

        content.append((d.text, d.tag_))

    prediction[file] = content

print (time.time() – start)

Spark-NLP

var data = spark.read.textFile(“./target/testing”).as[String]

    .map(_.trim()).filter(_.nonEmpty)

    .withColumnRenamed(“value”, “text”)

    .withColumn(“filename”, regexp_replace(input_file_name(), “file://”, “”))

data = data.groupBy(“filename”).agg(concat_ws(” “, collect_list(data(“text”))).as(“text”))

    .repartition(12)

    .

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/554695
推荐阅读
相关标签
  

闽ICP备14008679号