【问题标题】:How to classify a sentence into one of the pre-defined topic bucket using an unsupervised approach如何使用无监督方法将句子分类到预定义的主题桶之一
【发布时间】:2018-10-26 05:41:42
【问题描述】:

我正在开展一个项目,根据反馈评论的主题将客户反馈分类到存储桶中。因此,我需要将句子分类为预定义主题列表中的主题之一。

例如:

“我每次登录时都会收到错误消息”必须以“登录”作为主题。

“让屏幕更丰富多彩”必须以“改进”为主题。

因此,主题与产品和背景非常相关

LDA 似乎对我不起作用(如果我错了,请纠正我)。它检测一般意义上的主题,如“体育”、“政治”、“技术”等。但我需要检测上面提到的特定主题。

另外,我没有用于训练的标记数据。我只有cmets。 因此,监督学习方法看起来不是一种选择。

到目前为止我所做的尝试:

我使用谷歌新闻语料库(大约 3.5 GB)训练了一个 gensim 模型。 我通过删除停用词、标点符号等来清理句子。 我正在寻找,每个词最接近主题集中的哪个主题,并将该词标记到该主题。考虑到句子可能包含更多接近它所指主题的词,我正在挑选句子中最大数量的词映射到的主题。

例如:

如果句子中的 3 个单词映射到“登录”主题,句子中的 2 个单词映射到“改进”主题,我将句子标记为“登录”主题。

如果多个主题的数量有冲突,我会返回所有拥有最大数量的主题作为主题列表。

这种方法给了我公平的结果。但还不够好。

解决这个问题的最佳方法是什么?

【问题讨论】:

  • 嗨。你有没有想出办法做到这一点?目前正在尝试做同样的事情:)

标签: python machine-learning nlp gensim topic-modeling


【解决方案1】:

您需要正确清理向量空间(这是此类问题最重要的事情之一),例如删除数字(没有意义),删除乱码并尝试 n-gram 的数量。

查看这篇文章https://medium.com/mlreview/topic-modeling-with-scikit-learn-e80d33668730它是对LDA和NMF的很好的描述,以及一些可能派上用场的代码sn-ps。

但是,我会通过以下方式解决这个问题:

  1. 不仅可以使用 Google 语料库训练 word2vec 或 doc2vec(两者都进行实验),还可以添加您的数据。 FastText skip-grams 也被证明是有用的。
  2. 获取具有一般主题的无监督方法。
  3. 手动为集群添加标签。
  4. 在此基础上添加另一个分类器,它将使用分类的示例作为训练集并预测主题。
  5. 开始对您的 cmets 进行分类,以便您能够尽快使用有监督的方法。

但是,您可能希望用多个主题标记文档,因此如果 3 个单词映射到登录,2 个单词映射到改进 (IMO),您不应该真正用登录标记句子。相反,像多类分类 login - 60% and Improvement 40% 之类的东西似乎更明智。

这听起来像是您正在进行的一个现有项目。祝你好运!

【讨论】:

    【解决方案2】:

    如果主题的数量是可控的,我建议您为每个主题标记一些数据并创建监督模型。之后使用多类分类来识别语料库其他部分的主题。你可以试试LUIS

    【讨论】:

      猜你喜欢
      • 2019-07-28
      • 2010-12-17
      • 2017-03-04
      • 2017-06-25
      • 1970-01-01
      • 2013-12-13
      • 2015-09-07
      • 2016-05-02
      • 2017-05-01
      相关资源
      最近更新 更多