python - 超越关键字依赖的文本分类并推断实际含义

标签 python nlp text-classification natural-language-processing

我正在尝试开发一个文本分类器,它将一段文本分类为私有(private)公共(public)。以医疗或健康信息为例。我能想到的典型分类器将关键字视为主要区分器,对吗?像下面这样的场景怎么样?如果两段文本都包含相似的关键字但含义不同怎么办?

以下一段文字揭示了某人的私有(private)(健康)情况(患者患有癌症):

我去过两个诊所和我的pcp。我进行了一次超声检查,结果却被告知这是正在消退的囊肿血肿,但它越来越大,开始让我的腿变形疼痛PCP 说它不可能是囊肿,因为它开始时太大了,我发誓我的腿从未受伤,甚至没有凸起。我现在很害怕癌症。大约 9 个月前,我在蹲下时才注意到有点不舒服的感觉。 3 个月前,我蹲下来收拾衣物,感觉有点疼痛 促使我检查我的,那时我注意到小腿肌肉底部有一个肿 block > 弯曲只会让它更引人注目。最终在四次诊所就诊、一次超声波和一次pcp之后,结果似乎呈阳性并且肿 block 越来越大。
[私有(private)](正确分类)

以下一段文字是一位医生的评论,绝对不会透露健康状况。它介绍了典型分类器模型的弱点:

不要害怕,也不要将任何坏事假设为癌症。我在我的 clinic 经历过几个案例,这些案例对我来说似乎很熟悉。正如您提到的,它可能是一个囊肿或一个血肿,而且它越来越大,它必须需要一些额外的诊断,例如活检。在该区域有疼痛肿 block 的大小并不能真正说明任何不好。您应该多去几次专门的诊所,并进行一些特定的检查,例如biopsyCT scanpcp超声波之前肿 block 变得更大。
[Private](分类错误,应该是[Public])

由于显而易见的原因,第二段被我当前所有的分类器归类为私有(private)。相似的关键字、有效的词序列、主题的存在似乎使分类器非常困惑。甚至,这两个内容都包含 IYou(名词、代词)等主题。我考虑过从 Word2Vec 到 Doc2Vec,从 Inferring meaning 到 semantic embeddings 但不能'不要考虑最适合这个问题的解决方法。

知道我应该用哪种方式处理分类问题吗?提前致谢。

到目前为止的进展:
这些数据是我从公共(public)来源收集的,患者/受害者通常会发布他们自己的情况,而医生/祝福者会回复这些信息。我在爬行时假设 - 帖子属于我的私有(private)类(class),评论属于公共(public)类(class)。总而言之,我从 5K+5K 的帖子/评论开始,并在没有任何主要预处理的情况下使用朴素贝叶斯分类器获得了大约 60% 的结果。我很快就会尝试神经网络。但在输入任何分类器之前,我只想知道如何更好地进行预处理,以便为任一类赋予合理的权重以实现更好的区分。

最佳答案

如果您发布的数据代表您要区分的类别,则基于关键字的功能可能不是最有效的。看起来一些有时被视为停用词的术语将是关于什么是私有(private)的,什么是公共(public)的很好的线索。

你提到代词,我认为这可能仍然是一个很好的前进方向。如果您使用的是 unigram/bag-of-words 类型的功能,请确保您的矢量化器没有删除它们。

计算第一人称代词的实例(ImyI'vemine ) 为 Private 案例给出 13,为 Public 案例给出 2。

Public 示例有第二人称代词(例如 you),而第一个示例没有。因此,关于第一人称代词和第二人称代词的计数或平滑比率的特征可能会有效。

如果您具有句法结构或通过 n-gram 或类似表示跟踪位置信息,那么涉及第一人称代词和关键字的功能可能会有效。

此外,动词首句结构(Don't be ..., Having an...)是第二人称定向语言的特征,可能显示在公共(public)文本中比私有(private)文本更多。

最后一个推测性想法:这两段话的情绪非常不同,因此如果您可以进行情绪分析,那可能会提供额外的线索。我希望 Public 类比 Private 类更中立。

将您的公共(public)示例插入 Watson Tone Analyzer演示给出了这个显着的结果:

{
  "sentence_id": 3,
  "text": "I am now scared and afraid of cancer.",
  "tones": [
    {
      "score": 0.991397,
      "tone_id": "fear",
      "tone_name": "Fear"
    }
  ]
},

公共(public)声明也包含一个带有恐惧标签的句子,但它的得分不高,伴随着其他注释,并且在句子中包含一个明确的否定。因此,也可能值得利用这些功能。

"sentences_tone": [
    {
      "sentence_id": 0,
      "text": "Don’t be scared and do not assume anything bad as cancer.",
      "tones": [
        {
          "score": 0.874498,
          "tone_id": "fear",
          "tone_name": "Fear"
        },
        {
          "score": 0.786991,
          "tone_id": "tentative",
          "tone_name": "Tentative"
        },
        {
          "score": 0.653099,
          "tone_id": "analytical",
          "tone_name": "Analytical"
        }
      ]
    },

关于python - 超越关键字依赖的文本分类并推断实际含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54992220/

相关文章:

python - 在 Mac 中 pip 安装 matplotlib 时出错

Python:从列表创建术语文档矩阵

csv - Tensorflow 如何将 csv 文件中的单词(字符串)转换为正确的向量

machine-learning - 分类器还是启发式?

python - NLTK精度: "ValueError: too many values to unpack"

r - 使用朴素贝叶斯和 R 进行多类分类

python - 导入 Pandas 会出现错误 AttributeError : module 'pandas' has no attribute 'core' in iPython Notebook

python - iPython notebook 中的 PySpark 在使用 count() 和 first() 时引发 Py4JJavaError

python - 如何从代码中检查当前实例的内存使用情况

algorithm - 识别一个人的名字与字典中的单词