【问题标题】:Can we predict a rating based on text, using NLP?我们可以使用 NLP 根据文本预测评分吗?
【发布时间】:2020-07-06 12:29:12
【问题描述】:

我过去曾使用回归和分类来训练、测试和做出预测。现在,我正在查看一些 NLP 示例代码,一切运行良好,但最后,我希望根据“文本”字段中包含的内容来预测“评分”分数。也许 NLP 不能做到这一点,但它似乎应该是可行的。这是我正在测试的代码。

from sklearn.feature_extraction.text import TfidfVectorizer
tf=TfidfVectorizer()
text_tf= tf.fit_transform(df['review_text'])

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(text_tf, df['reviews.rating'], test_size=0.3, random_state=123)

from sklearn.naive_bayes import MultinomialNB
from sklearn import metrics
# Model Generation Using Multinomial Naive Bayes
clf = MultinomialNB().fit(X_train, y_train)
predicted= clf.predict(X_test)
print("MultinomialNB Accuracy:",metrics.accuracy_score(y_test, predicted))
# around 7% accurate...

现在,基于特定文本,我想预测客户的评分。

y_predicted = clf.predict(text_tf["Didnt know how much i'd use a kindle so went for the lower end. im happy with it, even if its a little dark"])

然后我得到这个错误:IndexError: Index dimension must be <= 2

这个实际评论的实际评级是 4。我期待 'y_predicted' 给我一个 4。也许有一些其他库可以处理这种事情。再次,我认为这应该是可行的。想法?有什么建议吗?

【问题讨论】:

  • 您的标题、正文和结论之间似乎没有任何联系。是的,可以预测收视率。是的,这是可行的。不,它不会使这个库不符合这项任务的要求。您的错误是索引错误,仅此而已。它没有说明任务的可能性。你确定你可以像字典一样索引TfidfVectorizer吗?

标签: python python-3.x nlp tfidfvectorizer


【解决方案1】:

我认为问题在于您要求它预测什么。

Text_tf 是一个大小为 (n_samples, n_features) 的矩阵。这就是您训练模型的内容。它不再有任何文本。您想要的是使用 TfidfVectorizer 以与您对训练样本相同的方式转换您的测试样本。请尝试以下操作:

y_predicted = clf.predict(tf.transform("Didnt know how much i'd use a kindle so went for the lower end. im happy with it, even if its a little dark"))

【讨论】:

  • 我认为这个想法很接近。然而,当我尝试这个时: y_predicted = clf.predict(TfidfVectorizer().fit_transform("不知道我会使用多少 Kindle,所以选择了低端。我很满意,即使它有点暗") ) 我得到了这个: ValueError: Iterable over raw text documents expected, string object received。另外,当我尝试这个时:y_predicted = clf.predict(TfidfVectorizer.transform("不知道我会使用多少 Kindle,所以选择了低端。我很满意,即使它有点暗")) 我得到这个:TypeError:transform()缺少1个必需的位置参数:'raw_documents'
  • 你试过我给你的确切代码了吗? tf 是经过训练的 TfidfVectorizer 实例。
  • 是的,我在你发布的时候试过了。我收到了这个错误:ValueError: Iterable over raw text documents expected, string object received。
  • 我猜它需要一个列表:y_predicted = clf.predict(tf.transform(["Didnt know how much i'd use a kindle so went for the lower end. im happy with it, even if its a little dark"]))
  • 它可以运行,但我输入的所有文本评论都给了我 5 分。即使我知道评级是 1,并且我输入了与该 1 评级相关联的确切文本,我也会得到 5。这里肯定有问题。我会进一步研究。谢谢。
猜你喜欢
  • 2019-05-09
  • 2016-05-30
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 2020-12-30
  • 2013-06-29
  • 2021-09-06
相关资源
最近更新 更多