本文详细介绍了Word2Vec技术,包括其基本概念、Skip-Gram和CBOW两种模型与架构。文章指导读者如何从数据收集、预处理到训练自己的Word2Vec模型,并提供了评估方法。同时分析了Word2Vec的优缺点及其在文本相似度计算、情感分析等领域的应用,为NLP初学者提供了完整的学习路径。


@ 目录

  • 一、Word2Vec
  • 二、Word2Vec 的两种主要模型
  • 2.1、Skip-Gram(跳字模型)
  • 2.2、CBOW(连续词袋)
  • 三、Word2Vec的两种主要架构
  • 3.1、跳字模型(Skip-Gram)
  • 3.2、连续词袋(Continuous Bag of Words, CBOW)
  • 四、构建自己的 Word2Vec 模型
  • 4.1、数据收集和预处理
  • 4.2、训练模型
  • 4.3、评估与应用
  • 五、模型的优缺点
  • 5.1、优点
  • 5.2、缺点
  • 六、Word2Vec 有哪些实际的应用场景

一、Word2Vec

  • Word2Vec,顾名思义就是词语 to 向量。
  • Word2Vec 的主要能力把词汇放在多维的空间里,相似的词汇会被放在邻近的位置
  • Word2Vec 是一种广泛使用的 NLP 技术,目的是将词语转换成向量形式,使计算机能够理解。它通过学习大量文本数据,捕捉到词语间的上下文关系,进而生成词的高维表示,即词向量。
  • Word2Vec 的优点是能够揭示词与词之间的相似性,比如通过计算向量之间的距离来找到语义上相近的词。
  • Word2Vec 的应用非常广泛,包括但不限于情感分析、机器翻译和推荐系统等。尽管非常有用,但是它也有局限性,比如无法处理多义词,因为每个词仅被赋予一个向量,不考虑上下文中的多种含义。

二、Word2Vec 的两种主要模型

2.1、Skip-Gram(跳字模型)

  • Skip-Gram 的目标是根据目标词预测其周围的上下文词汇。

2.2、CBOW(连续词袋)

  • CBOW 模型的目标是根据周围的上下文词汇来预测目标词。

三、Word2Vec的两种主要架构

3.1、跳字模型(Skip-Gram)

  • 跳字模型(Skip-Gram)架构的示意图。

  • List item

  • Skip-Gram 模型,它是一种通过一个给定的目标词来预测其上下文词的神经网络架构。与 CBOW 模型相反,Skip-Gram 每次接收一个词作为输入,并预测它周围的词,这使其在处理较大数据集和捕获罕见词或短语时表现更出色。

3.2、连续词袋(Continuous Bag of Words, CBOW)

  • 连续词袋(Continuous Bag of Words, CBOW)架构的示意图。
  • CBOW 模型,它是一种通过上下文预测目标词的神经网络架构。在 Word2Vec 中,CBOW 尝试从一个词的“上下文”来预测这个词本身。上下文由目标词周围的一个或多个词组成,这个数目由窗口大小决定。窗口是指上下文词语的范围,如果窗口为 10,那么模型将使用目标词前后各 10 个词。

四、构建自己的 Word2Vec 模型

4.1、数据收集和预处理

  • 网上下载了一个公开的微博内容数据集。我们先进行文本预处理。回想一下我们前几节课提到的方法,步骤就是数据加载 -> 去除停用词 -> 分词等等。这里我们就进行这些简单的预处理操作。

    import jiebaimport xml.etree.ElementTree as ET# 读取XML文件并解析file_path = 'data.xml'tree = ET.parse(file_path)root = tree.getroot()# 获取所有<article>标签的内容texts = [record.find('article').text for record in root.findall('RECORD')]print(len(texts))# 停用词列表,实际应用中需要根据实际情况扩展stop_words = set(["的", "了", "在", "是", "我", "有", "和", "就"])# 分词和去除停用词processed_texts = []for text in texts:    if text is not None:        words = jieba.cut(text)        processed_text = [word for word in words if word not in stop_words]        processed_texts.append(processed_text)# 打印预处理后的文本for text in processed_texts:    print(text)
    
  • 预处理完成后,产生了 40831 条数据用来训练。

