我正在尝试使用space构建一个多类文本分类器,我已经构建了模型,但面临将其应用于我的完整数据集的问题。到目前为止,我建立的模型在屏幕截图中:
截图下面是我使用Pandas应用于完整数据集的代码:
Messages = pd.read_csv('Messages.csv', encoding='cp1252')
Messages['Body'] = Messages['Body'].astype(str)
Messages['NLP_Result'] = nlp(Messages['Body'])._.cats
但是它给了我错误:
ValueError: [E1041] Expected a string, Doc, or bytes as input, but got: <class 'pandas.core.series.Series'>
在这种情况下我想使用Pandas的原因是数据集有2列:ID和Body。我想将NLP模型仅应用于Body列,但我希望最终的数据集有3列:ID, Body和NLP结果,如上图所示。
Thanks so much
我也试过熊猫的应用方法,但没有运气。代码:
Messages['NLP_Result'] = Messages['Body'].apply(nlp)._.cats
我得到的错误:AttributeError: 'Series'对象没有属性'_'
期望生成如上所述的3列
您应该为Series.apply
调用提供一个可调用对象:
Messages['NLP_Result'] = Messages['Body'].apply(lambda x: nlp(x)._.cats)
这里,NLP_Result
列中的每个值都将赋值给x
变量。
nlp(x)
将创建一个包含您想要访问的必要属性的NLP对象。然后,nlp(x)._.cats
将返回期望的值。
import spacy
import classy classification
import csv
import pandas as pd
with open ('Deliveries.txt', 'r') as d:
Deliveries = d.read().splitlines()
with open ("Not Spam.txt", "r") as n:
Not_Spam = n.read().splitlines()
data = {}
data["Deliveries"] = Deliveries
data["Not_Spam"] = Not_Spam
# NLP model
nlp = spacy.blank("en")
nlp.add pipe("text_categorizer",
config={
"data": data,
"model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",
"device": "gpu"
}
)
Messages['NLP_Result'] = Messages['Body'].apply(lambda x: nlp(x)._.cats)