我标记了具有独立类别的文本数据集。在Keras中运行CNN分类器时,我得到的准确度> 90%。
我的文字是客户评论“我真的很喜欢这款手机的摄像头。”类是例如“手机摄像头”,“内存”等。
我要搜索的是我是否可以在分类器标记表示该类的实体时用出现在其中的类别标记这些句子。或更具体地讲:如何提取输入句子的那些部分,使Keras在CNS网络中选择(即分类)1个,2个或更多类别?
答案 0 :(得分:0)
我的pilpilene(通常)用于类似任务。
首先,我不直接使用NN来标记诸如“相机”,“屏幕”等单独的实体。有一些很好的方法可能有用,例如pointer networks或仅attention,但这对我来说并没有意义。
我猜想,这种架构不能很好地工作,因为在我的数据集中有很多杂音,也就是“我很高兴我买了这台电视”。约总体上达到75%,其余数据并不是那么干净。
因此,我还要执行其他一些操作:
如何“识别”实体
我只是使用正则表达式和词性标记来拆分数据。但是我使用俄语语言数据集,因此俄语没有很好的免费语法解析器/库。如果您使用的是Spacy或nltk库中表现良好的英语或其他语言,则可以将其用于解析以分离实体。另外,英语语法与俄语相比是如此严格-可能会使您的工作变得更轻松。
无论如何,请尝试从正则表达式开始并进行解析。
带有诸如“相机”,“电池”等主题的关键字的词汇也非常有帮助。
识别实体的另一种方法是主题模型-PLSA / LDA(gensim石头),但是imo很难调整,因为文本中有很多杂音。您将获得很多主题{"happy", "glad", "bought", "family", ...}
,依此类推-但是您仍然可以尝试主题建模。
此外,您还可以为每个文本创建一个带有实体标签的数据集,并集中注意力训练NN,因此您可以通过高度关注来识别它,但是创建此数据集非常繁琐。
创建数据集并训练NN
我只有在具有可接受的“命名实体”质量时才开始创建数据集-因为如果稍后更改此(基础)部分,则probalby可以丢弃数据集并再次从头开始。
最好决定一次使用哪些标签,然后再不更改它们-这是工作的关键部分。
对此类数据进行NN的训练可能是工作中最容易的部分-就整个文本而言,只是任何好的分类器。即使不是nn,也可以使用简单的钙化剂-使用混合,装袋等。
可能的麻烦
有一个陷阱-一些评论/功能对于NN分类器甚至对人类来说都不是那么明显,例如“声音很大”或“变得很热”。通常,它们取决于上下文。因此,我在团队的帮助下为数据集添加了标记-因此,每个条目都由一组人工标记,以获取更好的质量。我还使用上下文标签-产品的类别-为每个实体添加上下文:因此,用于音频系统和洗涤捣碎的“大声声音”引起争议,模型可以学习。大多数情况下,类别标签很容易通过数据库/ Web解析访问。
希望有帮助,我也希望有人知道更好的方法。