自训练和增量训练word2vec模型
1、自己准备训练语料文件
根据自己的业务场景准备训练数据,比如用户在商城上的同购行为序列或同浏览行为序列。
我们希望通过自己训练业务相关的语料word2vec模型来获得词嵌入、词相关性查询等。
1.1 准备语料库文件
# 示例:准备自己的一个大规模的语料库文件
df = spark.sql("""
select hist_item_seq from dmb_dev.dmb_dev_item_sku_sequencewhere item_seq_len >=2group by hist_item_seq
""")
df.show(6, False)corpus_file = 'large_corpus_sku_name.txt'
df.toPandas().to_csv(corpus_file, sep=' ', index=False, mode='w',header=False )
"五粮液 金密鉴 52度浓香型高度白酒 500ml 五粮液红密鉴(陈酿)6瓶整箱装,五粮液 金密鉴 52度浓香型高度白酒 500ml 五粮液红密鉴(
陈酿)6瓶整箱装,五粮液(WULIANGYE)酒五粮液密鉴浓香型白酒礼盒白酒整箱口粮酒送礼收藏宴请佳品 52度 500mL 6瓶 红密鉴,五粮液(W
ULIANGYE)酒五粮液密鉴浓香型白酒礼盒白酒整箱口粮酒送礼收藏宴请佳品 52度 500mL 6瓶 红密鉴"
"珍酒贵州珍酒 珍十五 2021年份酒 53度酱香型白酒 送礼商务 53%vol 500mL 6瓶 整箱装,珍酒贵州珍酒 珍十五 2021年份酒 53度酱香型白
酒 送礼商务 53%vol 500mL 6瓶 整箱装,珍酒珍十五 酱香型白酒整箱装 53度 500ml*6瓶酒中珍品 大曲坤沙"
"茅台(MOUTAI) 汉酱酒 酱香型白酒 51度 500ml*6瓶 整箱装,习酒贵州习酒 53度 圆习酒 老习酒 500ml*6 整箱装 酱香型白酒,剑南春
水晶剑 浓香型白酒 喜宴名酒 38度 500mL 6瓶 整箱装"
"洋河 蓝色经典 天之蓝 42度 520ml*6瓶 整箱装 绵柔浓香型白酒 送礼,洋河【官方授权】蓝色经典 口感绵柔浓香型500ml*2瓶白酒 梦之蓝M3 45度 礼盒装,洋河 梦之蓝M3 45度 500ml*2瓶 礼盒装 绵柔浓香型白酒,洋河梦之蓝M3 52度 500ml*2瓶 礼盒装 绵柔浓香型白酒,洋河
之蓝M3 52度 500ml*2瓶 礼盒装 绵柔浓香型白酒"
"五粮液股份 五粮春 浓香型四川宜宾白酒粮食酒 五粮春 45度 500ml*6瓶整箱,五粮液股份 五粮春 浓香型四川宜宾白酒粮食酒 五粮春 45
度 500ml*6瓶整箱,洋河 梦之蓝M6+ 52度 550ml*2瓶 礼盒装 绵柔浓香型白酒"
"茅台(MOUTAI)53度500ml贵州茅台酒 飞天茅台,茅台(MOUTAI)53度500ml贵州茅台酒 飞天茅台 2023单瓶500ML,茅台(MOUTAI)贵州茅台
酒 飞天茅台礼盒 53度 酱香型白酒 500ml*2两瓶装"
2、全量自训练word2vec模型
2.1 读取语料文件
# 定义函数来读取语料库文件
def read_corpus(file_path):lines = []with open(file_path, 'r', encoding='utf-8') as f:for i, line in enumerate(f):lines.append(line.replace('"','').replace(' ','').strip().split(',')) # 每行按,分割好了return linescorpus = read_corpus(corpus_file)
corpus[:5]

2.2 训练 Word2Vec 模型
# 设置 Word2Vec 模型的参数
vector_size = 20 # 设置词向量的维度
window = 5 # 窗口大小,控制上下文窗口的大小
min_count = 2 # 最小词频,过滤掉低频词
sg = 0 # 0表示使用 CBOW 模型,1示使用 Skip-Gram 模型# 训练 Word2Vec 模型
model = Word2Vec(corpus, vector_size=vector_size, window=window, min_count=min_count, sg=sg)
2.3 保存和读取模型
# 保存训练好的模型
model.save('word2vec_model_1batch_train_sku_name.w2v')# 模型加载
import gensim
model1 = gensim.models.word2vec.Word2Vec.load('word2vec_model_1batch_train_sku_name.w2v').wv
model1.similarity('茅台贵州茅台53度飞天茅台500ml*1瓶酱香型白酒单瓶装', '剑南春 水晶剑 52度 500ml*6瓶 浓香型白酒 整箱装')
2.4 查看TopN相似和 词与词之间的相似系数
# 查看商品 TopN 相似性商品
model.wv.most_similar('国台 十五年 酱香型白酒 53度 500ml单瓶装 15酱酒 茅台镇纯粮食酱酒', topn=10)for item_ta in ['茅台贵州茅台53度飞天茅台500ml*1瓶酱香型白酒单瓶装', '剑南春 水晶剑 52度 500ml*6瓶 浓香型白酒 整箱装']:# 查看print("\n%s商品 TopN 相似性商品为: "%item_ta)print(model.wv.most_similar(item_ta, topn=10))

