文本分类超出了关键字的依赖性,并推断出实际含义

Nuh*_*hdy 9 python nlp text-classification natural-language-processing

我正在尝试开发一个文本分类器,将一个文本分类为PrivatePublic。以医疗或健康信息为例。我可以想到的典型分类器将关键字视为主要的区分符,对吗?像波纹管这样的场景呢?如果两条文本都包含相似的关键字但含义不同,该怎么办。

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

我去过两个clinics和我的pcp。我ultrasound只能被告知这是一个解决方案cyst或解决方案hematoma,但是它越来越大,开始使我的腿变大ache。之所以PCP说不能,是cyst因为它起步太大,我发誓injured我的腿永远都没有,甚至没有bump。我现在感到害怕和恐惧cancer。仅在大约9个月前蹲下时,我才感到有点不适。3个月前我去蹲下收起衣服,有点麻烦hurt。在pain促使我开始审视自己leg,这是当我注意到lump在我小腿的底部muscle和弯曲只有变得更加明显。最终在四次clinic拜访之后,一个ultrasound和一个pcp结果似乎是积极的,而且人数越来越大。
[私人](正确分类)

接下来的一段文字是医生的评论,绝对没有透露健康状况。它介绍了典型分类器模型的缺点:

不要害怕,不要承担任何坏事cancer。我已经经历了几次案件,对我clinic来说似乎很熟悉。正如您提到的,它可能是a cyst或a hematoma,并且越来越大,它必须需要一些其他字符,diagnosis例如biopsy。有一个ache在该领域或的大小lump并没有真正告诉任何东西bad。你应该访问专门clinics几次,并且在某些特定的测试,如走biopsyCT scanpcpultrasound在此之前,lump变得更加大。
[私人](分类错误。应为[公开])

出于显而易见的原因,我所有当前的分类器将第二段分类为私有。类似的关键字,有效的单词序列,主题的出现似乎使分类器非常混乱。甚至,这两个内容都包含IYou(名词,代词)等主题。我从Word2Vec到Doc2Vec,从推断含义到语义嵌入都曾考虑过,但无法考虑最适合此问题的解决方案。

任何想法,我应该以哪种方式处理分类问题?提前致谢。


到目前为止的进展:我从一个公开来源收集的数据,患者/受害人通常会发布自己的情况,医生/好心人会对此做出答复。我假设爬网时-帖子属于我的私人班级,而评论属于公共班级。到目前为止,我都是从5K + 5K帖子/评论开始的,使用朴素的贝叶斯分类器无需任何主要预处理就可以达到60%左右。我将尽快尝试神经网络。但是,在输入任何分类器之前,我只想知道如何更好地进行预处理,以便为每个类分配合理的权重以更好地区分。

小智 4

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

\n\n

你提到代词,我认为这可能仍然是一个很好的前进途径。如果您正在使用一元词/词袋类型的特征,请确保您的矢量化器没有删除它们。

\n\n

I计算第一人称代词 ( , my, I\'ve, )的实例数,mine得出私格为 13,公格为 2。

\n\n

公共示例具有第二人称代词(例如you),而第一个示例则没有。因此,关于第一人称代词与第二人称代词的计数或平滑比率的特征也许会有效。

\n\n

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

\n\n

此外,动词开头的句子结构(Don\'t be ...Having an...)是第二人称定向语言的特征,并且可能比私人文本更多地出现在公共文本中。

\n\n

最后一个推测性的想法:这两段文章的情绪非常不同,所以如果您能够进行情绪分析,这可能会提供额外的线索。我预计公共班级会比私人班级更加中立。

\n\n

将您的公共示例插入Watson Tone Analyzer演示会产生以下显着结果:

\n\n
{\n  "sentence_id": 3,\n  "text": "I am now scared and afraid of cancer.",\n  "tones": [\n    {\n      "score": 0.991397,\n      "tone_id": "fear",\n      "tone_name": "Fear"\n    }\n  ]\n},\n
Run Code Online (Sandbox Code Playgroud)\n\n

公开声明还包含一个带有恐惧标签的句子,但得分不高,并附有其他注释,并且句子中包含明确的否定。因此,利用这些功能也可能是值得的。

\n\n
"sentences_tone": [\n    {\n      "sentence_id": 0,\n      "text": "Don\xe2\x80\x99t be scared and do not assume anything bad as cancer.",\n      "tones": [\n        {\n          "score": 0.874498,\n          "tone_id": "fear",\n          "tone_name": "Fear"\n        },\n        {\n          "score": 0.786991,\n          "tone_id": "tentative",\n          "tone_name": "Tentative"\n        },\n        {\n          "score": 0.653099,\n          "tone_id": "analytical",\n          "tone_name": "Analytical"\n        }\n      ]\n    },\n
Run Code Online (Sandbox Code Playgroud)\n