文本聚类(二)—— KMeans 聚类

2023-10-27

第一篇内容中,我们介绍了 LDA 主题模型,这一篇,我们将介绍经典的 KMeans 聚类算法在文本上的表现。为了方便和前面 LDA 主题模型对比,我们依然使用同一份数据集,对数据的前期处理保持一致。

二、KMeans 聚类

2.1 加载数据集

df = pd.read_csv('/content/drive/My Drive/cnews.train.txt', delimiter="\t", header=None, names=["label", "data"])
print(df.label.unique())
['体育' '娱乐' '家居' '房产' '教育' '时尚' '时政' '游戏' '科技' '财经']

2.2 数据清洗

中间几个步骤略,与上一篇处理方式完全一致。

data_words_bigrams = make_bigrams(train_st_text)

为了方便后续的处理,我们将分词后的数组拼接起来

corpus = [' '.join(line) for line in data_words_bigrams]
['马晓旭 意外 受伤 国奥 警惕 无奈 大雨 格外 青睐 殷家 傅亚雨 沈阳 报道 来到 沈阳 国奥队 依然 摆脱 雨水 困扰 下午 国奥队 日常 训练 再度 大雨 干扰 无奈_之下 队员 慢跑 分钟 草草收场 上午 国奥队 奥体中心 外场 训练 阴沉沉 气象预报 显示 当天 下午 沈阳 大雨 幸好 队伍 上午 训练 干扰 下午 点当 球队 抵达 训练场 大雨 几个 小时 丝毫 停下来 试一试 态度 球队 当天 下午 例行_训练 分钟 天气 转好 迹象 保护 球员 国奥队 中止 当天 训练 全队 返回 酒店 训练 足球队 来说 稀罕 奥运会 即将 全队 变得 娇贵 沈阳 一周 训练 国奥队 保证 现有 球员 不再 出现意外 伤病 情况 影响 正式 比赛 这一 阶段 控制 训练 受伤 控制 感冒 疾病 队伍 放在 位置 抵达 沈阳 后卫 冯萧霆 训练 冯萧霆 长春 患上_感冒 参加 塞尔维亚 热身赛 队伍 介绍 冯萧霆 发烧_症状 两天 静养 休息 感冒 恢复 训练 冯萧霆 例子 国奥队 对雨中 训练 显得 特别 谨慎 担心 球员 受凉 引发 感冒 非战斗 减员 女足 队员 马晓旭 热身赛 受伤 导致 无缘 奥运 前科 沈阳 国奥队 格外 警惕 训练 嘱咐 队员 动作 再出 事情 工作人员 长春_沈阳 雨水 一路 伴随 国奥队 长春 几次 训练 大雨 搅和 没想到 沈阳 碰到 事情 国奥 球员 雨水 青睐 不解']

2.3 文本向量化

文本的向量化表示采用三种方式:使用 IDF 权重的哈希向量化表示、不使用 IDF 权重的哈希向量化表示以及 TFIDF 向量化表示,由于文本词量较大,因此在做 hash 处理的时候,我们把特征数设定为 25 万,TFIDF 中我们没设定,使用全部词量。

from sklearn.pipeline import make_pipeline
from sklearn.feature_extraction.text import TfidfTransformer

# Perform an IDF normalization on the output of HashingVectorizer
hasher = HashingVectorizer(n_features=250000, alternate_sign=False, norm=None)
vectorizer_hash_idf = make_pipeline(hasher, TfidfTransformer())

vectorizer_hash = HashingVectorizer(n_features=250000, alternate_sign=False, norm='l2')

vectorizer_tfidf = TfidfVectorizer(max_df=0.5, min_df=2, use_idf=True)
X_hash_idf = vectorizer_hash_idf.fit_transform(corpus)
X_hash = vectorizer_hash.fit_transform(corpus)
X_tfidf = vectorizer_tfidf.fit_transform(corpus)
print(X_hash_idf.shape)
print(X_hash.shape)
print(X_tfidf.shape)
(50000, 250000)
(50000, 250000)
(50000, 207705)

对于数据维度过高,我们可以使用一些维度压缩技术进行处理,如 PCA、SVD 等,此处我们使用的是 SVD 及正则化处理,此处的输出维度我们限定到 100,如果压缩的目的是为了可视化,那么最常见的是压缩到 2 维。