2.5 获取用户向量
# 获取用户向量
model.wv['茅台贵州茅台53度飞天茅台500ml*1瓶酱香型白酒单瓶装']

3、增量训练word2vec模型
3.1 增量训练
from gensim.models import Word2Vec
import logging# 设置日志级别以便查看进度
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)# 假设有一个大规模的语料库文件
corpus_file = 'large_corpus_sku_name.txt'# 定义 Word2Vec 模型的参数
vector_size = 100 # 词向量维度
window = 5 # 窗口大小
min_count = 5 # 最小词频,过滤掉低频词
workers = 4 # 使用多少个 CPU 核心来训练模型# 初始化空的 Word2Vec 模型
model = Word2Vec(vector_size=vector_size, window=window, min_count=min_count, workers=workers)# 逐步加载和训练数据
def read_and_train_model(model, corpus_file, chunk_size=10000):with open(corpus_file, 'r', encoding='utf-8') as f:lines = []for i, line in enumerate(f):lines.append(line.strip().replace('"','').split(',')) # 假设每行已经分好词了,按空格分割if i > 0 and i % chunk_size == 0:if model.corpus_count == 0:# 第一次建立词汇表model.build_vocab(lines)else:# 更新词汇表model.build_vocab(lines, update=True)# 训练模型model.train(lines, total_examples=len(lines), epochs=model.epochs)# 清空 lines 列表,以便下一个批次数据lines = []# 处理最后一个不完整的数据块if lines:if model.corpus_count == 0:model.build_vocab(lines)else:model.build_vocab(lines, update=True)model.train(lines, total_examples=len(lines), epochs=model.epochs)# 开始增量学习
read_and_train_model(model, corpus_file)# 保存训练好的模型
model.save('word2vec_model_increase_train_sku_name.w2v')
3.2 查看商品 TopN 相似性商品
# 查看商品 TopN 相似性商品
model.wv.most_similar('茅台(MOUTAI)53度飞天酱香型白酒500ml单瓶装', topn=10)
4、模型局限性: 不能识别不在语料库中的词

5、解决方法:使用fasttext模型
5.1 fasttext模型训练
from gensim.models import FastText
# 模型训练
model = FastText(vector_size=20, window=3, min_count=1) # instantiate
model.build_vocab(corpus_iterable=corpus)
model.train(corpus_iterable=corpus, total_examples=len(corpus), epochs=10) #或者
model2 = FastText(vector_size=20, window=3, min_count=1, sentences=common_texts, epochs=10)
5.2 查询不在词库中的词向量
print(model.wv['【浓香】五粮液甲辰龙年纪念酒(5瓶装)'])
print(model.wv.most_similar('【浓香】五粮液甲辰龙年纪念酒(5瓶装)', topn=10))

