如何为机器学习问题训练基于文本的数据?

数据挖掘 机器学习 分类 nlp 逻辑回归
2022-02-23 19:52:30
  1. 我正在开发一个基于搜索查询按上下文向客户显示产品的项目。例如,我不希望客户必须输入特定的产品名称,而是根据功能进行搜索(例如,“墙壁不太热”会返回产品名称,例如“Whirlpool NEO IC355 ROY 3S 340 L Double Door Refrigerator ")
  2. 我有一个由功能相关产品组成的训练集。我打算使用逻辑回归来训练这些数据的模型。如何在 Python 中处理这些数据或提取特征以输入逻辑回归?我听说过“词袋模型”,但不确定如何使用它,或者它甚至适用于这里?

我知道有很多可用的 NLTK 库。但是,我想从头开始实现它,或者尽可能使用最少的外部库。

请帮助或有任何资源可以参考?

3个回答

在我看来,您的问题更像是排名问题而不是分类问题。您是否尝试过更简单的方法,例如具有 unigram 文本表示、Tf-Idf 术语权重和余弦相似度度量的 1-NN“分类器”?它与最先进的技术相去甚远,但它往往在检索和推荐任务中给出相当好的结果。

对于您的特定问题,我不确定使用监督逻辑回归方法是否理想,但我认为这是一个不同且更大的主题。要回答您的问题,是的,您可以使用文本的“词袋”表示。Python 的库通过sci-kit learn提供此功能这将导致 n-gram 的稀疏矩阵表示以及这些 n-gram 在您的语料库中的出现。从这里你基本上有 2 个选项,(1) 直接在稀疏矩阵上训练你的监督模型或 (2) 减少你的稀疏矩阵的维度,以便它被表示为一个密集矩阵。幸运的是 sklearn 为这两个提供了功能,它们的类支持稀疏矩阵,并且它们的 PCA/LSA 实现也支持稀疏矩阵。CountVectorizerTfidfVectorizerLogisticRegressionTruncatedSVD

从技术角度来看,这应该可以满足您构建模型所需的条件,但我认为真正的问题是除了简单地训练文本的词袋表示之外,您还可以进行哪些特征工程。

您可能会训练一个主题模型(如LDA)来解决这个问题。这将允许您根据主题向量来表示您的查询(不一定包含所需产品的确切名称)。您还可以根据主题向量来表示您的产品。

然后,您可以根据与查询的相似性(在主题向量空间中)对产品进行排名。