Multi-Label-Text-Classification icon indicating copy to clipboard operation
Multi-Label-Text-Classification copied to clipboard

输入文件的格式是什么样子的?

Open aitianyu2006 opened this issue 6 years ago • 15 comments

输入文件的格式是什么样子的?

aitianyu2006 avatar May 27 '18 01:05 aitianyu2006

@aitianyu2006 输入的文件是 .json 格式的:

{testid: "xxxxxxxx", feature_content: ["xx", "xx", "xxx"], labels_index: [33, 77, 129], labels_num: "3"}

其中:

  • testid: 相当于是你任务中每条记录的 id (可有可无)
  • feature_content: 你的 sentence 的所有分词
  • labels_index: 你的任务的标签的 one-hot index
  • labels_num: 标签个数。

例如,你的所有标签的个数是 500,某一条记录属于第 33,77,129 个类别,labels_index 就记为 [33, 77, 129]。

RandolphVI avatar May 27 '18 03:05 RandolphVI

我尝试一下 谢谢了

aitianyu2006 avatar May 27 '18 09:05 aitianyu2006

labels_num 有作用吗?好像也是可有可无

luchenue avatar May 31 '18 09:05 luchenue

@luchenue 是的,目前来说,labels_num 在代码中没有用到。主要是后面有个想法将会用到这个东西。

RandolphVI avatar May 31 '18 10:05 RandolphVI

@RandolphVI 请问 feature_content这个字段是分完词的结果,还是分完词后去除停用词后的结果?如果文章的词数很多,比如在2000以上的话,都要保留这么多词吗?如果用不到这么多词的话,是不是不用保留这么多数量的词,训练的时候对每个doc中的词的数量是不是有数量限制?

JiaWenqi avatar Mar 20 '19 07:03 JiaWenqi

@JiaWenqi

feature_content 是分完词后并去除停用词后的结果。

如果文章的词数很多,是要看是整体数据集的词数都很多还是就极个别的文章是这样的。 训练呢的时候每个 doc 的词的数量可以用 pad_seq 设定(一般是你整体数据集按照所有 doc 的词数分布图来确定) 。超过 pad_seq 词语长度的 doc 截取超过的词语,不足的 pad_seq 词语长度的 doc 补齐至 pad_seq 长度。

RandolphVI avatar Mar 20 '19 08:03 RandolphVI

你好,想问一下训练文本输入的事情。 假设我有2000条长文本,每条文本包含约10-20句话,每句话包含若干单词。 如何做到 “word-sent-doc”的向量化输入,因为看到feature_content的单条数据就是每个doc分词后的结果。

ft3020997 avatar Apr 25 '19 07:04 ft3020997

@ft3020997

doc 由 sentence 组成,sentence 由 word 组成,先得到长文本的各个分词词向量,堆叠形成的矩阵就是 doc 文档的向量化表征。具体流程也很简单,长文本里面先进行分词,其中包括去除停用词操作,然后会得到每个长文本记录对应的分词。这个分词就是 feature_content 的内容,之后训练模型的时候,通过 load 你训练好的词向量表就可以得到这个长文本的文档向量了。

RandolphVI avatar Apr 25 '19 07:04 RandolphVI

@RandolphVI 那模型知道该如何进行单个doc句子的截断吗?因为看到feature_content 的内容,都是[word1,word2....wordN]的格式,如果需要做成“word-sent-doc”形式的,是否需要doc1[sent1[word,word],sent2[word,word]....sentN]的输入?

ft3020997 avatar Apr 25 '19 08:04 ft3020997

@ft3020997

听你的说法,是要区别对待每个句子,这样有两个做法:

  • 在 sentence 之间加标志符,形成 feature_content: [word1, wor2, ..., <end>, word1, word2, ..., <end>, ...],之后要针对的 进行处理,处理方法可以是一个句子形成一个句向量,长文本包含多个句子,就有多个长短不一的句向量堆叠。
  • 上面的做法缺点很明显,不同的长文本的句子数量不一定,并且每个句子的单词个数不一定,所以通常做之前还会 padding,例如会规定每个长文本的最大句子数量是多少,一个句子的最大长度是多少,超过截取,不足补零。形成的数据可以是 feature_content: [word1, wor2, ..., <end>, word1, word2, ..., <end>, ...],也可以是 feature_content: [[word1, wor2, ...,], [word1, word2, ...,], ...],根据你自己设计的数据格式,数据处理的时候代码要修改。

以上我说的两种方法,我的代码并不支持处理,这属于是区别对待 doc 中的 sentence 方式,你需要修改的地方不仅仅是数据处理部分的代码,还需要针对你所生成的堆叠文档向量进行设计特定网络(例如网络是寻找文档中不同句子的重要程度)。

RandolphVI avatar Apr 25 '19 09:04 RandolphVI

@RandolphVI 十分感谢大神的解答,我先尝试一下,谢谢。

ft3020997 avatar Apr 25 '19 09:04 ft3020997

1 环境都是按照requirements里装的虚拟环境。 2 先是按照作者给的提示,自己做了个中文的json文本格式,有报错。 3 然后只用作者给的一条记录跑了下CNN的train,报错如下: FileNotFoundError: [Errno 2] No such file or directory: '../data/content.txt' 请问作者,是我遗漏了什么嘛?

327850200 avatar Jun 04 '19 07:06 327850200

@327850200

可以参考我的这个项目下 Issues 中的一个问题 https://github.com/RandolphVI/Multi-Label-Text-Classification/issues/12 已经在里面作了回答,希望能帮到你

RandolphVI avatar Jun 10 '19 01:06 RandolphVI

如果每个样本的labels_num都不相同,可以支持吗?

christianahui avatar Nov 20 '19 08:11 christianahui

@christianahui

抱歉过了这么久才回复。 可以的,因为本身 Multi-label Classification 任务就是处理文本可能对应一个或多个的属性标签。 每个样本的 labels_num 本身可能就不一样,可以参考 /data 文件夹下的 data sample 的 format。 项目的代码是可以处理上述情况的。

RandolphVI avatar Dec 15 '19 03:12 RandolphVI