Randolph

Results 20 comments of Randolph

@BowenMu 抱歉回复晚了,数据集应该是用的 CPC 的,关于数据集标签喝原始专利数据的对应不上。原因有那么几个: 1. U.S CPC 专利的标签和层级结构每年都是在变动,经常会删除和合并一些旧类别,新增一些新类别。 2. 我自己使用的 CPC 专利数据集是我们实验室当时前几年爬取的,之前是经过师兄师姐处理过后的标签(删除了个别样例可能很少的类别,具体的预先处理过程无法追溯了),自然会导致与 USPTO 官网产生区别。 3. 最重要的一个原因,Github 项目上面的专利数据所对应的 label 是我自己重新 index 之后的(我自己维护了新的 idx2label 的dict,为了脱敏没有传到 repo 上面),跟 USPTO 官网上肯定是对不上的。

`content.txt` 文件可以看成是你所有数据集的集合(也就是你的语料库),用来通过 `gensim` 生成对应语料库的词向量的。因此,如果你使用了其他的预先训练好了的词向量,例如通过 wiki 语料库训练的得到的词向量,可以不使用 `content.txt` 文件。通过修改一下代码,导入你的预先训练好的 pre-trained embedding 文件即可。 `content.txt` 是你所有数据集条目的集合,每一行就是一条记录,记录里仅包含文本信息不包含标签信息等等(只用 embedding 文本分词),文本信息是属于分词之前的原始文本。举个例子,例如: 1. 今天天气很好。 2. 我很喜欢吃橘子。 (数据集中的一条记录,`1` 表示第一行) - `metadata.tsv` 就是通过 `data_helpers.py` 的 `create_metadata_file()` 函数得到的文件。 - `create_metadata_file()`...

`content.txt` file can be regarded as a collection of all your datasets (i.e. your corpus), which are used to generate the corresponding word vector of the corpus through `gensim` package....

@zhangyuanscall 第一个问题,我的个人理解是的,如果使用的是非本领域的相关的 word2vec 语料,会一定程度上导致分类效果变差。原因是未登陆词的词向量会随机初始化,本质上来说随机初始化的词向量表基本上都是不如特定领域预料训练过的(因为加了先验知识)。典型的例子就是,wiki 的大语料库训练出来的word2vec model 在专业医学领域(具有很多专业医学名词)表现不如特定医学语料库。 第二个问题,具有排序信息的多标签分类任务。这个讲道理,我不是太懂你的意思。你的意思是说比如在一个电商大领域下,涉及`苹果`这一个分词,你想要的结果是最后出来是**手机**的概率要大于**水果**的概率?如果是这样的情况,基本上只要是有标记数据都能实现,因为这个是基本的文本多标签分类问题。 但如果你的意思是说,在一个很大很笼统的领域下(即所有可能的领域),涉及`苹果`这一个分词,你事先知道了它的领域信息,比如是**水果**或者**手机**领域,对于最后结果分类的偏向,你的做法只需要想办法把它的领域信息表征进来,之后一起做 co-attention 也好,或者其他方式都行,建立融合表征就行。

@VVesley 检查一下你自己用的数据,1. 标注是否合理正确;2. 分词是否有误;3.预处理是否合理。这里的模型都非常简单,正常数据能跑通的话,Precision 和 F1 值一般都不会这么低,和你的数据关联很大。

@VVesley 代码逻辑部分建议你可以自己尝试理清楚再作提问(使用自己的数据集,`data_helpers.py`和`param_parser.py`都要根据你数据的统计指标进行更改,包括标签个数、你预设的最大句子长度等,参数部分请认真详细参考[Usage](https://github.com/RandolphVI/Multi-Label-Text-Classification/blob/master/Usage.md)),另外也可以参考别人提过的 [issue](https://github.com/RandolphVI/Multi-Label-Text-Classification/issues/19)。

@VVesley 举个例子,按照你的数据集总共 9 个标签,最后网络会输出 1 * 9 的 `tensor`,其中每一个元素都代表了对应标签的预测概率值,一般做法是**阈值法**和 **TopK 法**,如果使用阈值法就是事先给定一个阈值(例如 0.5),如果超过则标记为正,反之为负,对应 `param_parser.py` 设定的参数 `threshold` 超参数(默认值是 0.5);如果使用的是 TopK,即取 9 个当中前 `K` 个,不管其预测概率值是多少均标记为正,对应 `param_parser.py` 设定的参数 `TopK` 超参数(默认值是 5,即取前 5 个可能的类别)。

@aitianyu2006 输入的文件是 .json 格式的: {testid: "xxxxxxxx", feature_content: ["xx", "xx", "xxx"], labels_index: [33, 77, 129], labels_num: "3"} 其中: - **testid**: 相当于是你任务中每条记录的 id (可有可无) - **feature_content**: 你的 sentence 的所有分词 - **labels_index**: 你的任务的标签的...

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

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