4.2、训练模型

  • 我们直接使用 gensim 库,这个库提供了一个简洁的 API 来训练 Word2Vec 模型。我们选择 CBOW 模型。vector_size 参数设置了词向量的维度,window 参数设置了上下文窗口的大小,min_count 参数设置了词频的最小阈值,workers 参数设置了训练的线程数,sg=1 表示使用 Skip-Gram 架构,sg=0 表示使用 CBOW 架构。你可以看一下具体的代码。

    # 训练Word2Vec模型model = Word2Vec(sentences=processed_texts, vector_size=100, window=5, min_count=1, workers=4, sg=1)# 保存模型model.save("word2vec.model")
    
  • 当执行完上面的代码后,本地生成了 3 个文件。

    word2vec.model:主模型文件,包含了模型的参数、词汇表等信息。不仅存储了模型的架构信息,还包括了词汇频率、模型训练状态等。这个文件是加载完整模型所必需的。

    word2vec.model.wv.vectors.npy:这个文件存储了模型中所有词汇的词向量。Word2Vec 模型通过学习这些词向量来捕捉词语之间的关系。.npy 是 NumPy 数组的文件格式,这意味着这些向量是以 NumPy 数组的形式存储的,可以高效地加载和处理。

    word2vec.model.syn1neg.npy:这个文件存储的是训练过程中使用的负采样权重。当设置 Word2Vec 模型的 negative 参数大于 0 时,启用负采样来优化模型的训练过程。这个文件中的权重是模型训练中用于负采样的部分,对于模型的学习和生成词向量至关重要。

