TFIDF 用于非常短的句子

数据挖掘 机器学习 nltk tfidf
2021-10-01 16:24:42

我正在尝试建立一个回归模型,其中一个特征包含文本数据。我正在考虑使用 scikit-learn 的 sklearn.feature_extraction.text.TfidfVectorizer. 然而,问题是实际的字符串包含很少的单词。平均为 1.8。这是一个示例:

 print(df.keyword)

0 fre lifeproof
1 car stereo
2 analog clock
3 refrigerator

所以我的问题是,

  • TfidfVectorizer适合这种情况吗?或者这种稀疏的结果矩阵不会使模型受益吗?
  • 有没有更适合这种情况的方法?
3个回答

这取决于它的用途,但总的来说,使用短句的 TF-IDF 是有意义的。与更标准的长句案例的主要区别在于,TF(词频)不会发挥任何作用,因为频率几乎总是为 1。但 IDF 仍然有用,假设它与为稀有词分配更多权重相关而不是频繁的单词。

然而问题在于,余弦等比较通常为零,因为两个句子之间几乎没有相同的词。

在我看来,TF-IDF 非常差(或多或少像一个类别特征)并且不采用单词的优先级(大约 80% 的案例有 2 个或更多单词)。

一种可能的方法是为每个句子嵌入 Word2Vect => Doc2Vect。一个很好的实现是 gensim 库:https ://radimrehurek.com/gensim/models/doc2vec.html

Doc2Vect 将提供一个 n 特征向量,可用于您的回归模型(嵌入结果的维度)。

另一种更奇怪的方法是看看如果你将每个句子作为字符串输入会发生什么,然后将序列输入到 LSTM 层中,该层也会为你提供 n 特征结果(LSTM 层的维度)。

字符串是否代表分离的类别?如果是,您可能希望将其用作模型的分类特征。如果有太多单独的类别,您可能希望将它们分组到更高级别的类别中,例如冰箱地图到厨房产品。