word Embedding、Word2Vec学习
1、概述
word Embedding 将自然语言单个词向量化,转换完向量可以进行计算了(比如:相似度计算)。
word2vec是一个简化版的embedding训练工具,训练时语料越多、质量越高,训练后的模型越准确。
百炼平台、魔搭平台上有预训练好的embedding模型,可以直接使用,不用自己从头训练,图片和文字的embedding模型是不同的,意味着你不能用文字的embedding模型去处理图片。

embedding模型和LLM是完全不一样的,
embedding模型能力 < LLM, embedding模型是做向量化的,LLM是理解并回答用户问题的。
2、Word2Vec示例
目的
根据语料库使用wordvec训练embedding模型,加载训练的模型,计算俩个词的相似度
步骤:
1、数据预处理
对给定的txt文件,分词
因为原txt中都是句子,用jieba把连续的句子切分成独立的词语
比如:"孙悟空大闹天宫"--》孙悟空 大闹 天宫
2、训练Word2Vec模型
根据语料库,设置模型参数,用wordvec训练模型
用PathLineSentences读取分词后的文本文件(按行读取,每行是一个分词后的句子)
设置模型参数
model = word2vec.Word2Vec(sentences, vector_size=100, window=3, min_count=1)
vector_size:词向量维度(如100/128,维度越高表示的语义越细,训练成本越高)
window:上下文窗口(比如:3表示取当前词前后3个词)
min_count: 最小词频(过滤出现次数少于该值的词,保留出现>=1的词)
训练模型:Word2vec会为每个词生成一个固定维度的向量(比如:这里的100维),语义相似的词,向量距离也近。
3、使用模型计算词相似度
加载训练好的模型,计算俩个词的相似度,本质是计算俩个词向量的余弦相似度(值越接近1,语义越相似)
model = word2vec.Word2Vec(sentences, vector_size=100, window=3, min_count=1)
# 计算"孙悟空"和"猪八戒"的相似度
print(model.wv.similarity('孙悟空', '猪八戒'))
数据预处理,对txt文件进行中文分词的代码
需安装模块:pip install jieba
# -*-coding: utf-8 -*-
# 对txt文件进行中文分词
import jieba
import os
from utils import files_processing
# 源文件所在目录
source_folder = './journey_to_the_west/source'
segment_folder = './journey_to_the_west/segment'
# 字词分割,对整个文件内容进行字词分割
def segment_lines(file_list,segment_out_dir,stopwords=[]):
for i,file in enumerate(file_list):
segment_out_name=os.path.join(segment_out_dir,'segment_{}.txt'.format(i))
with open(file, 'rb') as f:
document = f.read()
document_cut = jieba.cut(document)
sentence_segment=[]
for word in document_cut:
if word not in stopwords:
sentence_segment.append(word)
result = ' '.join(sentence_segment)
result = result.encode('utf-8')
with open(segment_out_name, 'wb') as f2:
f2.write(result)
# 对source中的txt文件进行分词,输出到segment目录中
file_list=files_processing.get_files_list(source_folder, postfix='*.txt')
segment_lines(file_list, segment_folder)

训练embedding模型及使用代码
需安装模块:pip install gensim
# -*-coding: utf-8 -*-
from gensim.models import word2vec
# 如果目录中有多个文件,可以使用PathLineSentences
segment_folder = './journey_to_the_west/segment'
# 切分之后的句子合集
sentences = word2vec.PathLineSentences(segment_folder)
# 设置模型参数,进行训练
model = word2vec.Word2Vec(sentences, vector_size=100, window=3, min_count=1)
print(model.wv.similarity('孙悟空', '猪八戒'))
print(model.wv.similarity('孙悟空', '孙行者'))
print(model.wv.most_similar(positive=['孙悟空', '唐僧'], negative=['孙行者']))
# 保存模型
#model2.save('./models/word2Vec.model')

自己思考
可以利用embedding技术做推荐系统,
比如:搜索一个商品,推荐相似的商品。
把"商品"转换成向量,通过向量相似度衡量商品相似度。
AI上搜索了下,感觉这个更容易理解
实现 “相似商品推荐”
当用户搜索 / 点击某个商品时:
- 取出该商品的 embedding 向量;
- 计算这个向量和平台所有商品向量的余弦相似度(和我们计算 “孙悟空”“猪八戒” 相似度的逻辑完全一样);
- 按相似度排序,把 Top N 的商品推荐给用户。
举个具体例子
比如电商平台上:
- 商品 A:“华为 Mate60 Pro 5G 手机” → 生成向量 Vec_A;
- 商品 B:“华为 Mate60 标准版手机” → 生成向量 Vec_B;
- 商品 C:“苹果 iPhone15 Pro 手机” → 生成向量 Vec_C;
- 计算相似度:similarity (A,B)=0.95,similarity (A,C)=0.6;
- 当用户搜索 “华为 Mate60 Pro” 时,优先推荐商品 B,再考虑商品 C。
补充:embedding 推荐的优势
- 超越 “关键词匹配”:传统推荐可能只看 “标题有没有相同词”,而 embedding 能理解语义 —— 比如 “男士运动鞋” 和 “男款跑步鞋”,即使关键词不完全一致,向量相似度也高,能推荐更精准;
- 泛化能力强:能挖掘用户没明确说出来的需求,比如用户买了 “婴儿奶粉”,embedding 能关联到 “婴儿奶瓶”“纸尿裤” 等相关商品。
更多推荐


所有评论(0)