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

Posted

技术标签:

【中文标题】在自然语言处理 (NLP) 中,如何进行有效的降维?【英文标题】:In natural language processing (NLP), how do you make an efficient dimension reduction? 【发布时间】:2015-01-19 01:29:30 【问题描述】:

在 NLP 中,特征的维度总是非常巨大的。例如,对于手头的一个项目,特征的维度几乎是 2 万(p = 20,000),每个特征都是一个 0-1 的整数,以显示论文中是否呈现了特定的单词或二元组(一篇论文是一个数据点 $x \in R^p$)。

我知道特征之间的冗余是巨大的,所以降维是必要的。我有三个问题:

1) 我有 10,000 个数据点 (n = 10,000),每个数据点有 10,000 个特征 (p = 10,000)。进行降维的有效方法是什么?矩阵 $X \in R^n \times p$ 是如此巨大,以至于 PCA(或 SVD,截断 SVD 都可以,但我不认为 SVD 是减少二进制特征维度的好方法)和 Bag单词的数量(或 K-means)很难直接在 $X$ 上进行(当然,它是稀疏的)。我没有服务器,我只是用我的电脑:-(。

2) 如何判断两个数据点之间的相似度或距离?我认为欧几里得距离可能不适用于二元特征。 L0范数怎么样?你用什么?

3)如果我想使用SVM机器(或其他内核方法)进行分类,我应该使用哪个内核?

非常感谢!

【问题讨论】:

对于这个社区来说似乎是一个很好的问题stats.stackexchange.com 【参考方案1】:

1) 你不需要降维。如果你真的想要,你可以使用 L1 惩罚线性分类器来减少最有用的特征。

2) 常使用余弦相似度,或 TFIDF 重新缩放向量的余弦相似度。

3) 线性 SVM 最适合使用如此多的功能。

这里有一个很好的关于如何在 python 中进行分类的教程:http://scikit-learn.org/dev/tutorial/text_analytics/working_with_text_data.html

【讨论】:

以上是关于在自然语言处理 (NLP) 中,如何进行有效的降维?的主要内容,如果未能解决你的问题,请参考以下文章

Swin Transformer对CNN的降维打击

Swin Transformer对CNN的降维打击

使用 PCA 进行文本分类的降维

任务5 图像的读取及表示 图像的特征 图片特征的降维

R语言实现生物序列的降维比对

矩阵 TFIDF 的降维