文章目录
代码地址
https://github.com/SenticNet/personality-detection
1. 摘要
这篇文章讲的是基于深度学习, 通过提取文本特征,得到一个人的五大性格的倾向(是/否)。 具体来说:使用CNN(卷积神经网络)对文本进行性格特征的抽取,并且在得到文档语义特征之后 将其和文档格式特征组合起来变成总特征, 然后对其进行二分类,得到结果。
2. 方法综述
我们的步骤包括输入信息预处理, 过滤, 特征提取和二分类。其中我们提取的特征包括两个方面, 一个是在文档层面上的文本格式特征。
另一个文档层面上的语义特征,把提取的这两个特征组合起来用于最后的二分类。
特别的, 文档层面上的语义特征的提取是 先把每个词用向量表示出来, 然后输入到CNN, CNN通过把词组成n-grams, n-grams组成句子, 句子组成文档的这样一种层次方式 得到文档层面上的语义特征 , 后面会详细说到。
2.1 输入信息预处理
包括分句, 数据清理, 合并, 比如转换成小写之类的。
2.2 文档层面的格式特征提取
我们使用Mairesse baseline feature set 这个特征集这个规范提取格式方面的特征, 包括此的个数, 平均句子长度等
2.3 数据过滤
因为有些句子可能并没有包含有用的性格信息, 我们将这些信息过滤掉, 提高CNN的表现, 具体细节文章没有给出,需要自行看代码。
2.4 单词层面上的特征提取
首先通过word embedding(词嵌入)把单词变成一个向量,或者说把词空间映射成一个连续的向量空间, 使用的词嵌入方式是 word2vec embeddings, 在这个过程中我们得到了文档的表示方式: 可变长度的句子, 其中句子是由可变长度的单词向量组成(每个单词的特征是固定的)
2.5分类
我们使用CNN进行分类, 其中他的输入是词向量,那么句子就表示成为一组词向量, 然后在网络的某个层把词嵌入到句子, 此时句子的词向量将变成一个固定的数字。在这一层文档变表示成为不定长度的句子向量,最后在一层把文档变成固定长度的文档向量, 然后把这个向量和前面提取的格式特征组合在一起, 此向量就是我们对一个文档的总特征表示, 我们将把这个总特征用于最后的分类。
3. 分类网络结构
分类网络包括5个步骤, 7个层次,每个性格方面都有一个结构相同的分类网络, 所以一共时5个分类网络,分别对5个性格方面进行分类
3.1 步骤
- 词向量化 (使用word2vec词嵌入)
- 句子向量化
- 文档向量化
- 对文档进行分类
3.2 层次
- input (word vectorization)
- convolution (sentence vectorization)
- max pooling (sentence vectorization),
- 1-max pooling (document vectorization),
- concatenation (documentvectorization),
- linear with Sigmoidactivation (classifcation)
- twoneuron softmax output (classifcation)