消息和答案都是您的输入,因此您的特征向量应该包含有关两者的信息。
这是使用 scikit-learn 的可能解决方案的简单结构:
import numpy as np
from sklearn.svm import SVC
from sklearn.feature_extraction import DictVectorizer
dataset = (("Hey @foobar, have you been hacked?",
"@barfoo it seems so, thx for suggesting",
True), # True for relevant, False for not relevant
("Hey @foobar, have you been hacked?",
"Lose 20 pounds quickly! http://blabla.com",
False))
def extractMessageFeatures(message):
# here comes your real feature extraction algorithm
return { 'message_predicted_spam': False,
'message_contains_valid_username': True }
def extractAnswerFeatures(answer):
# here comes your real feature extraction algorithm
return { 'answer_predicted_spam': False,
'answer_contains_valid_username': True }
def extractFeatures(data):
features = []
for instance in data:
instanceFeatures = extractMessageFeatures(data[0])
instanceFeatures.update(extractAnswerFeatures(data[1]))
features.append(instanceFeatures)
return features
def trainClassifier(data):
features = extractFeatures(data)
vec = DictVectorizer()
featureVector = vec.fit_transform(features)
print vec.get_feature_names()
print featureVector.toarray()
svc = SVC()
svc.fit(featureVector, np.array([i[2] for i in data]))
return svc
clf = trainClassifier(dataset)
# now, you can clf.predict(...)
现在,最困难的部分是决定从消息和答案中提取哪些特征。由你决定。
最简单的解决方案之一是使用 n-gram 特征。
其他方法是使用一些垃圾邮件检测来确定答案是否为垃圾邮件,并将此信息视为一个特征。
您还可以使用特定于 Twitter 的信息(例如,用户是否在他们的推文中相互提及,使用相同的主题标签等)。
当然,您可以以任何您喜欢的方式组合这些功能。
除了创建特征提取功能之外,您还需要一个包含消息、答案和相关/非相关标签的标记数据集。
但是,一旦您拥有两者(特征提取功能和适当的数据集),您就可以开始执行与标准机器学习方法明显匹配的任务。