4.3、评估与应用

  • 模型训练完成,我们可以简单看一下效果。

    # 加载模型model = Word2Vec.load("word2vec.model")print("模型加载完成")# 使用模型# 获取一个词的向量print(model.wv['科技'])# 找到最相似的词similar_words = model.wv.most_similar('科技', topn=5)print(similar_words)
    
  • 程序输出如下:

    [ 0.08377746  1.4331518   0.5016794  -0.09138884 -0.1221515  -0.08544948  0.20863684  0.9883061  -0.26002824 -0.02130504  0.43953782 -0.11446979  0.4636304  -0.67642045  0.47473285 -0.4832982   0.35540286 -0.5201831  0.0174433  -0.40980706 -0.14922573  0.5372444   0.53256696 -0.4517828 -1.1696991   0.32669672 -0.34389514  0.5889707  -0.20616521 -0.20512877  0.6516593  -1.3999687  -0.00352089  0.422699   -0.32610646  1.5900621  0.8748267  -0.00933662 -0.77871656 -0.2894545   0.7261106  -0.05075585 -0.5845707   0.7334658  -0.22150414  0.3801838  -0.50801146 -0.8370443 -0.03138219  0.08028921  0.2562184  -0.49664307 -0.8038274   0.0211964 -0.6316118   0.12551498  0.58615136  0.467213   -0.15562508 -0.58768135  0.07793431  0.19536994 -0.1413024  -0.3790597   0.19154921  0.4437868  0.08398101  0.10911901 -0.6428759  -0.07833739 -0.8982224   0.8185256  0.4029754   0.05831718 -0.23952699  0.06487722 -0.6090112  -0.03935737 -0.1745928   0.2225394  -0.7901157  -0.08253222 -0.3205032   0.16001679 -0.06188322 -0.4120766  -0.55351204  1.1411817  -0.24971966  0.01067457  0.205598    0.4778782  -0.2214068  -0.5329161   0.9778511   0.5545867  0.50671256  0.6427801  -0.45557818 -0.29751778][('产业', 0.9526691436767578), ('创新', 0.9492118954658508), ('生态', 0.9462338089942932), ('应用', 0.9439343810081482), ('战略', 0.9437689185142517)]
    
  • 这是一个 100 维的向量空间,和科技比较相似的词有产业、创新、生态、应用、战略。看着还挺像这么回事,基本准确的。我们怎么科学地进行评估呢?有好几种方式。

    词相似度计算:通过比较模型生成的词与人工标注的词的相似度,来评估模型,一致性越高,说明效果越好。常用的数据集包括 WordSim-353、SimLex-999 等。

    词类比计算:评估模型在解决“词 A 之于词 B 如同词 C 之于什么”这类问题的能力,比如,北京之于中国如同巴黎之于什么?

    OOV 词比率:评估数据集中有多少词对因为包含未知词(模型词汇表外的词)而被排除在评估之外的比率。理想情况下,OOV 率应该尽可能低,以确保评估结果能更全面地代表模型的性能。

    定性分析:对于给定的词汇,查看模型认为与其最相似的其他词汇,判断这些相似词是否符合预期。

    实际应用:将 Word2Vec 模型应用到具体的下游任务,如文本分类、情感分析、实体识别等,观察模型表现的提升。通过比较使用 Word2Vec 词向量前后的任务表现,可以间接评估 Word2Vec 模型的有效性。

  • 我们采用第一种方式,来详细看一下评估过程。

  • 首先,手动创建评估数据集valid.tsv,内容如下:

  • 总共 3 列,第 1 列和第 2 列是相似词,第 3 列是我人工打的分,实际评估过程中,评估数据集可以自己基于偏好进行人工打分,同时,准备的词汇数量可以再多一些,为了节省时间,我只准备了二十来个词。数据集准备好就可以评估了。

    # 加载模型model = Word2Vec.load("word2vec.model")print("模型加载完成")# 类比result = model.wv.evaluate_word_pairs("valid.tsv")print(result)
    
  • 运行程序输入如下结果:

    (PearsonRResult(statistic=0.5510228130115481, pvalue=0.021875787422131296), SignificanceResult(statistic=0.5076852492192858, pvalue=0.03748715633121946), 10.526315789473683)
    
  • 整体分为 Pearson 和 Spearman 相关性系数,以及 OOV 率,先来看 Pearson 系数。

    statistic=0.5510228130115481:范围从 -1 到 1,其中 1 表示完全正相关,-1 表示完全负相关,0 表示无相关。这个值 0.55 意味着我们的模型词向量与人工评分之间存在中等程度的正相关。

    pvalue=0.021875787422131296:这是 p 值,用于检验相关性的统计显著性。一个常用的显著性水平阈值是 0.05。这个 p 值约 0.022,小于 0.05,意味着这个相关性是统计显著的,我们有足够的证据认为模型的词向量与人工评分之间的相关性不是偶然出现的。简单来讲就像摇奖现场的公证员一样,证明评估结果不是偶然的,是有说服力的。

  • 再来看 Spearman 系数。

    statistic=0.5076852492192858:同样范围从 -1 到 1。Spearman 相关性考虑的是变量之间的等级相关,而不是直接的数值大小。这个值 0.51 也表示了中等程度的正相关。

    pvalue=0.03748715633121946:同样是 p 值,小于 0.05 的常用显著性水平,表示这种相关性是统计显著的。

  • 最后看下 OOV 率,就是评估数据集中出现的词汇不在模型词汇表里的概率。

    10.526315789473683:表示在我们的评估数据集中,有大约 10.53% 的词对包含至少一个不在模型词汇表中的词(OOV 词)。这部分词对在评估过程中被忽略,不参与相关性计算。

  • 总体看,一个好的 Word2Vec 模型应该在相关性测试中展现出与人类判断一致的趋势,比如有较高的 Pearson 和 Spearman 相关性系数、具有统计显著性,即较低的 p 值,同时具有可接受的 OOV 率。

  • 我们本次训练的模型,相关性系数呈中等,统计显著的 p 值较低,表明模型有一定效果,但是否“足够好”还需要根据模型的实际应用场景和要求来决定。比如,对于一些应用来说,可能需要更高的相似度准确性;而对于其他应用来说,当前模型的表现可能已经足够。另外,我们还需要探索降低 OOV 率的方法,比如扩大训练数据集或采用预训练的词向量,可能会进一步提升模型的表现。

  • 其他评估方法我们就不一一尝试了,大同小异,感兴趣的话,你可以挨个试一下。

