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上搜索了下,感觉这个更容易理解

实现 “相似商品推荐”

当用户搜索 / 点击某个商品时:

  1. 取出该商品的 embedding 向量;
  2. 计算这个向量和平台所有商品向量的余弦相似度(和我们计算 “孙悟空”“猪八戒” 相似度的逻辑完全一样);
  3. 按相似度排序,把 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 推荐的优势

  1. 超越 “关键词匹配”:传统推荐可能只看 “标题有没有相同词”,而 embedding 能理解语义 —— 比如 “男士运动鞋” 和 “男款跑步鞋”,即使关键词不完全一致,向量相似度也高,能推荐更精准;
  2. 泛化能力强:能挖掘用户没明确说出来的需求,比如用户买了 “婴儿奶粉”,embedding 能关联到 “婴儿奶瓶”“纸尿裤” 等相关商品。
Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