我有一组维基百科转储。我需要在我拥有的类别列表中对其进行分类。类别如体育,法律,音乐,电影等。有 300 类别。我从文章和文章的类别列表中提取了描述。
我观察到的是,描述中的名词非常了解该实体。例如,描述的第一句是最重要的。例如,在“Christiano Ronaldo是葡萄牙职业 足球运动员 ”中,足球运动员是名词。同样在罗纳尔多维基百科页面的类别列表中,单词'足球运动员'和'足球'会重复多次。
考虑到这一点,我使用自然语言处理清理了所有描述,并仅从数据中提取了名词。总的来说,在我拥有的完整数据库中会有20,000个不同的单词(名词)。如前所述,大约有300 classes
。
到目前为止,我所做的非常基本。我从有关实体的数据中提取名词。然后我用NLP技术处理它们,比如词干。然后我使用 GloVe 来获取描述和类别中最常用名词的向量。然后我找到具有最近余弦距离的类别,这些距离表示常用词和类别。例如,如果关于实体的数据中最常见的单词是“Novel”。那么“小说”这个词和“书”类别的余弦距离很小,我输出的实体是“书”。但是这给出了大约60%
的准确度,这是不好的。
因此,我想使用Tensorflow或其他一些为我进行分类的库来使用Deep Learning。
我的输入向量的格式为[0,1,0,6,0,...,10,0,..]
宽度20,000
,不同字数,其中每个索引对应字的频率(这是重要因为频率对于我来说至关重要)在描述中出现。输出应为[0.12, 0.2, 0.01, 0.00,.....,0.7, 0.14....]
宽度为300
的格式。如果某些类具有较高的值,则某些类具有较低的值,具体取决于实体的描述。
我也有足够大小的训练数据。我有大约一百万个具有描述和正确标签的实体,我猜这应该足够了。我是Deep Learning的新手,如果我得到一个可以玩的代码的原始结构并且同时学习,我想要。我对Tensorflow和Keras有一些基本的了解,但我很难继续。
我也知道我可以在维基百科语料库,GloVe和Word2Vec上使用预训练嵌入。任何帮助都会很棒。
示例:从this维基百科页面,我提取了以下信息:
分类:小说由Sue Grafton,Kinsey Millhone 小说,2005年美国小说,1953年在小说中,1987年在小说中,小说设在加州,G。 P. Putnam的儿子书,2000年代的神秘小说存根
描述:这是Sue Grafton's Alphabet系列神秘小说中的第19部小说,其特色是Kinsey Millhone,一个位于加利福尼亚州圣特雷莎的私人视角。
根据它应该归类为'book'或'novel'。
编辑:因为我是Tensorflow的新手,所以我想要的是一个我可以根据自己的需要理解和改变的代码。来自任何资源的类似代码的一些基本结构都可以。答案 0 :(得分:0)
Stackoverflow不是要求提供现成代码的地方。
然而,我可以指出一个大方向,这应该是足够的信息,让你去做一些类似(足够)主题的教程。
您的问题当然可以通过几种不同的方式来解决。作为你的词袋(这是你的"计数向量"被称为)会丢弃任何单词的排序,并且由于你的输入实际上是相同的长度,它可以用标准技术如MLP处理(多层感知器)。
只有具有特定的单热矢量(不指示频率,但 出现)时,Word2Vec模型才有意义。
然而,一个简单的嵌入层可能也可以正常工作;这通常只意味着您将高维空间(在您的情况下为~20,000)嵌入到较低维度。关于多少维度最接近你的问题而没有太稀疏,没有一般的经验法则,但我会说100-150左右的维度应该很好。
在MLP中,您基本上只能一个接一个地堆叠非线性层。你可以遵循一个基本的MNIST example for multiclass classification(请注意,这是在较旧版本的TensorFlow上,但仍应该相同);他们甚至有两种不同的方法,你可以适用于你的。
这应该让你走上正确的道路,你可以看到你的问题是否得到了一个相当不错的解决方案,或者仍然难以解决。 还要考虑如何分发您的课程;如果有300个类别,某些课程的代表性仍然不足,而且您在培训过程中会遇到问题。
您是否对分布进行了基本的统计分析?
编辑:来自下方的评论。 要添加到MNIST示例:即使您具有不同的数据源,也可以对数据建模相同。您有高维非二进制输入,并且只想获得几个输出标签,这些输出标签表示某种类型的统计可能性。