在遇到问题时,我需要一些帮助。我正在训练用于分类模型的文本语料库。这个想法是,文本实际上是作为一个段落(一个或多个)出现的,然后我将其中的每个句子分类(经过一些清理和(或)对课程的预处理之后)。我为此使用word embeddings
和spacy
。
没有预处理步骤,我要做的就是将文本传递给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
。
一个可能的解决方案是按照我的方式做,但编写自己的方法以返回句子的平均向量。但这对我来说似乎效率很低而且毫不费力。
任何减轻此问题的建议将不胜感激。