如何对具有未知属性的新句子进行分类?

时间:2016-03-16 12:58:10

标签: python machine-learning scikit-learn classification text-classification

我试图通过使用机器学习算法将30000个未标记的句子分类为2个标签(例如,pos和neg)。为此,我选择了100个正面句子和100个否定句作为训练集。然后,我使用SVM训练200个选择的句子来创建训练模型。最后,用训练的模型对剩余的29800个未标记的句子进行分类。

但是,我相信当受过训练的模型对剩余的29800个未标记的句子进行分类时,必定会有一些未经训练的未知单词对我创建的模型进行训练。可能有句子不包括任何经过培训的单词,如何进行分类。以下代码使用scikit对句子进行了分类。

import numpy as np
import data
from sklearn import metrics
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline

data = data.Data()

allSent = data.getPosSent() + data.getNegSent()
stopWords = data.getStopwords()

Dataset_X = []
Dataset_Y = []

for meta, label in allSent:
   Dataset_X.append(meta)
   Dataset_Y.append(label)
X_train = np.array(Dataset_X)
Y_train = np.array(Dataset_Y)

classifier_SVC = Pipeline([
   ('vectorizer', CountVectorizer()),
   ('classifier', SVC(kernel='rbf', C=10000000, gamma=1e-08))
   ])
classifier_SVC.fit(X_train, Y_train)

predSent = data.getPredSent()
predSentData = []
for i in range(len(predSent)):
   predSentData.append(predSent[i])
pred = np.array(predSentData)

for i in range(len(predSent)):
  print classifier_SVC.predict(pred)[i]

总之,我的问题是

  • 分类器如何对一个全新的句子进行分类,这意味着训练有素的模型从未见过新句子中包含的任何单词。
  • 我需要多少句话才能训练模型说它足够了?换句话说,我已经训练了200但我不知道它需要更多的数据。

1 个答案:

答案 0 :(得分:0)

1)让我们考虑y_ix_ic_iyx和权重i - 支持向量, 分别。对于给定的输入z,我们计算predict = sgn(sum(c_i*y_i*K(x_i,z))+b),其中b是偏差,K是内核(代码中的rbf内核)。如果z是一个全新的句子,我们会获得predict = sgn(sum(c_i*y_i*exp(-gamma*x_i**2))*exp(-gamma*z**2)+b)

2)这取决于您的数据。你怎么检查多少句话覆盖了多少%的单词?或者,如果您有超过200个标记数据,那么您如何评估受过训练的句子数与预测分数之间的关系?