当前位置: 首页 > news >正文

自训练和增量训练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 …...

C++ | Leetcode C++题解之第283题移动零

题目&#xff1a; 题解&#xff1a; class Solution { public:void moveZeroes(vector<int>& nums) {int n nums.size(), left 0, right 0;while (right < n) {if (nums[right]) {swap(nums[left], nums[right]);left;}right;}} };...

Exponential Moving Average (EMA) in Stable Diffusion

1.Moving Average in Stable Diffusion (SMA&EMA) 1.Moving average 2.移动平均值 3.How We Trained Stable Diffusion for Less than $50k (Part 3) Moving Average 在统计学中&#xff0c;移动平均是通过创建整个数据集中不同选择的一系列平均值来分析数据点的计算。 …...

017、Vue动态tag标签

文章目录 1、先看效果2、代码 1、先看效果 2、代码 <template><div class "tags"><el-tag size"medium"closable v-for"item,index in tags":key"item.path":effect"item.title$route.name?dark:plain"cl…...

RocketMQ 架构概览

Apache RocketMQ 是一个分布式消息中间件和流计算平台&#xff0c;提供低延迟、高性能和可靠的队列服务&#xff0c;并且支持大规模的分布式系统。在详细介绍 RocketMQ 的整体架构之前&#xff0c;先了解其设计目标和核心特性是很重要的。RocketMQ 主要用于处理大规模的消息&am…...

优化医疗数据管理:Kettle ETL 数据采集方案详解

在现代医疗保健领域&#xff0c;数据的准确性、完整性和及时性对于提高医疗服务质量和患者护理至关重要。为了有效管理和利用医疗数据&#xff0c;Kettle ETL&#xff08;Extract, Transform, Load&#xff09;数据采集方案成为了许多医疗机构的首选工具之一。本文将深入探讨Ke…...

spring-from表单

在spring boot当中,from表单怎样开发(name=value) 先列出接口所需信息(抓包得到请求信息),将这些必要信息以注解的方式表达出来 步骤: 梳理前置条件(请求地址,请求header,请求方法,请求数据,响应结果)编辑一个普通类,在类上标记注解@Controller: 标记在类上,让类…...

【.NET】asp.net core 程序重启容器后redis无法连接,连接超时

环境是容器化部署asp.net core 程序当有大量请求打到容器如果此时重启容器会出现&#xff0c;redis无法连接情况。 使用 csredis 库报错&#xff1a; Status unavailable, waiting for recovery. Connect to server timeout 使用StackExchange.Redis 报错&#xff1a; Time…...

【vue前端项目实战案例】Vue3仿今日头条App

本文将开发一款仿“今日头条”的新闻App。该案例是基于 Vue3.0 Vue Router webpack TypeScript 等技术栈实现的一款新闻资讯类App&#xff0c;适合有一定Vue框架使用经验的开发者进行学习。 项目源码在文章末尾 1 项目概述 该项目是一款“今日头条”的新闻资讯App&#xf…...

常见的文心一言的指令

文心一言&#xff0c;作为百度研发的预训练语言模型“ERNIE 3.0”的一项功能&#xff0c;能够与人对话互动&#xff0c;回答问题&#xff0c;协助创作&#xff0c;高效便捷地帮助人们获取信息、知识和灵感。以下是一些常见的文心一言指令类型及其具体示例&#xff1a; 1. 查询…...

数字货币交易接口实现(含源代码)

数字货币交易接口实现&#xff08;含源代码&#xff09; 使用币安交易接口步骤1&#xff1a;注册API密钥步骤2&#xff1a;安装所需库步骤3&#xff1a;使用API进行交易获取市场数据查看账户信息执行交易错误处理安全提示 使用OKX交易接口步骤1&#xff1a;注册API密钥步骤2&am…...