from sklearn.decomposition import TruncatedSVD
from sklearn.preprocessing import Normalizer

print("Performing dimensionality reduction using LSA")
# Vectorizer results are normalized, which makes KMeans behave as
# spherical k-means for better results. Since LSA/SVD results are
# not normalized, we have to redo the normalization.
svd = TruncatedSVD(100)
normalizer = Normalizer(copy=False)
lsa = make_pipeline(svd, normalizer)

X_hash_idf_lsa = lsa.fit_transform(X_hash_idf)
X_hash_lsa = lsa.fit_transform(X_hash)
X_tfidf_lsa = lsa.fit_transform(X_tfidf)

explained_variance = svd.explained_variance_ratio_.sum()
print("Explained variance of the SVD step: {}%".format(
    int(explained_variance * 100)))

print()
Performing dimensionality reduction using LSA
Explained variance of the SVD step: 11%
print(X_hash_idf_lsa.shape)
print(X_hash_lsa.shape)
print(X_tfidf_lsa.shape)
(50000, 100)
(50000, 100)
(50000, 100)

2.4 文本聚类

此处使用两种算法,普通的 KMeans 算法以及同类的更具扩展性的 MiniBatchKMeans 算法,我们将两种算法分别应用于上面 6 种不同的数据处理结果上,共 12 组测试:

minikm_X_hash_idf_lsa = MiniBatchKMeans(n_clusters=10, init='k-means++', n_init=1, init_size=1000, batch_size=1000, verbose=False)
minikm_X_hash_idf_lsa.fit(X_hash_idf_lsa)
minikm_X_hash_lsa = MiniBatchKMeans(n_clusters=10, init='k-means++', n_init=1, init_size=1000, batch_size=1000, verbose=False)
minikm_X_hash_lsa.fit(X_hash_lsa)
minikm_X_tfidf_lsa = MiniBatchKMeans(n_clusters=10, init='k-means++', n_init=1, init_size=1000, batch_size=1000, verbose=False)
minikm_X_tfidf_lsa.fit(X_tfidf_lsa)

minikm_X_hash_idf = MiniBatchKMeans(n_clusters=10, init='k-means++', n_init=1, init_size=1000, batch_size=1000, verbose=False)
minikm_X_hash_idf.fit(X_hash_idf)
minikm_X_hash = MiniBatchKMeans(n_clusters=10, init='k-means++', n_init=1, init_size=1000, batch_size=1000, verbose=False)
minikm_X_hash.fit(X_hash)
minikm_X_tfidf = MiniBatchKMeans(n_clusters=10, init='k-means++', n_init=1, init_size=1000, batch_size=1000, verbose=False)
minikm_X_tfidf.fit(X_tfidf)

km = KMeans(n_clusters=10, init='k-means++', max_iter=100, n_init=1, verbose=False)
km_X_hash_idf_lsa = km.fit(X_hash_idf_lsa)
km = KMeans(n_clusters=10, init='k-means++', max_iter=100, n_init=1, verbose=False)
km_X_hash_lsa = km.fit(X_hash_lsa)
km = KMeans(n_clusters=10, init='k-means++', max_iter=100, n_init=1, verbose=False)
km_X_tfidf_lsa = km.fit(X_tfidf_lsa)

km = KMeans(n_clusters=10, init='k-means++', max_iter=100, n_init=1, verbose=False)
km_X_hash_idf = km.fit(X_hash_idf)
km = KMeans(n_clusters=10, init='k-means++', max_iter=100, n_init=1, verbose=False)
km_X_hash = km.fit(X_hash)
km = KMeans(n_clusters=10, init='k-means++', max_iter=100, n_init=1, verbose=False)
km_X_tfidf = km.fit(X_tfidf)

下面我们结合数据集的真实标签及聚类结果标签,给出一些聚类算法中比较常见的评估指标,每种指标的含义及具体计算方法可以参考 scikit-learn 的官方用户手册

from sklearn import metrics

labels = df.label

