我是集群的新手,需要一些关于如何处理这个问题的建议......
假设我有数千个句子,但样本中的一些可能是:
网络经验
强大的销售经验
强大的网络技能首选
需要销售专家
巧克力苹果
工作对于网络专业是至关重要的
为了将这些最佳方式聚类,我可以采取什么方法?
我已经研究了带有单词矢量的k -means,但是当我有成千上万的句子可能都包含不同的单词时,建立一个这样大小的矢量是否有效,然后通过每个试图查看哪个句子有这些单词?
我还没有找到其他什么方法?
到目前为止我做了什么:
将句子从CSV导入DICT,ID:Sentence
我正在删除每个句子中的停用词
然后,我将单独计算所有单词以构建主矢量并保持单词出现次数的计数.
doug.. 6
这里有两个相关的(但不同的技术方面)问题; 第一个是与该数据的聚类技术的选择有关.
第二个谓词问题涉及数据模型 - 即,对于原始数据中的每个句子,如何将其转换为适合于输入到聚类算法的数据向量.
聚类技术
k-means可能是最流行的聚类技术,但有很多更好的方法; 考虑k-kmeans如何工作:用户从数据中选择少量数据点(k-means算法中的初始迭代的聚类中心,也就是质心).接下来,确定每个数据点和质心集之间的距离,并且分配给它的质心的每个数据点都关闭; 然后,根据分配给同一群集的数据点的平均值确定新的质心.重复这两个步骤直到达到一些收敛标准(例如,在两次连续迭代之间,质心组合运动下降到某个阈值以下).
更好的聚类技术不仅仅是移动聚类中心 - 例如,光谱聚类技术可以旋转和拉伸/挤压数据以找到最大方差的单轴,然后确定与原始轴正交的附加轴和相互之间的轴--ie,一个变形的特征空间.PCA(主成分分析),LDA(线性判别分析)和kPCA都是该类的成员,其定义特征是计算原始数据或协方差矩阵中每个特征的特征值/特征向量对. .Scikit-learn有一个用于PCA计算的模块.
数据模型
正如您所观察到的,从非结构化文本数据构建数据模型的常见困境包括整个语料库中每个单词的一个特征(减去停止词)通常会导致数据集的稀疏度非常高(即,每个句子仅包含一个所有句子中总词数的一小部分因此每个数据向量都是稀疏的;另一方面,如果语料库被修剪,例如只有前10%的单词被用作特征,那么一些/多个句子有完全无人居住的数据向量.
以下是帮助解决此问题的一种常见技术序列,根据您的数据,这些技术可能特别有效:使用标准化,词干化和同义词化的常用处理顺序将相关术语合并为一个术语.
这很直观:例如,
规范化:将所有单词转换为小写(Python字符串的方法较低,因此
REquired.lower()
显然,这防止了必需,需要,并需要从包括在数据载体三个单独的特征,而是折叠成一个单一的术语.
茎:词干后,需要,要求和需要,被压缩成一个令牌,requir.
两种最常见的词干分析器是Porter和Lancaster词干分析器(NLTK,下面讨论过,两者都有).
同义词:流利,有能力和熟练的术语,可以根据上下文,通过识别共同的同义词列表,折叠为单个术语.
优秀的Python NLP库,NLTK(至少)有几个优秀的同义词汇编,或数字同义词库(叙词表?),以帮助您以编程方式完成所有这三个.
例如,nltk.corpus.reader.lin是一个(只有一个,在NLTLK中至少有几个同义词查找器),它使用起来很简单 - 只需导入这个模块并调用同义词,传入一个术语.
多个词干分析器采用NLTK的干包.
这里有两个相关的(但不同的技术方面)问题; 第一个是与该数据的聚类技术的选择有关.
第二个谓词问题涉及数据模型 - 即,对于原始数据中的每个句子,如何将其转换为适合于输入到聚类算法的数据向量.
聚类技术
k-means可能是最流行的聚类技术,但有很多更好的方法; 考虑k-kmeans如何工作:用户从数据中选择少量数据点(k-means算法中的初始迭代的聚类中心,也就是质心).接下来,确定每个数据点和质心集之间的距离,并且分配给它的质心的每个数据点都关闭; 然后,根据分配给同一群集的数据点的平均值确定新的质心.重复这两个步骤直到达到一些收敛标准(例如,在两次连续迭代之间,质心组合运动下降到某个阈值以下).
更好的聚类技术不仅仅是移动聚类中心 - 例如,光谱聚类技术可以旋转和拉伸/挤压数据以找到最大方差的单轴,然后确定与原始轴正交的附加轴和相互之间的轴--ie,一个变形的特征空间.PCA(主成分分析),LDA(线性判别分析)和kPCA都是该类的成员,其定义特征是计算原始数据或协方差矩阵中每个特征的特征值/特征向量对. .Scikit-learn有一个用于PCA计算的模块.
数据模型
正如您所观察到的,从非结构化文本数据构建数据模型的常见困境包括整个语料库中每个单词的一个特征(减去停止词)通常会导致数据集的稀疏度非常高(即,每个句子仅包含一个所有句子中总词数的一小部分因此每个数据向量都是稀疏的;另一方面,如果语料库被修剪,例如只有前10%的单词被用作特征,那么一些/多个句子有完全无人居住的数据向量.
以下是帮助解决此问题的一种常见技术序列,根据您的数据,这些技术可能特别有效:使用标准化,词干化和同义词化的常用处理顺序将相关术语合并为一个术语.
这很直观:例如,
规范化:将所有单词转换为小写(Python字符串的方法较低,因此
REquired.lower()
显然,这防止了必需,需要,并需要从包括在数据载体三个单独的特征,而是折叠成一个单一的术语.
茎:词干后,需要,要求和需要,被压缩成一个令牌,requir.
两种最常见的词干分析器是Porter和Lancaster词干分析器(NLTK,下面讨论过,两者都有).
同义词:流利,有能力和熟练的术语,可以根据上下文,通过识别共同的同义词列表,折叠为单个术语.
优秀的Python NLP库,NLTK(至少)有几个优秀的同义词汇编,或数字同义词库(叙词表?),以帮助您以编程方式完成所有这三个.
例如,nltk.corpus.reader.lin是一个(只有一个,在NLTLK中至少有几个同义词查找器),它使用起来很简单 - 只需导入这个模块并调用同义词,传入一个术语.
多个词干分析器采用NLTK的干包.