【问题标题】:How to classify new sentences with unknown attributes?如何对属性未知的新句子进行分类?
【发布时间】:2016-07-02 09:01:59
【问题描述】:

我正在尝试使用机器学习算法将 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 个,但我不知道它是否需要更多数据。

【问题讨论】:

  • 200 句是不够的例子。
  • “视情况而定”。如果您的所有样本都来自一个非常有限的环境,那么只需几十个就足够了。如果每个样本都是来自不同领域(医学、汽车、计算机、手工艺品等)的短句,你可能需要一半以上,甚至 90% 的时间来进行训练。实验和计数。

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


【解决方案1】:

1) 让我们考虑y_ix_ic_i 分别是yxi-th 支持向量的权重。对于给定的输入 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 个标记数据,您如何评估训练句子数量与预测分数之间的关系?

【讨论】:

  • 从第一个答案的预测公式来看,它试图让“z”对预测值产生影响,但似乎差别不大。因此,通过学习到的特征来预测新句子,而无法预测具有新特征的新句子。如果我错了,请纠正我。
  • 是的,确实如此。
猜你喜欢
  • 2015-01-25
  • 1970-01-01
  • 2022-12-14
  • 2011-06-16
  • 2017-09-30
  • 1970-01-01
  • 2020-11-23
  • 2017-05-03
  • 2021-11-29
相关资源
最近更新 更多