Xs = [X_hash_idf_lsa, X_hash_lsa, X_tfidf_lsa, 
     X_hash_idf, X_hash, X_tfidf, 
     X_hash_idf_lsa, X_hash_lsa, X_tfidf_lsa,
     X_hash_idf, X_hash, X_tfidf]

for index, method in enumerate([minikm_X_hash_idf_lsa, minikm_X_hash_lsa, minikm_X_tfidf_lsa,
          minikm_X_hash_idf, minikm_X_hash, minikm_X_tfidf,
          km_X_hash_idf_lsa, km_X_hash_lsa, km_X_tfidf_lsa,
          km_X_hash_idf, km_X_hash, km_X_tfidf]):
    X = Xs[index]
    print("Homogeneity: %0.3f" % metrics.homogeneity_score(labels, method.labels_))
    print("Completeness: %0.3f" % metrics.completeness_score(labels, method.labels_))
    print("V-measure: %0.3f" % metrics.v_measure_score(labels, method.labels_))
    print("Adjusted Rand-Index: %.3f"
          % metrics.adjusted_rand_score(labels, method.labels_))
    print("Silhouette Coefficient: %0.3f"
          % metrics.silhouette_score(X, method.labels_, metric='euclidean'))
    # print("Calinski-Harabaz Index: %0.3f"
    #       % metrics.calinski_harabasz_score(X.toarray(), km.labels_))     # toarray 内存直接搞死
    print("----------------------------------------------------------------")
Homogeneity: 0.649
Completeness: 0.704
V-measure: 0.675
Adjusted Rand-Index: 0.499
Silhouette Coefficient: 0.130
----------------------------------------------------------------
Homogeneity: 0.600
Completeness: 0.632
V-measure: 0.616
Adjusted Rand-Index: 0.508
Silhouette Coefficient: 0.115
----------------------------------------------------------------
Homogeneity: 0.629
Completeness: 0.660
V-measure: 0.644
Adjusted Rand-Index: 0.511
Silhouette Coefficient: 0.121
----------------------------------------------------------------
Homogeneity: 0.510
Completeness: 0.615
V-measure: 0.557
Adjusted Rand-Index: 0.259
Silhouette Coefficient: 0.012
----------------------------------------------------------------
Homogeneity: 0.470
Completeness: 0.557
V-measure: 0.510
Adjusted Rand-Index: 0.243
Silhouette Coefficient: 0.024
----------------------------------------------------------------
Homogeneity: 0.467
Completeness: 0.642
V-measure: 0.541
Adjusted Rand-Index: 0.223
Silhouette Coefficient: 0.009
----------------------------------------------------------------
Homogeneity: 0.689
Completeness: 0.738
V-measure: 0.713
Adjusted Rand-Index: 0.561
Silhouette Coefficient: 0.146
----------------------------------------------------------------
Homogeneity: 0.609
Completeness: 0.634
V-measure: 0.621
Adjusted Rand-Index: 0.496
Silhouette Coefficient: 0.133
----------------------------------------------------------------
Homogeneity: 0.693
Completeness: 0.729
V-measure: 0.711
Adjusted Rand-Index: 0.589
Silhouette Coefficient: 0.124
----------------------------------------------------------------
Homogeneity: 0.507
Completeness: 0.616
V-measure: 0.556
Adjusted Rand-Index: 0.248
Silhouette Coefficient: 0.013
----------------------------------------------------------------
Homogeneity: 0.497
Completeness: 0.601
V-measure: 0.544
Adjusted Rand-Index: 0.257
Silhouette Coefficient: 0.026
----------------------------------------------------------------
Homogeneity: 0.536
Completeness: 0.623
V-measure: 0.577
Adjusted Rand-Index: 0.279
Silhouette Coefficient: 0.013
----------------------------------------------------------------

我们简单分析一下上面的实验结果,一共 12 组实验,前 6 组是使用的是 MiniBatchKmeans 算法,后 6 组使用的是常规的 KMeans 算法,两个大组下前三组均为经过 lsa 降维处理的数据,后三组保持高维数据:

  • 轮廓系数不太适用于高维数据,具有维度灾难现象,详见上面的 4、5、6 及 10、11、12 组实验
  • V-measure 和 Adjusted Rand-Index 是基于信息论的评估分数,官方文档中提到二者不受维度影响,但实测结果也有较大差距,其中 Adjusted Rand-Index 差不多小一半
  • 同等数据情况下,KMeans 结果比 MiniBatchKMeans 结果要略好一丢丢,但是计算量较高,因此大数据量下推荐使用后者。
  • 除轮廓系数外,其他几个指标均需要数据的真实标签,然而这种情况实际中几乎不可能(否则做监督学习它不香么?)

