自训练和增量训练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 …...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...


