我正在使用scikit-learn建立一個分類器,預測兩個句子是否爲釋義(例如:解釋:愛因斯坦與什麼是阿爾伯特愛因斯坦的長度有多高)。如何解決Scikit用Numpy數組學習預處理流水線錯誤?
我的數據包含2個字符串(短語對)列和1個目標列,0和1(=無釋義,釋義)。我想嘗試不同的算法。
我期待下面的最後一行代碼適合模型。相反,預處理Pipeline會產生一個我無法解決的錯誤:「AttributeError:'numpy.ndarray'對象沒有'lower'屬性。」
代碼如下,我已隔離出現在最後一行顯示的錯誤(爲簡潔起見,我排除了其餘部分)。我懷疑這是因爲目標列包含0和1,不能轉爲小寫。
我已經嘗試了類似的問題在stackoverflow的答案,但沒有運氣到目前爲止。
你如何解決這個問題?
question1 question2 is_paraphrase
How long was Einstein? How tall was Albert Einstein? 1
Does society place too How do sports contribute to the 0
much importance on society?
sports?
What is a narcissistic What is narcissistic personality 1
personality disorder? disorder?
======
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np
para = "paraphrases.tsv"
df = pd.read_csv(para, usecols = [3, 5], nrows = 100, header=0, sep="\t")
y = df["is_paraphrase"].values
X = df.drop("is_paraphrase", axis=1).values
X = X.astype(str) # I have tried this
X = np.char.lower(X)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3,
random_state = 21, stratify = y)
text_clf = Pipeline([('vect', CountVectorizer()),('tfidf', TfidfTransformer()),
('clf', MultinomialNB())])
text_clf.fit(X_train, y_train)
你能後的1個或2行的樣本數據集? –
謝謝。我已經在問題中添加了一些示例數據。 – twhale
你的火車數據集包含兩列嗎? 'question1'和'question2'? –