自训练和增量训练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 …...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...


