python - 使用文档在Python中集群

我是新来的集群,需要一些关于如何处理这个问题的建议…
假设我有成千上万个句子,但样本中的一些可能是:
网络经验
丰富的销售经验
有较强的交际能力者优先。
需要销售专业知识
巧克力苹果
工作对网络专业至关重要
为了以最好的方式对这些进行分类,我可以采取什么方法?
我已经研究过单词向量化的k-means,但是当我有成千上万个可能都包含不同单词的句子时,构建一个这样大的向量,然后遍历每个句子,看看哪个句子包含这些单词,这是否有效?
还有哪些方法我还没有找到?
到目前为止我所做的:
将句子从CSV导入到具有ID:Sentence的DICT
我正在从每个句子中删除停止词
然后我分别计算所有单词以构建主向量,并记录单词出现的次数。


最佳答案:

这里有两个相关的(但在技术上是不同的)问题;第一个是关于这个数据的聚类技术的选择。
第二个,谓词问题与数据模型有关——即,对于原始数据中的每个句子,如何将其转换为适合输入到聚类算法的数据向量。
聚类技术
k-means可能是最流行的聚类技术,但是有很多更好的方法;考虑k-kmeans是如何工作的:用户从数据中选择少量数据点(k-means算法中初始迭代的聚类中心,也称为质心)接下来,确定每个数据点与质心集之间的距离,并将每个数据点指定给它所接近的质心;然后,根据指定给同一簇的数据点的平均值确定新质心。重复这两个步骤,直到达到某个收敛准则(例如,在两个连续迭代之间,质心组合运动低于某个阈值)。
更好的聚类技术远远不止移动聚类中心——例如,谱聚类技术旋转和拉伸/挤压数据以找到最大方差的单轴,然后确定与原始的和彼此正交的附加轴——即,变换的特征空间。PCA(主成分分析)、LDA(线性判别分析)和kPCA都是这一类的成员,其定义特征是计算原始数据或协方差矩阵中每个特征的特征值/特征向量对。Scikit learn有一个PCA computation模块。
数据模型
正如您所观察到的,在从非结构化文本数据构建数据模型时,常见的难题是为整个语料库中的每个单词(减去停止词)包含一个特征,这通常会导致数据集的高度稀疏性(即每个句子只包含所有句子中总单词的一小部分,因此每个数据向量都是稀疏的;另一方面,如果对语料库进行裁剪,以便仅使用前10%的单词作为特征,则某些/许多句子具有完全不受欢迎的数据向量。
这里有一个常见的技术序列来帮助解决这个问题,考虑到您的数据,这可能特别有效:使用规范化、词干化和同义化的常见处理序列将相关术语组合成单个术语。
这是直观的:例如,
Normalize:将所有单词转换为小写(Python字符串有一个较低的方法,因此

REquired.lower()

显然,这防止了required、required和required在数据向量中包含三个独立的特性,而是将它们折叠成一个术语。
词干:词干处理后,Required、Required和Required被折叠为单个标记Requir。
最常见的两个词干分析器是porter和lancaster词干分析器(下面讨论的nltk两者都有)。
同义化:像fluent、capability和熟练的术语,可以根据上下文,通过在一个通用的同义词列表中进行标识,全部折叠为一个术语。
优秀的pythonNLP库,nltk(至少)有几个优秀的同义词编译,或者数字同义词库(thesauri?)以编程方式帮助您完成所有这三项任务。
例如,nltk.corpus.reader.lin是一个(只有一个,nltlk中至少还有多个同义词查找器),使用起来很简单——只需导入这个模块并调用synonym,传入一个术语。
nltk的stem package中有多个词干分析器。