本方案基于Python无监督聚类实现,不需要标注数据,零门槛即可运行,只需提前准备以下内容:
直接执行以下命令安装所有依赖,固定版本避免兼容问题:
``` pip install pandas==1.5.3 scikit-learn==1.2.2 jieba==0.42.1 ```下载通用中文停用词表,保存到代码同目录,命名为stopwords.txt,直接下载地址:https://raw.githubusercontent.com/goto456/stopwords/master/cn_stopwords.txt
预处理的核心是把非结构化商品文本转换成算法可识别的格式化数据,步骤如下:
在代码同目录新建文件,命名为goods.csv,按照下表格式填入你的商品数据,示例:
| goods_id | goods_name | goods_desc |
|---|---|---|
| 1 | 纯棉白色短袖T恤 | 夏季宽松纯棉男士白色短袖休闲T恤 |
| 2 | 夏季牛仔短裤 | 男士薄款直筒休闲牛仔五分短裤 |
| 3 | 无线降噪蓝牙耳机 | 续航超长无线入耳式降噪蓝牙运动耳机 |
| 4 | 10000mAh超薄充电宝 | 便携小巧苹果安卓通用快充移动电源 |
直接替换成你的商品数据即可,字段顺序不能修改。
新建Python文件命名为gen_goods_tag.py,复制粘贴以下预处理代码,自动完成分词和停用词过滤:

我们使用TF-IDF提取文本特征,K-Means对商品自动分组,最后提取每个分组的核心关键词作为标签,全程不需要人工标注。
在刚才的代码后追加以下内容,将文本转换成算法可用的特征矩阵:
``` 初始化TF-IDF转换器,过滤出现频率过低的无效词 tfidf = TfidfVectorizer(min_df=2) features = tfidf.fit_transform(df["processed_text"]) 获取所有特征词列表 feature_names = tfidf.get_feature_names_out() ```继续追加以下代码,只需要修改代码中TAG_NUM的值为你需要生成的标签总数即可,其他不用改:
``` -- 这里修改为你需要的标签总数 TAG_NUM = 8 -- 训练K-Means聚类模型 kmeans = KMeans(n_clusters=TAG_NUM, random_state=42, n_init="auto") kmeans.fit(features) 给每个商品打上聚类分组ID df["cluster_id"] = kmeans.labels_ ```继续追加以下代码,自动提取每个分组权重最高的3个关键词作为最终标签:
``` 每个聚类取top3关键词生成标签 cluster_tag_map = {} 对聚类中心的词权重从高到低排序 sorted_centers = kmeans.cluster_centers_.argsort()[:, ::-1] for cluster_id in range(TAG_NUM): 取前3个权重最高的关键词拼接成标签 top_keywords = [feature_names[ind] for ind in sorted_centers[cluster_id, :3]] cluster_tag_map[cluster_id] = ",".join(top_keywords) 给每个商品匹配最终的智能算法标签 df["alg_goods_tag"] = df["cluster_id"].map(cluster_tag_map) ```最后追加一行代码,导出带标签的结果文件:
``` df.to_csv("goods_with_tags.csv", encoding="utf-8-sig", index=False) ```打开命令行执行python gen_goods_tag.py,运行完成后,代码同目录会生成goods_with_tags.csv,打开即可看到每个商品对应的智能标签,可直接导入业务系统使用。
如果生成的标签不符合预期,按照以下操作调整即可,不需要修改核心代码:
sorted_centers[cluster_id, :3]的3为你需要的数量,比如改成5就会生成5个关键词标签整个流程从数据准备到生成结果,10分钟即可完成,所有代码可直接复制运行,不需要额外配置复杂环境。
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图