如何对Spacy的span对象执行预处理步骤并随后可以运行.vector?

时间:2019-02-18 14:50:36

标签: python-3.x nlp spacy word-embedding

在遇到问题时,我需要一些帮助。我正在训练用于分类模型的文本语料库。这个想法是,文本实际上是作为一个段落(一个或多个)出现的,然后我将其中的每个句子分类(经过一些清理和(或)对课程的预处理之后)。我为此使用word embeddingsspacy

没有预处理步骤,我要做的就是将文本传递给spacy,spacy给我的句子为doc.sents。然后,我用这些句子制作一个数据框,并在该数据框中的每一行实际上是有效的.vector对象上调用span。这给了我每个句子的平均向量表示,我可以轻松地将其传递给sklearn的分类器之一。

但是,为了改善模型,我决定添加一些预处理和清洁步骤。但这就是我被困住的地方。我对原始文本进行了一些清理,例如删除换行符,多个空格,制表符等,这些都可以。然后,我将清理后的文本称为spacy。 Spacy给我句子,然后将其存储在数据框中。但是,然后我想执行更多的预处理,例如删除停用词,诸如<,>,“,\等错误放置的字符以及其他一些东西。想法是,一旦删除它们,我会再次轻松调用.vector得到平均向量,但是我无法处理数据框中的任何内容,因为它们是不是文本,而是伪造的span对象。我尝试了类似的方法-
df['b'] = df['a'].apply(lambda x: remove_stopwords(x))
remove_stopwords在哪里-
text = (word for word in text if word.text not in STOPWORDS),但最终当我在数据框行上运行.vector时,我会得到-
AttributeError: 'generator' object has no attribute 'vector'

我不知道如何将它们转换回spacy span对象,以便我可以在它们上运行.vector

一个可能的解决方案是按照我的方式做,但编写自己的方法以返回句子的平均向量。但这对我来说似乎效率很低而且毫不费力。

任何减轻此问题的建议将不胜感激。

0 个答案:

没有答案