更多评估指标及各个指标的优缺点可以参考 scikit-learn 的用户手册。

2.5 关键词展示

对于使用 TFIDF 向量化的文本,我们在聚类后可以展示每个聚类结果中的一些高频词汇

# minikm-tfidf-lsa
print("Top terms per cluster:")
original_space_centroids = svd.inverse_transform(minikm_X_tfidf_lsa.cluster_centers_)
order_centroids = original_space_centroids.argsort()[:, ::-1]
terms = vectorizer_tfidf.get_feature_names()

for i in range(10):
    print("Cluster %d:" % i, end='')
    for ind in order_centroids[i, :10]:
        print(' %s' % terms[ind], end='')
    print()
Top terms per cluster:
Cluster 0: 银行 陈水扁 贷款 信用卡 客户 吴淑珍 理财产品 业务 检方 台湾
Cluster 1: 游戏 玩家 中国 学生 留学 大学 美国 活动 工作 发展
Cluster 2: 电影 导演 影片 拍摄 观众 演员 角色 新浪_娱乐 上映 香港
Cluster 3: 生活 美国 中国 英国 孩子 活动 工作 设计 时间 喜欢
Cluster 4: 比赛 球队 球员 火箭 热火 篮板 奇才 防守 时间 赛季
Cluster 5: 市场 房地产 项目 企业 价格 公司 中国 亿元 投资 开发商
Cluster 6: 基金 投资 公司 市场 债券 投资者 股票 收益 经理 下跌
Cluster 7: 搭配 时尚 性感 组图 黑色 装扮 外套 设计 造型 可爱
Cluster 8: 科学家 发现 研究 地球 美国 人类 时间 英国 动物 研究_人员
Cluster 9: 空间 色彩 设计 客厅 风格 装饰 卧室 家居 家具 白色
# minikm-tfidf
print("Top terms per cluster:")
order_centroids = minikm_X_tfidf.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer_tfidf.get_feature_names()

for i in range(10):
    print("Cluster %d:" % i, end='')
    for ind in order_centroids[i, :10]:
        print(' %s' % terms[ind], end='')
    print()
Top terms per cluster:
Cluster 0: 移民 投资 加拿大 申请 申请人 签证 美国 澳洲 技术移民 澳大利亚
Cluster 1: 基金 投资 公司 债券 市场 投资者 收益 股票 经理 发行
Cluster 2: 奇才 阿联 易建联 沃尔 比赛 球队 刘易斯 阿里_纳斯 麦基 莱切
Cluster 3: 市场 房地产 银行 项目 投资 房价 企业 开发商 中国 亿元
Cluster 4: 学生 大学 学校 申请 美国 专业 课程 留学 学院 学习
Cluster 5: 留学 学生 留学生 中国 学校 教育 签证 申请 美国 大学
Cluster 6: 游戏 玩家 中国 美国 活动 发现 时间 陈水扁 工作 世界
Cluster 7: 电影 导演 影片 票房 观众 拍摄 演员 上映 新浪_娱乐 角色
Cluster 8: 比赛 火箭 热火 球队 球员 篮板 科比 防守 湖人 詹姆斯
Cluster 9: 搭配 时尚 设计 风格 色彩 组图 黑色 性感 白色 装扮
# km-tfidf-lsa
print("Top terms per cluster:")
original_space_centroids = svd.inverse_transform(minikm_X_tfidf_lsa.cluster_centers_)
order_centroids = original_space_centroids.argsort()[:, ::-1]
terms = vectorizer_tfidf.get_feature_names()

for i in range(10):
    print("Cluster %d:" % i, end='')
    for ind in order_centroids[i, :10]:
        print(' %s' % terms[ind], end='')
    print()
Top terms per cluster:
Cluster 0: 银行 陈水扁 贷款 信用卡 客户 吴淑珍 理财产品 业务 检方 台湾
Cluster 1: 游戏 玩家 中国 学生 留学 大学 美国 活动 工作 发展
Cluster 2: 电影 导演 影片 拍摄 观众 演员 角色 新浪_娱乐 上映 香港
Cluster 3: 生活 美国 中国 英国 孩子 活动 工作 设计 时间 喜欢
Cluster 4: 比赛 球队 球员 火箭 热火 篮板 奇才 防守 时间 赛季
Cluster 5: 市场 房地产 项目 企业 价格 公司 中国 亿元 投资 开发商
Cluster 6: 基金 投资 公司 市场 债券 投资者 股票 收益 经理 下跌
Cluster 7: 搭配 时尚 性感 组图 黑色 装扮 外套 设计 造型 可爱
Cluster 8: 科学家 发现 研究 地球 美国 人类 时间 英国 动物 研究_人员
Cluster 9: 空间 色彩 设计 客厅 风格 装饰 卧室 家居 家具 白色
# km-tfidf
print("Top terms per cluster:")
order_centroids = km_X_tfidf.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer_tfidf.get_feature_names()

for i in range(10):
    print("Cluster %d:" % i, end='')
    for ind in order_centroids[i, :10]:
        print(' %s' % terms[ind], end='')
    print()
Top terms per cluster:
Cluster 0: 中国 发展 移民 经济 企业 人民币 投资 美国 合作 国家
Cluster 1: 基金 投资 公司 债券 市场 投资者 股票 经理 收益 发行
Cluster 2: 比赛 火箭 球队 热火 球员 奇才 篮板 防守 湖人 新浪_体育讯
Cluster 3: 学生 留学 大学 学校 申请 留学生 美国 中国 专业 教育
Cluster 4: 空间 设计 色彩 家具 风格 家居 装饰 装修 客厅 卧室
Cluster 5: 房地产 市场 银行 房价 项目 开发商 楼市 土地 亿元 投资
Cluster 6: 游戏 玩家 开发 系统 活动 pc 系列 模式 体验 公布
Cluster 7: 电影 导演 影片 票房 观众 演员 拍摄 上映 新浪_娱乐 角色
Cluster 8: 美国 发现 陈水扁 时间 活动 科学家 北京 工作 公司 中国
Cluster 9: 搭配 时尚 黑色 性感 组图 装扮 外套 设计 点评 款式

最后我们计算一下每个簇的文档数,真实数据中每个类别均为 5000。可以看到下面结果中索引为 6 的簇中文档最多,而根据上面的关键词 ”Cluster 6: 游戏 玩家 中国 美国 活动 发现 时间 陈水扁 工作 世界“,我们发现这个类下至少包含”游戏“和”时政“两个类别下的高频词,聚类结果不够理想。

result = list(minikm_X_tfidf.predict(X_tfidf))
print ('Cluster distribution:')
print (dict([(i, result.count(i)) for i in result]))
print(-minikm_X_tfidf.score(X_tfidf))
Cluster distribution:
{6: 24837, 8: 3624, 2: 748, 7: 4377, 4: 1245, 3: 5499, 9: 5616, 1: 2259, 5: 1382, 0: 413}
48097.83211562563

2.6 判定最佳聚类数

一种简单的方法是绘制一系列聚类结果的 SSE。我们找图中的拐点。如下如所示,拐点因该在 11 附近。

tfidf = TfidfVectorizer(min_df=5, max_df=0.95)
tfidf.fit(corpus)
text = tfidf.transform(corpus)
def find_optimal_clusters(data, max_k):
    iters = range(5, max_k+1, 2)
    
    sse = []
    for k in iters:
        sse.append(MiniBatchKMeans(n_clusters=k, init="k-means++", init_size=1024, batch_size=2048, random_state=20).fit(data).inertia_)
        
    f, ax = plt.subplots(1, 1)
    ax.plot(iters, sse, marker='o')
    ax.set_xlabel('Cluster Centers')
    ax.set_xticks(iters)
    ax.set_xticklabels(iters)
    ax.set_ylabel('SSE')
    ax.set_title('SSE by Cluster Center Plot')
    
find_optimal_clusters(text, 20)

在这里插入图片描述

参考文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文本聚类(二)—— KMeans 聚类 的相关文章

  • word2vec gensim 多种语言

    这个问题完全超出了我的想象 我正在使用 gensim 训练 Word2Vec 模型 我提供了多种语言的数据 即英语和印地语 当我试图找到最接近 人 的词时 我得到的是 model wv most similar positive man O
  • 在哪里可以找到英语短语列表? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我的任务是搜索文本中陈词滥调和常见短语的用法 这些短语与您在财富之轮的短语谜题中可能看到的短语类似 这
  • 如何在 python-gensim 中使用潜在狄利克雷分配(LDA)来抽象二元组主题而不是一元组?

    LDA 原始输出 一元语法 主题1 水肺 水 蒸汽 潜水 主题2 二氧化物 植物 绿色 碳 所需输出 二元组主题 主题1 水肺潜水 水蒸气 主题2 绿色植物 二氧化碳 任何想法 鉴于我有一个名为docs 包含文档中的单词列表 我可以使用 n
  • SGDClassifier 每次为文本分类提供不同的准确度

    我使用 SVM 分类器将文本分类为好文本和乱码 我正在使用 python 的 scikit learn 并按如下方式执行 Created on May 5 2017 import re import random import numpy
  • 如何调整 NLTK 句子标记器

    我正在使用 NLTK 来分析一些经典文本 但我在按句子标记文本时遇到了麻烦 例如 这是我从以下内容中得到的片段莫比迪克 http www gutenberg org cache epub 2701 pg2701 txt import nlt
  • 如何有效计算文档流中文档之间的相似度

    我收集文本文档 在 Node js 中 其中一个文档i表示为单词列表 考虑到新文档以文档流的形式出现 计算这些文档之间相似性的有效方法是什么 我目前对每个文档中单词的归一化频率使用余弦相似度 我不使用 TF IDF 词频 逆文档频率 因为我
  • 如何计算两个文本文档之间的相似度?

    我正在考虑使用任何编程语言 尽管我更喜欢 Python 来从事 NLP 项目 我想获取两个文档并确定它们的相似程度 常见的方法是将文档转换为 TF IDF 向量 然后计算它们之间的余弦相似度 任何有关信息检索 IR 的教科书都涵盖了这一点
  • 用于估计(一元)困惑度的 NLTK 包

    我正在尝试计算我所拥有的数据的困惑度 我正在使用的代码是 import sys sys path append usr local anaconda lib python2 7 site packages nltk from nltk co
  • 阻止斯坦福核心 NLP 服务器输出它收到的文本

    我正在运行一个斯坦福核心自然语言处理 http stanfordnlp github io CoreNLP server java mx4g cp edu stanford nlp pipeline StanfordCoreNLPServe
  • AttributeError:类型对象“Word2Vec”没有属性“load_word2vec_format”

    我正在尝试实现 word2vec 模型并收到属性错误 AttributeError 类型对象 Word2Vec 没有属性 load word2vec format 下面是代码 wv Word2Vec load word2vec format
  • SpaCy 中的自定义句子边界检测

    我正在尝试在 spaCy 中编写一个自定义句子分段器 它将整个文档作为单个句子返回 我编写了一个自定义管道组件 它使用以下代码来执行此操作here https github com explosion spaCy issues 1850 但
  • 旧版本的 spaCy 在尝试安装模型时抛出“KeyError: 'package'”错误

    我在 Ubuntu 14 04 4 LTS x64 上使用 spaCy 1 6 0 和 python3 5 为了安装 spaCy 的英文版本 我尝试运行 这给了我错误消息 ubun ner 3 NeuroNER master src pyt
  • Python模块可以访问英语词典,包括单词的定义[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 python 模块 它可以帮助我从英语词典中获取单词的定义 当然有enchant 这可以帮助我检查该单词是否存在于英语中
  • 使用“自然”语言编写代码更好吗?

    我最近看到一种编程语言叫做超新星 http supernova sourceforge net 他们在网页上说 超新星编程语言是 现代脚本语言和 第一个提出了概念 用直接虚构进行编程 描述使用 纯人类语言的清晰子集 你可以编写如下代码 i
  • 给定文档,选择相关片段

    当我在这里提出问题时 自动搜索返回的问题的工具提示给出了问题的前一点 但其中相当一部分没有给出任何比理解问题更有用的文本 标题 有谁知道如何制作一个过滤器来删除问题中无用的部分 我的第一个想法是修剪仅包含某个列表中的单词的任何前导句子 例如
  • 如何从 Pandas DataFrame 转换为 Tensorflow BatchDataset 以进行 NLP?

    老实说 我想弄清楚如何转换数据集 格式 pandasDataFrame或 numpy 数组 转换为简单文本分类张量流模型可以训练用于情感分析的形式 我使用的数据集类似于 IMDB 包含文本和标签 正面或负面 我看过的每个教程要么以不同的方式
  • 获取 NLTK 索引的所有结果

    我正在使用 NLTK 来查找单词的一致性 但我不知道如何获取所有结果并将它们放入list or set 例如 text concordance word 仅打印前 25 个结果 TL DR text concordance lines 10
  • Java文本输出中的UTF-8编码问题

    我一直致力于测试高棉语 Unicode Wordbreaker 的各种解决方案 高棉语单词之间没有空格 这使得拼写检查和语法检查变得困难 以及从旧高棉语转换为高棉语 Unicode 我得到了一些源代码 现在在线 http www white
  • FastText - 由于 C++ 扩展未能分配内存,无法加载 model.bin

    我正在尝试使用 FastText Python APIhttps pypi python org pypi fasttext https pypi python org pypi fasttext虽然 据我所知 此 API 无法加载较新的
  • 对产品列表进行分类的算法? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个代表或多或少相同的产品的列表 例如 在下面的列表中 它们都是希捷硬盘 希捷硬盘 500Go 适用于笔记本电脑的希捷硬盘 120

随机推荐

  • 古巴雪茄高希霸世纪1.2.3.4.5.6.半世纪7款雪茄的区别?

    Magic雪茄Club 18 11 0411 30 本人实拍 请勿盗图 此款高希霸世纪6 世纪1 环径为40 世纪系列里个头最小 却刚劲有力 皮革奶油味和豆香的甘甜 松木咖啡最明显伴其左右 口感被称为 开胃雪茄 独特的三段发酵 其烟叶取自布
  • 关于Navicat连接mysql数据库报host XXXXXXX is not allowed to connect to this mysql server

    服务器重新做了一个系统 然后安装mysql 这一系列应该都是做完才搜索这个问题的 我就不废话了 使用本地的Navicat进行连接就报了一个host XXXXXXX is not allowed to connect to this mysq
  • 章节2 开始使用SystemView - Segger SystemView使用手册(译文)

    本文博客链接 http blog csdn net bjr2016 作者 bjr2016 未经允许不得转载 2 开始使用SystemView 这一节描述如何开始使用SEGGER SystemView 解释了如何分析基于监视数据分析一个应用程
  • 共阳和共阴数码管详细段码(带图)

    今天带大家了解数码管的详细段码 数码管主要分共阳数码管和共阴数码管 区别在于其公共端是接电源还是接地 这里我们讲解共阴 共阳 数码管的0 F不带小数点段码和0 F带小数点段码 共阴数码管 1 共阴不带小数点0 F段码为 0x3f 0x06
  • 2022年4月16日-4月22日(ogrePlatformManager源码抄写+ue4视频教程,本周20小时,共1290小时,剩下8710小时。)

    ogre的主题部分ogremain终于抄写完了 good 原以为其他部分不重要 其实并不是 比如 文件系统写到了插件部分 所以还是要抄写 胜利可期 远程办公回来后 感觉心态有些急功近利了 沉不下来了 那先把章节少的ue4视频教程调试部分学下
  • win10系统使用Virtual Box 报错Error reaunching Virtual BoxVM process.5 what: 5 VERR INVALID NAME (-104)

    做101作业的时候 出现这个报错 supR3HardenedWinReSpawn what 5 The virtual machine Windows XP has terminated unexpectedly during startu
  • 史上最简单的SpringCloud教程

    转载请标明出处 原文首发于 https www fangzhipeng com springcloud 2017 07 12 sc09 sleuth 本文出自方志朋的博客 最新Finchley版本请访问 https www fangzhip
  • 【Robot Framework】发送GET和POST请求

    做接口自动化时 经常要使用GET与POST请求 那么如何使用RF发送对应的请求呢 一 安装RequestsLibrary pip install robotframework requests 安装以后 导入到对应的测试套件或测试用例中 本
  • React Native_初识ReactNative

    RN中的View 作为创建UI时最基础的组件 View是一个支持Flexbox布局 样式 一些触摸处理 和一些无障碍功能的容器 并且它可以放到其它的视图里 也可以有任意多个任意类型的子视图 不论在什么平台上 View都会直接对应一个平台的原
  • FTP上传和下载文件

    使用FTP之前最好先在服务器上安装一个serv u软件 用它设置ftp服务表叫方便 实现ftp文件下载 package cn java store test import java io File import java io FileIn
  • Android studio 分析内存泄漏

    http www cnblogs com kelina2mark p 6140658 html
  • Bat脚本自动卸载软件-静默执行

    通过Bat脚本卸载软件 原理是得到某软件的ProductCode 然后通过MsiExec exe命令卸载软件 下面是卸载一个产品的基本代码示例 set ML4 0HF4Name Product4 0HF4 set ML4 0HF4Produ
  • 冒泡排序法

    Hello 大家好 今天我要介绍的是冒泡排序法 冒泡排序法是一种C语言中的数字大小排序的一种方法 这种排序方法是C语言中最简单的一种方法 Now 首先让我们先看一 下冒泡排序法的基本思想 冒泡排序法的思想 两两比较 如果前一个数比后一个数大
  • 程序员的职业成长之路?从初级到高级的技能提升之路

    程序员是一个非常有挑战性和创造性的职业 但也是一个需要不断学习和进步的职业 如果你想在这个行业里有所作为 你需要掌握一些必备的技能和方法 从初级到中级 再到高级 最后达到资深的水平 那么 程序员的成长路线是什么呢 维哥将为你介绍一些实用的建
  • 学计算机电脑屏幕多大,买电脑显示器的技巧 电脑显示屏多大尺寸好

    购买电脑是时 大多数的商家都会把电脑显示器作为电脑配置中的一个主要卖点 但其实很多时候 商家给与我们的信息都是错误的 所以买电脑显示器前 需要自己掌握一些技巧 而一些用户也会在购买多大尺寸的显示屏上纠结着 接下来小编为大家带来买电脑显示器的
  • pytorch之torch.randn()

    torch randn sizes out None dtype None layout torch strided device None requires grad False gt Tensor Args sizes int a se
  • 进入传奇荣耀显示服务器不存在,传奇荣耀复古版

    传奇荣耀复古版 1区服务器爆满排队15分钟 传奇荣耀复古版是一款复古系列的传奇游戏 玩家能够在游戏中24小时匹配到队友进行副本攻略 更有完善的社交系统 让玩家轻松结识更多的兄弟姐妹 实时语音系统方便玩家更好的进行沟通 让玩家们的作战更加轻松
  • 通过Android Timer来实现3S自动页面跳转

    实现开始页面的跳转 就是打开一个Android手机APP的欢迎界面后跳转到指定界面 启动页面的作用能够打广告 发公告 做缓存处理 更新数据等等 Timer是一种定时器工具 用来在一个后台线程计划执行指定任务 它可以计划执行一个任务一次或反复
  • 基于MATLAB的特征值与特征向量(附完整代码)

    目录 一 一般矩阵的特征值与特征向量 例题1 二 广义特征向量问题 例题2 三 稀疏矩阵的最大特征值 例题3 一 一般矩阵的特征值与特征向量 A为n阶矩阵 若数和向量x满足 那么数称为A的特征值 x称为A对应于特征值的特征向量 如果把式子改
  • 文本聚类(二)—— KMeans 聚类

    目录 二 KMeans 聚类 2 1 加载数据集 2 2 数据清洗 2 3 文本向量化 2 4 文本聚类 2 5 关键词展示 2 6 判定最佳聚类数 参考文档 在第一篇内容中 我们介绍了 LDA 主题模型 这一篇 我们将介绍经典的 KMea