Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
aitianyu2006 opened this issue May 27, 2018 · 15 comments
Open

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

aitianyu2006 opened this issue May 27, 2018 · 15 comments

Comments

@aitianyu2006
Copy link

aitianyu2006 commented May 27, 2018

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

@RandolphVI
Copy link
Owner

RandolphVI commented May 27, 2018

@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]。

@aitianyu2006
Copy link
Author

我尝试一下 谢谢了

@luchenue
Copy link

luchenue commented May 31, 2018

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

@RandolphVI
Copy link
Owner

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

@JiaWenqi
Copy link

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

@RandolphVI
Copy link
Owner

RandolphVI commented Mar 20, 2019

@JiaWenqi

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

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

Repository owner deleted a comment from daneren Apr 16, 2019
@ft3020997
Copy link

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

@RandolphVI
Copy link
Owner

@ft3020997

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

@ft3020997
Copy link

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

@RandolphVI
Copy link
Owner

@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 方式,你需要修改的地方不仅仅是数据处理部分的代码,还需要针对你所生成的堆叠文档向量进行设计特定网络(例如网络是寻找文档中不同句子的重要程度)。

@ft3020997
Copy link

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

@327850200
Copy link

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

@RandolphVI
Copy link
Owner

@327850200

可以参考我的这个项目下 Issues 中的一个问题 #12
已经在里面作了回答,希望能帮到你

@christianahui
Copy link

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

@RandolphVI
Copy link
Owner

@christianahui

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants