在自然语言处理中(NLP),如何对特征进行有效的降维?

转知乎:

https://www.zhihu.com/question/26710625?sort=created

 

在自然语言处理中(NLP),如何对特征进行有效的降维?

我在做一个课程设计,特征的维度有接近两万维 (p = 20,000),每一维度特征是一个0-1整数,表示一个特定的单词是否在文章中出现(一个数据点$x \in R^{p}$表示一篇文章)。
我知道特征间的冗余很大,所以需要降维。我有三个问题:
1) 假设我有一万个样本点(n = 10,000),每个样本点有一万个特征(p = 10,000)。哪种降维方式比较有效和高效?矩阵$X \in R{n \times p}$维度太大了(不过是稀疏的),在我的电脑上(没有服务器:-()直接对$X$用PCA(or SVD,truncated SVD还差不多可以跑) 还是Bag of Words(or K-means) 都跑不太动。
2) 怎样表征样本点的相似度或距离?因为特征都是binary的,觉得用欧氏距离好像不太合适。L0距离推荐吗?
3) 如果我用SVM进行分类的话,用什么Kernel比较好呢?
求大神指点!
------------------------------------------------------------------------------------
补充:谢谢大家的意见,十分有帮助!
其实我们要做的不是分类问题,是回归问题(Regression)。利用文本信息估计价值。
我们知道的Regression method不多(linear regressin+penalty, SVR, KNN, DTs), 想着能否把prices取bins后进行分类。不知道业界都怎么处理这样的问题呢?
关于取bins:我们对price先取log集中下范围,然后尽量让各bins的数据一样多。
继续向大家学习!

 

 

回答:作者:国双商业市场

对一些内容进行补充和概括,具体介绍如下:

  • 词袋模型

文本的降维本质上涉及到了文本的表达形式。在传统的词袋模型当中,对于每一个词采用one-hot稀疏编码的形式,假设目标语料中共有N个唯一确认的词,那么需要一个长度N的词典,词典的每一个位置表达了文本中出现的某一个词。在某一种特征表达下,比如词频、binary、tf-idf等,可以将任意词,或者文本表达在一个N维的向量空间里。凭借该向量空间的表达,可以使用机器学习算法,进行后续任务处理。

这种方式被称为n-gram语法,指文本中连续出现的n个语词。当n分别为1、2、3时,又分别称为一元语法(unigram)、二元语法(bigram)与三元语法(trigram)。

词袋模型的缺点:

词袋模型虽然简单,但也有很明显的缺点,除了题主所说的文本表达维度过高以外,也不含有语义的信息,比如“乔布斯”和“乔帮主”两个词在这个表达下完全是不同的,但在语义上两者高度相关。

有一些针对上述内容的改善方法,比如,传统维度选择方法、主题模型和神经网络。它们都涉及到了降维或语义表达,原理上有些差异。这里传统维度选择方法指日常直接应用到的数据降维方法,这些方法不做语义处理,仅仅是维度筛选,保留主要维度,剔除次要维度。主题模型和神经网络是同时兼顾了降维和语义表达的方法,前者是基于统计共现,后者是基于序列网络关系训练。具体介绍如下:

  • 维度选择方法

常用的有卡方、互信息这种统计检验的方法;还有借助机器学习模型降维的方法。比如,使用随机森林,或者逻辑回归等模型,筛选出那些在分类任务中具有较大特征重要性,或者系数绝对值较大的TOP特征作为降维后的特征集合。

  • 主题模型

主题模型同时具备了降维和语义表达的效果,比如LSI、LDA、PLSA、HDP等统计主题模型,这些模型寻求文本在低维空间(不同主题上)的表达,在降低维度的同时,尽可能保留原有文本的语义信息。

  • 神经网络

除了上述经典机器学习算法,在深度学习世界中,也有常用的文本表达方式。神经网络算法关于词的表达,充分利用了词在语义空间中的性质,一般这个过程被称为embedding,将所有的词都用向量表达起来,做成一个词典,后续使用时再到这个大词典里来“查表”(lookup),是深度学习算法中很重要的基础步骤。比如,词典里有N个唯一的词,每个词有100维,那么这个大词典的维数有100*N。常用的embedding方法有word2vec,glove模型。

在有了所有词的embedding表达以后,常采用几种方式来对一段文本进行向量化:

1. 采用连续若干embedding的卷积形式表达—CNN,常用于分类任务。

2. 采用embedding序列编码的方式表达—RNN,常用于问答、机器翻译等任务,也可以用于分类任务。

3. 针对较短的文本,也可以直接采用word2vec平均、求和、tf-idf求和的方式。

以上方式都可以做到对文本的降维,同时尽量保留文本的语义信息。

BY 王天祎

你可能感兴趣的:(大数据与自然语言处理)