LLM Core - Word2Vec
Word2Vec
概述
- 在 NLP 中,在文本预处理后,进行特征提取,涉及到将词语转化成数值的形式,方便计算机理解
- Word2Vec 的目的 - 将词语转换成向量形式,使得计算机能够理解
- 通过学习大量文本数据,捕捉到词语之间的上下文关系,进而生成词的高维表示 - 即词向量
架构
Word2Vec 有 2 种主要的模型 - Skip-Gram + CBOW
Model | Desc |
---|---|
CBOW | 根据周围的上下文词汇来预测目标词 |
Skip-Gram | 根据目标词预测其周围的上下文词汇 |
优劣
Key | Value |
---|---|
优点 | 揭示词与词之间的相似性 - 通过计算向量之间的距离来找到语义相近的词 |
缺点 | 无法处理多义词,每个词被赋予一个向量,不考虑上下文中的多种含义 |
模型架构
连续词袋 - Continuous Bag of Words, CBOW
跳字模型 - Skip-Gram
连续词袋
- CBOW 模型是一种通过上下文预测目标词的神经网络架构
- 上下文由目标词周围的一个词或多个词组成,这个数目由窗口大小决定
- 窗口是指上下文词语的范围 - 如果窗口为 10,那么模型将使用目标词前后各 10 个词
跳字模型
- Skip-Gram 模型是一种通过一个给定的目标词来预测其上下文词的神经网络
- 与 CBOW 模型相反,Skip-Gram 每次接收一个词作为输入,并预测它周围的词
- 适用场景 - 处理较大数据集 + 捕获罕见词
构建模型
数据收集
微博内容数据集 - http://www.nlpir.org/wordpress/download/weibo_content_corpus.rar
1 | <RECORDS> |
数据预处理
加载数据 -> 分词 -> 去除停用词
1 | import jieba |
输出
1 | texts: 227532 |
训练模型
1 | from gensim.models import Word2Vec |
使用 gensim 库来训练 Word2Vec 模型
Parameter | Desc |
---|---|
vector_size | 词向量的维度 |
window | 上下文窗口的大小 |
min_count | 词频的最小阈值 |
workers | 训练的线程数 |
sg | Training algorithm: 1 for skip-gram; otherwise CBOW. |
执行完成后,本地会生成 3 个文件
- word2vec.model
- 主模型文件,包含了模型的参数、词汇表等信息
- 存储了模型的架构信息,还包括词汇频率、模型训练状态等信息
- 该文件是加载完整模型所必需的
- word2vec.model.wv.vectors.npy
- 存储了模型中所有词汇的词向量
- Word2Vec 模型通过学习这些词向量来捕捉词语之间的关系
- .npy 是 NumPy 数组的文件格式
- 意味着词向量是以 NumPy 数组的形式存储的,可以高效地加载和处理
- word2vec.model.syn1neg.npy
- 存储训练过程中使用的负采样权重
- 当设置 Word2Vec 模型的 negative 参数大于 0 时,启用负采样来优化模型的训练过程
- 该文件中的权重是模型训练中用于负采样的部分,对于模型的学习和生成词向量至关重要
评估应用
相似词
1 | # 加载模型 |
输出 - IT / 产业 / 创新 / 雪旭 / 影响力
1 | 模型加载完成 |
评估方式
- 词相似度计算
- 通过比较模型生成的词与人工标注的词的相似度来评估模型,一致性越高,说明效果越好
- 常用的数据集 - WordSim-353 / SimLex-999
- 词类比计算
- 评估模型在解决类比问题的能力 - 词 A 之于词 B如同词 C 之于什么
- 例如 - 北京之于中国如同巴黎之于什么?
- OOV 词比率 - Out of vision
- 评估数据集中有多少词对包含未知词(模型词汇表外的词)而被排除在评估之外的比率
- 理想情况下,OOV 率应该尽可能低,以确保评估结果能更全面地代表模型的性能
- 定性分析
- 对于给定的词汇,查看模型认为与其最相似的其它词汇,判定这些词汇是否符合预期
- 实际应用
- 将 Word2Vec 模型应用到具体的下游任务,观察模型表现的提升
- 通过比较使用 Word2Vec 词向量前后的任务表现,可以间接评估 Word2Vec 模型的有效性
手动创建评估集 - 实际评估过程中,评估数据集可以基于偏好进行人工打分
相似词 1 | 相似词 2 | 人工评分 |
---|---|---|
没有 | 还有 | 1.1 |
腐败 | 媒体 | 6 |
微博 | 工作 | 2 |
北京 | 世界 | 7 |
可以 | 好 | 9 |
最 | 不是 | 0 |
问题 | 情况 | 8 |
他们 | 网友 | 7.3 |
今天 | 明天 | 6.9 |
美国 | 社会 | 3 |
政府 | 国家 | 7.2 |
大家 | 城管 | 3.0 |
公司 | 企业 | 9 |
孩子 | 朋友 | 6.1 |
经济 | 全国 | 7 |
时间 | 出现 | 2.1 |
分享 | 转发 | 8 |
记者 | 认为 | 5 |
你们 | 学生 | 6 |
评估方式 - 词类比计算
1 | # 加载模型 |
输出 - Pearson / Spearman 相关性系数
1 | 模型加载完成 |
Pearson 系数
- statistic=0.5439840080013675
- 范围 -1 ~ 1,其中 1 表示完全正相关,而 -1 表示完全负相关,而 0 表示无相关
- 54 意味着模型的词向量与人工评分之间存在中等程度的正相关
- pvalue=0.02398644828373347
- 用于检验相关性的统计显著性,一个常用的显著性水平阈值为 0.05
- 值为 0.02,小于 0.05,意味着这个相关性是统计显著的
- 可以认为模型的词向量与人工评分之间的相关性不是偶然出现的 - 很有说服力
Spearman 系数
- statistic=0.47695369660310627
- 范围 -1 ~ 1,Spearman 系数考虑的是变量之间的等级关系,而不是直接的数值大小
- 0.47 同样意味着中等程度的正相关
- pvalue=0.052886954016578384
- 小于 0.05 ≈ 相关性是统计显著的
OOV 率 - 评估数据集中出现的词汇不在模型词汇表里的概率 - Out of vision
- 10.526315789473683 - 大约有 10.53% 的词对包含至少一个不在模型词汇表中的词
- 该部分词对在评估过程中被忽略,不参与相关性计算
小结
- 一个好的 Word2Vec 模型应该在相关性测试中展现出与人类判断一致的趋势
- 指标
- 比较高的 Pearson 和 Spearman 相关性系数(>0.5)
- 具有统计显著性,即较低的 p 值(< 0.05)
- 并具有可接受的 OOV 率
模型优劣
容易理解 + 上手简单 + 应用广泛
优点
Advantage | Desc |
---|---|
词嵌入质量高 | 能够学习到富含语义信息的高质量词向量,使得语义上相近的词在向量空间上也相近 |
捕捉多种语言规律 | 能够捕捉到一定的语法和语义规律,如词类比 - 男人之于女人如同国王之于王后 |
效率高 | 相比于早期的基于矩阵分解的词嵌入方法,Word2Vec 训练效率更高 - 适用于大规模语料库 |
可解释性 | 学习到词向量具有一定的可解释性,可以通过向量运算进行词之间的关系探索 |
缺点
只认识见过的词 + 无法处理多义词 + 依赖大量文本 + 上下文独立 + 词汇级别
Disadvantage | Desc |
---|---|
OOV 问题 | 只能对其训练期间见过的词汇生成词向量,对于新出现或者罕见的词汇,无法直接提供词向量 |
语义多样性 | 为每个词生成一个唯一的词向量,无法直接处理一个词多种含义的情况,即多义词问题 |
依赖大量文本数据 | 为了训练出高质量的词向量,需要大量的文本数据,在数据量教小的情况下,模型效果可能会受损 |
上下文独立 | 生成的词向量是静态的,不考虑词在特定句子中的上下文 ELMo 和 BERT 是上下文相关的词嵌入模型 |
缺乏层次化表示 | 提供的是词汇级别的向量表示,缺乏更细致的语法和语义结构,在复杂的 NLP 任务中是必须的 |
应用场景
能够捕捉到词语之间的复杂语义语法关系,因此在 NLP 任务中广泛使用
Task | Desc |
---|---|
计算文本相似度 | 比较文本中词向量的平均值或加权平均值 文档分类、推荐系统中相似项目的检索、在法律文档中查找相关内容 |
情感分析 | 识别用户评论、帖子中的情绪态度 |
机器翻译 | 用来生成源语言和目标语言的词向量,通过这些向量来改进翻译模型的性能 - 罕见词或短语 |
搜索引擎优化 | 理解用户的查询意图,提高搜索结果的相关性 分析查询和文档内容的词向量的相似度,提供更准确、更贴近用户意图的搜索结果 |
内容推荐系统 | 分析用户的阅读或者购买历史,并推荐语义上相近的产品或内容 |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.