在自然语言处理中(NLP),如何对特征进行有效的降维?
2017-08-01 14:38
429 查看
转知乎:
https://www.zhihu.com/question/26710625?sort=created
我知道特征间的冗余很大,所以需要降维。我有三个问题:
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 王天祎
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 王天祎
相关文章推荐
- 开发人员如何有效地进行数据库设计
- 如何有效地进行职业谈判?.
- 如何进行有效的计划管理?
- 初学者如何查阅自然语言处理(NLP)领域学术资料
- 如何与美国教授进行积极有效的套辞[转]
- 如何进行特征选择
- 编写有效的测试用例及如何进行用例评审
- 如何有效进行测试执行进度计划的制订
- 如何进行有效的管理时间
- 初学者如何查阅自然语言处理(NLP)领域学术资料
- 产品经理必备技能――如何进行有效沟通
- 项目经理如何有效地进行项目沟通?
- Python 使用nltk对数据进行自然语言处理(nlp)
- 外贸电子商务如何有效地进行网络营销
- nodejs程序员如何安全有效的进行压力测试
- 卓越管理的实践技巧(1)如何进行有效的指导 Guidelines for Effective Coaching
- 初学者如何查阅自然语言处理(NLP)领域学术资料
- IT企业专利工程师之四——企业如何有效进行知识产权管理
- Spark Mllib里使用贝氏二元分类时如何将数值特征字段用StandardScaler进行标准化(图文详解)
- 如何全面、准确、有效对程序员进行绩效