到这里虽然能解决不在词库中词的词向量查询问题,但高相关词(商品)的检索又变得有偏了,缺乏一定的多样性。
相关文章:
自训练和增量训练word2vec模型
1、自己准备训练语料文件 根据自己的业务场景准备训练数据,比如用户在商城上的同购行为序列或同浏览行为序列。 我们希望通过自己训练业务相关的语料word2vec模型来获得词嵌入、词相关性查询等。 1.1 准备语料库文件 # 示例:准备自己的一个大规模的语…...
华三路由器开启web访问
配置路由器: # 配置Web用户名为admin,认证密码为admin,服务类型为http,用户角色为network-admin。 [Sysname] local-user admin [Sysname-luser-manage-admin] service-type http [Sysname-luser-manage-admin] authorization…...
C++软件开发值得推荐的十大高效软件分析工具
目录 1、概述 2、高效软件工具介绍 2.1、窗口查看工具SPY 2.2、Dependency Walker 2.3、剪切板查看工具Clipbrd 2.4、GDI对象查看工具GDIView 2.5、Process Explorer 2.6、Prcoess Monitor 2.7、API Monitor 2.8、调试器Windbg 2.9、反汇编工具IDA 2.10、抓包工具…...
vue2老项目中node-sass更换dart-sass
更换原因:node-sass经常会出现node版本问题,就很麻烦 卸载项目中的node-sass sass-loader npm uninstall sass-loader sass 安装dart-sas sass-loader 推荐安装sass1.26.2 sass-loader7.3.1 npm install sass-loader7.3.1 sass1.26.2 从新配置vue.…...
源/目的检查开启导致虚拟IP背后的LVS无法正常访问
情况描述 近期发现48网段主机无法访问8.83这个VIP(虚拟IP),环境是 8.83 绑定了两个LVS实例,然后LVS实例转发到后端的nginx 静态资源;整个流程是,客户端发起对VIP的请求,LVS将请求转发到后端实例…...
类和对象(四)
构造函数中的初始化列表 之前在实现构造函数时,主要是在函数体内进行赋值,而构造函数还有另一种初始化方式,通过初始化列表进行初始化。 初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成员列表,…...
<PLC><HMI><汇川>在汇川HMI画面中,如何为UI设置全局样式?
前言 汇川的HMI软件是使用了Qt来编写的,因此在汇川的HMI程序编写过程,是支持使用qt的样式来自定义部件样式的,即qss格式。 概述 汇川的软件本身提供三个系统的style样式,我们可以直接使用,但是,如果系统提供的样式不符合你的需求,那么你可以对其进行修改,或者自己新建…...
在Git项目中添加并应用“.gitignore”文件
在Git项目中添加并应用.gitignore文件 创建或修改.gitignore文件: 在项目的根目录下创建一个名为.gitignore的文件。如果已经有此文件,可以直接修改。 在文件中添加您希望Git忽略的文件和目录。例如: # 忽略所有的log文件 *.log# 忽略所有的…...
LeetCode Hot100 搜索二维矩阵
给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。…...
iOS中的KVO(Key-Value Observing)详解
iOS中的KVO(Key-Value Observing)详解 一、KVO概述 KVO(Key-Value Observing),即键值观察/监听,是苹果提供的一套事件通知机制。它允许一个对象(观察者)观察/监听另一个对象&#…...
算法 —— 暴力枚举
目录 循环枚举 P2241 统计方形(数据加强版) P2089 烤鸡 P1618 三连击(升级版) 子集枚举 P1036 [NOIP2002 普及组] 选数 P1157 组合的输出 排列枚举 P1706 全排列问题 P1088 [NOIP2004 普及组] 火星人 循环枚举 顾名思…...
构造+有序集合,CF 1023D - Array Restoration
一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1023D - Array Restoration 二、解题报告 1、思路分析 先考虑合法性检查: 对于数字x,其最左位置和最右位置 之间如果存在数字比x小,则非法 由于q次操作,第q…...
Scrapy 爬取旅游景点相关数据(四)
本节内容主要为: (1)创建数据库 (2)创建数据库表 (3)爬取数据进MYSQL库 1 新建数据库 使用MYSQL数据库存储数据,创建一个新的数据库 create database scrapy_demo;2 新建数据表 CR…...
Vue常用指令及其生命周期
作者:CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 目录 1.常用指令 1.1 v-bind 1.2 v-model 注意事项 1.3 v-on 注意事项 1.4 v-if / v-else-if / v-else 1.5 v-show 1.6 v-for 无索引 有索引 生命周期 定义 流程 1.常用指令 Vue当中的指令…...
简化数据流:Apache SeaTunnel实现多表同步的高效指南
Apache SeaTunnel除了单表之间的数据同步之外,也支持单表同步到多表,多表同步到单表,以及多表同步到多表,下面简单举例说明如何实现这些功能。 单表 to 单表 一个source,一个sink。 从mysql同步到mysql,…...
均匀圆形阵列原理及MATLAB仿真
均匀圆形阵列原理及MATLAB仿真 目录 前言 一、均匀圆阵原理 二、圆心不存在阵元方向图仿真 三、圆心存在阵元方向图仿真 四、MATLAB仿真代码 总结 前言 本文详细推导了均匀圆形阵列的方向图函数,对圆心不放置阵元和圆心放置阵元的均匀圆形阵列方向图都进行了仿…...
vue2使用univerjs
1、univerjs Univer 提供了一个全面的企业级文档与数据协同的解决方案,支持电子表格、文本文档和演示幻灯片三大核心文档类型。通过灵活的 API 和插件机制,开发者可以在 Univer 的基础上进行个性化功能的定制和扩展,以适应不同用户在不同场景…...
VUE3 el-table-column header新增必填*
1.在需要加必填星号的el-table-column上添加render-header属性 <el-table-column :label"getName(产品代码)" :render-header"addRedStart" prop"MODELCODE" min-width“4.5%”> <template v-slot"scope"> <el-input …...
条件概率和贝叶斯公式
...
Kali中docker与docker-compose的配置
权限升级 sudo su 升级为root用户 更新软件 apt-get update安装HTTPS协议和CA证书 apt-get install -y apt-transport-https ca-certificates下载docker apt下载docker apt install docker.io 验证docker安装是否成功 查版本 docker -v 启动docker systemctl start …...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...


