gpt4 book ai didi

machine-learning - 从文本到 K-Means 向量输入

转载 作者:行者123 更新时间:2023-11-30 09:29:31 24 4
gpt4 key购买 nike

我刚刚开始深入研究机器学习,特别是集群。 (我正在使用Python,但这无关紧要)我的目标是,从有关时尚界的推文集合 (100K) 开始,对其文本执行 KMeans。

到目前为止,我已经过滤了文本,截断了停用词、无用术语、标点符号;完成词形还原(利用词性标记以获得更好的结果)。

我向用户展示最常见的术语、主题标签、二元组、三元组、..9 元组,以便他可以改进预处理,将单词添加到无用的术语中。

我最初的想法是使用前 n(1K) 个术语作为特征,创建 foreach tweet 固定大小 n(1K) 的向量如果(该单元格的)顶部术语出现在这条推文中,则将单元格设置为一个值(可能使用 TFIDF 计算单元格的值)。

我是否遗漏了一些东西(将考虑 0 值)?我可以以某种方式利用 n-gram 吗?

这个scikit article很笼统,我不明白整个事情。

(LSA降维有用还是手动减少特征数量(即向量维度)更好?)

最佳答案

这个other sklearn page包含文本 k 均值聚类的示例。

但为了解决您的一些具体问题:

My initial idea was to use the top n(1K) terms as features, creating foreach tweet a vector of fixed size n(1K) having a cell set to a value if the top term (of this cell) appear in this tweet (maybe calculating the cell's value with TFIDF).

实现这一目标的标准方法是使用 sklearn 的 CountVectorizer并使用参数min_df

from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer(min_df=10)
X = cv.fit_transform(texts)

上面的代码将文本数组转换为特征X。设置min_df=10将忽略所有出现次数少于10次的单词(据我了解,没有直接的方法可以说“取前 1000"但这是等价的)。

Can I exploit n-grams in some way?

是的,CountVectorizer 可以处理 n 元语法。 ngram_range 参数指定要考虑的 ngram 范围(以“n”开头,以“n”结尾)。例如,

cv = CountVectorizer(min_df=10, ngram_range=(2,2))

将基于二元组而不是单个单词(一元组)构建特征。用于混合一元模型和二元模型

cv = CountVectorizer(min_df=10, ngram_range=(2,2))

然后,您可以用 TfIdfVectorizer 替换 CountVectorizer,TfIdfVectorizer 会转换单词计数以权衡信息量更大的单词。

Is LSA dimensionality reduction useful or is it better reducing the number of features (so vectors dimension) manually?

简短的回答,这取决于您的目的。我上面提到的链接中的示例确实首先应用了 LSA。而且,根据我的经验,LSA 或 NMF 等“主题模型”方法已经可以被视为潜在语义主题的聚类。例如,

from sklearn.decomposition import NMF
nmf = NMF(n_components=20)
mu = nmf.fit_transform(X)

这会将特征 X 转换为 20 维的投影特征向量 mu。每个维度d可以解释为主题d中文本的得分。通过将每个样本分配给具有最大分数的维度,这也可以解释为聚类。

关于machine-learning - 从文本到 K-Means 向量输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36946510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com