gpt4 book ai didi

performance - 句子词形还原的最快方法

转载 作者:行者123 更新时间:2023-11-30 09:11:55 25 4
gpt4 key购买 nike

所以我目前正在构建一个分类管道,此时 corenlp 词形还原器似乎是一个相当重要的瓶颈。我试图弄清楚我的词形还原的方式是否导致速度变慢,或者词形还原总体上是否很慢。

这是我当前的代码:

 def singleStanfordSentenceToLemmas(sentence: String): Seq[String] = {
val doc = new Annotation(sentence)
pipeline.annotate(doc)
val tokens = doc.get(classOf[TokensAnnotation]).toList
tokens.par.foldLeft(Seq[String]())(
(a, b) => {
val lemma = b.get(classOf[LemmaAnnotation])
if (!(stopWords.contains(b.lemma().toLowerCase) || puncWords.contains(b.originalText())))
a :+ lemma.toLowerCase
else a
}
)
}

这是创建管道的代码

  val props = new Properties()

props.put("annotators", "tokenize, ssplit, pos, lemma")
val pipeline = new StanfordCoreNLP(props)

我目前的理论是

a) 事实上,我使用的是成熟的 coreNLP 对象,它带来了大量的开销,从而减慢了一切。也许有一个更简单的类,只进行词形还原?

b)事实上,词形还原器需要 ssplit,并且 POS 标记似乎非常激烈,因为我只给它单独的句子,是否有更有效的方法来查找单个单词的引理?

c) 也许 corenlp 只是慢,可能有更快的词形还原器。

任何帮助将不胜感激!

最佳答案

a) 是的,那里肯定有开销。您可以摆脱其中的一些,但 CoreNLP 在我看来,在将核心 Pipeline Wrappers 与底层、更直接的实体分离方面似乎相当不一致。但您可以这样做:

import edu.stanford.nlp.process.Morphology
val morph = new Morphology()
...
morph.stem(label)

你还需要类似的东西

private lazy val POSTagger =
new MaxentTagger("edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger")

之前标记过 POS,但我认为这会让您走上正轨。

b) 你不会轻易摆脱这一切。 CoreLabel 是 CoreNLP 周围的主要数据结构,用于向相同元素添加越来越多的数据。因此,词形还原会将引理添加到相同的结构中。词性还原器将使用词性标记来区分名词、动词等,并且也会从那里选择词性标记。

c) 是的,情况也是如此。如何处理这个问题因你的意图和背景而异。例如,我在 Spark 中使用 CoreNLP 来利用分布式集群的全部功能,并且我还预先计算和存储其中一些数据。我希望这能给您一些见解。

关于performance - 句子词形还原的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33488504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com