删除垃圾句子

数据挖掘 nlp
2021-09-30 18:32:36

我有与客户和代理商的电话记录。我试图找到代理对客户做出的承诺。

我已经做了标点符号恢复。但是有很多句子没有任何意义。我想从成绩单中删除它们。它们中的大多数只是一组未连接的单词。我想知道哪种方法最适合这项任务?

我的想法是:

• 使用 tf idf 和 word2vec 从所有句子创建向量。之后,我们可以进行某种异常检测,例如查找和删除与大多数其他向量高度偏离的向量。

• 垃圾邮件过滤器。也许可以为此任务应用垃圾邮件过滤器?

• 创建正确句子必须包含的某些词性标签模式。例如,任何好的句子都必须包含名词+动词。或者我们可以使用例如来自 spacy 的依赖标记。

更新

我想保留的句子示例:

发送后,您将免费获得 ups 跟踪号。

一个垃圾句子的例子:

Kinder pr 只需再次输入,时钟驱动 bethel。

又是一句废话:

就这样你戴上它并说这是关于那个的。

2个回答

我建议训练您自己的自定义Dialog Act Classification Model检测对话行为是自然语言理解 (NLU) 问题。使用对话行为分类模型,您可以检测句子是否用于“问候”、“问题”、“意见”、“承诺”等。

详细方法

使用预训练的语言模型(例如 BERT)来训练您自己的 Dialog 行为分类模型。您可以根据您的要求创建自己的自定义对话框行为类(因为您要删除特定类型的句子)。您可以将它们归类为垃圾或使用“问候”、“问题”、“意见”等作为对话类。

完成训练后,您可以遍历句子列表并根据它们的预测类别过滤它们。

您可能需要研究是否有可以使用的类似语料库,或者必须手动标记然后训练模型。word2vec与基于规则的 POS 方法相比,这将是一种更可靠的方法。

有关最新方法和对话行为语料库的更多详细信息,请点击此链接如果您不知道如何使用语言模型,您可以使用transformers来自huggingface的库。我希望你觉得这有帮助。

我正在回答您标题中的问题(“删除垃圾句子”),而忽略了您在语料库中找到承诺的最终目标。

我会尝试的一件事是将其视为分类问题(垃圾与非垃圾)。您可以基于标记集训练模型(即您需要标记数据集的某些子集),然后对语料库的其余部分进行分类。您可以使用像 Bert 这样的预训练语言模型,并使用您的标记集对其进行微调,如下所示(https://colab.research.google.com/github/google-research/bert/blob/master/predicting_movie_reviews_with_bert_on_tf_hub .ipynb)。

使用这样的语言模型的优点是您不必过多担心语言(预)处理,这意味着您不必获得词性或句法结构。

关于您的想法的评论:

  1. 使用 tf-idf 和 word2vec 进行异常检测:这取决于您的语料库中垃圾句子的比例。如果它们超过 15%,我认为它们可能不会那么异常。另外,我假设您的垃圾句子来自嘈杂的自动语音到文本转录。我不确定这些垃圾句子的某些部分在多大程度上被正确转录,以及正确转录的部分可能对异常程度产生什么影响。

  2. 如果您指的是针对垃圾邮件进行训练的预先存在的垃圾邮件过滤器,我猜电子邮件的垃圾邮件与您的成绩单的垃圾邮件完全不同。

  3. 使用 POS 标签或句法结构为有效句子手动创建规则:这对我来说似乎有点乏味,而且我不确定你是否会发现所有垃圾。例如,在您的垃圾示例中,句法结构并没有让我觉得太不寻常,例如“clock drive bethel”可能被标记为 ,这是一个非常常见的标记序列。在这种情况下,垃圾来自单词的含义。