五、模型的优缺点

5.1、优点

词嵌入质量高:Word2Vec 能够学习到富含语义信息的高质量词向量,使语义上相近的词在向量空间中也相近。

捕捉多种语言规律:Word2Vec 能够捕捉到一定的语法和语义规律,比如词类比:男人之于女人如同国王之于王后。

效率高:相比于早期的基于矩阵分解的词嵌入方法,Word2Vec 的训练效率更高,尤其是在处理大规模语料库时。

可解释性:Word2Vec 模型学习到的词向量具有一定的可解释性,可以通过向量运算进行词之间的关系探索。

5.2、缺点

OOV 问题:Word2Vec 模型只能对其训练期间见过的词汇生成向量。对于新出现的或者罕见的词汇,模型无法直接提供词向量(尽管可以通过一些技巧进行处理)。

词义多样性:Word2Vec 为每个词汇生成一个唯一的向量,因此无法直接处理一个词多种含义的情况,也就是多义词问题。

依赖于大量文本数据:为了训练出高质量的词向量,Word2Vec 需要大量的文本数据。在数据量较小的情况下,模型的效果可能会受限。

上下文独立:Word2Vec 生成的词向量是静态的,不考虑词在特定句子中的上下文。这与后来的上下文相关的词嵌入模型,如 ELMo、BERT 等形成对比。

缺乏层次化表示:Word2Vec 提供的是词汇级别的向量表示,缺乏更细致的语法和语义结构信息,这些在一些复杂的 NLP 任务中可能是必需的。

六、Word2Vec 有哪些实际的应用场景

  • Word2Vec 模型因为能够捕捉到词语和词语之间复杂的语义语法关系,所以在 NLP 任务中被广泛使用。
  • 计算文本相似度:比较文本中词向量的平均值或加权平均值,可以用于文档分类、推荐系统中相似项目的检索,或者在法律文档、学术论文等领域内查找相关内容。
  • 情感分析:尤其是社交媒体平台,用 Word2Vec 模型来识别用户评论、帖子或新闻报道中的情绪态度。
  • 机器翻译:Word2Vec 可以用来生成源语言和目标语言的词向量,通过这些向量,可以改进翻译模型的性能,尤其是在处理罕见词或短语时,Word2Vec 能够提供更加丰富的语义信息。
  • 搜索引擎优化:在搜索引擎中,Word2Vec 可以用来理解用户查询的意图,并提高搜索结果的相关性。通过分析查询和文档内容的词向量相似度,搜索引擎能够提供更准确、更贴近用户意图的搜索结果。
  • 内容推荐系统:在推荐系统中,Word2Vec 可以用来分析用户的阅读或购买历史,并推荐语义上相近的产品或内容。这种基于内容的推荐方式能够提供更加个性化的推荐,提高用户满意度和参与度。

AI大模型从0到精通全套学习大礼包

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

只要你是真心想学AI大模型,我这份资料就可以无偿共享给你学习。大模型行业确实也需要更多的有志之士加入进来,我也真心希望帮助大家学好这门技术,如果日后有什么学习上的问题,欢迎找我交流,有技术上面的问题,我是很愿意去帮助大家的!

如果你也想通过学大模型技术去帮助就业和转行,可以扫描下方链接👇👇
大模型重磅福利:入门进阶全套104G学习资源包免费分享!

在这里插入图片描述

01.从入门到精通的全套视频教程

包含提示词工程、RAG、Agent等技术点
在这里插入图片描述

02.AI大模型学习路线图(还有视频解说)

全过程AI大模型学习路线

在这里插入图片描述
在这里插入图片描述

03.学习电子书籍和技术文档

市面上的大模型书籍确实太多了,这些是我精选出来的

在这里插入图片描述
在这里插入图片描述

04.大模型面试题目详解

在这里插入图片描述

在这里插入图片描述

05.这些资料真的有用吗?

这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。

所有的视频由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

在这里插入图片描述
在这里插入图片描述

智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念‌,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势‌,构建起"前沿课程+智能实训+精准就业"的高效培养体系。

课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

在这里插入图片描述
如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能 ‌突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