Word2Vec 词向量

首先,为什么需要Word2Vec?
因为人类世界的字符、语言计算机理解不了,需要将词语、语音等形式转化成数值形式,计算机才能理解,Word2Vec顾名思义,就是将词语转换成向量
接下来就来揭开 word2vec 的神秘面纱吧~

Word2Vec

Word2Vec 是一种广泛使用的NLP技术,目的是将词语转换成向量形式,使计算机能够理解。
通过学习大量文本数据,捕捉到词语间的上下文关系,进而生成词的高维表示,即词向量。

Word2Vec有两种主要模型:跳字模型Skip-Gram连续词袋 CBOW(Continue Bag of Words)

  • Skip-Gramd: 根据目标词预测其周围的上下文词汇
  • CBOW:根据周围的上下文词汇来预测目标词。
    Word2Vec的优点就是能够揭示词与词之间的相似性(比如通过计算向量之间的距离来找到语义上相近的词)

模型架构

CBOW

CBOW 模型架构示意图
image
它是一种上下文预测目标词的神经网络架构,在Word2Vec中,CBOW尝试从一个词的"上下文"来预测词本身
上下文由目标词周围的一个或多个词组成,这个数目由窗口大小决定
窗口指的上下文词汇的范围,比如,窗口为10,那么模型将使用目标词前后各10个词

Skip-Gram

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

构建Word2Vec模型

数据收集和预处理

这里采用公开的 微博内容数据集
文本预处理:数据加载 --> 去除停用词 --> 分词等

停用词: 在自然语言文本中非常常见的单词,它们通常不携带特定含义,例如“the”、“a”、“an”、“in”等。在文本分析中,这些词语可能会干扰模型的训练效果,因此需要将它们从文本中移除。

import jieba
import 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)

使用ET在解析xml文件时,xml默认不识别HTML实体的,需要将&brvbar;替换成&#166;
以及将<fff> 删除掉

训练模型

这里使用gensim库,它提供了简洁的 API 来训练 Word2Vec模型

pip install gensim

这里采用CBOW模型。
vector_size参数设置了词向量的维度,window参数设置了上下文窗口的大小,min_count参数设置了词频的最小阈值,workers参数设置了训练的线程数,sg=1表示使用Skip-Gram架构,sg=0表示使用CBOW架构

from gensim.models import Word2Vec
# 训练Word2Vec模型
model = Word2Vec(sentences=processed_texts, vector_size=100, window=5, min_count=1, workers=4, sg=0)
# 保存模型
model.save("model/word2vec/word2vec.model")

执行结果:
image
生成三个文件:

  1. word2vec.model:主模型文件,包含了模型的参数、词汇表等信息。不仅存储了模型的架构信息,还包括了词汇频率、模型训练状态等。这个文件是加载完整模型所必需的。
  2. word2vec.model.wv.vectors.npy:这个文件存储了模型中所有词汇的词向量。Word2Vec模型通过学习这些词向量来捕捉词语之间的关系。.npy是NumPy数组的文件格式,这意味着这些向量是以NumPy数组的形式存储的,可以高效地加载和处理。
  3. word2vec.model.syn1neg.npy:这个文件存储的是训练过程中使用的负采样权重。当设置Word2Vec模型的negative参数大于0时,启用负采样来优化模型的训练过程。这个文件中的权重是模型训练中用于负采样的部分,对于模型的学习和生成词向量至关重要。

评估与应用

模型训练完成后,可以加载加载模型看下效果:

from gensim.models import Word2Vec

# 加载模型
model = Word2Vec.load('models/word2vec/word2vec.model')

# 查看模型
print(model)
print("模型加载完成")

# 使用模型
# 获取一个词向量
print(model.wv['娱乐'])

# 找最相似的词
similar_words = model.wv.most_similar('娱乐', topn=5)
print(similar_words)

执行结果:
image

如何科学评估

  1. 词相似度计算:通过比较模型生成的词与人工标注的词的相似度,来评估模型,一致性越高,说明效果越好。常用的数据集包括WordSim-353、SimLex-999等。
  2. 词类比计算:评估模型在解决“词A之于词B如同词C之于什么”这类问题的能力,比如,北京之于中国如同巴黎之于什么?
  3. OOV词比率:评估数据集中有多少词对因为包含未知词(模型词汇表外的词)而被排除在评估之外的比率。理想情况下,OOV率应该尽可能低,以确保评估结果能更全面地代表模型的性能。
  4. 定性分析:对于给定的词汇,查看模型认为与其最相似的其他词汇,判断这些相似词是否符合预期。
  5. 实际应用:将Word2Vec模型应用到具体的下游任务,如文本分类、情感分析、实体识别等,观察模型表现的提升。通过比较使用Word2Vec词向量前后的任务表现,可以间接评估Word2Vec模型的有效性。

模型的优缺点

  • 优点
  1. 词嵌入质量高:Word2Vec能够学习到富含语义信息的高质量词向量,使语义上相近的词在向量空间中也相近。
  2. 捕捉多种语言规律:Word2Vec能够捕捉到一定的语法和语义规律,比如词类比:男人之于女人如同国王之于王后。
  3. 效率高:相比于早期的基于矩阵分解的词嵌入方法,Word2Vec的训练效率更高,尤其是在处理大规模语料库时。
  4. 可解释性:Word2Vec模型学习到的词向量具有一定的可解释性,可以通过向量运算进行词之间的关系探索。
  • 缺点
  1. OOV问题:Word2Vec模型只能对其训练期间见过的词汇生成向量。对于新出现的或者罕见的词汇,模型无法直接提供词向量(尽管可以通过一些技巧进行处理)。
  2. 词义多样性:Word2Vec为每个词汇生成一个唯一的向量,因此无法直接处理一个词多种含义的情况,也就是多义词问题。
  3. 依赖于大量文本数据:为了训练出高质量的词向量,Word2Vec需要大量的文本数据。在数据量较小的情况下,模型的效果可能会受限。
  4. 上下文独立:Word2Vec生成的词向量是静态的,不考虑词在特定句子中的上下文。这与后来的上下文相关的词嵌入模型,如ELMo、BERT等形成对比。
  5. 缺乏层次化表示:Word2Vec提供的是词汇级别的向量表示,缺乏更细致的语法和语义结构信息,这些在一些复杂的NLP任务中可能是必需的。

应用场景及案例

Word2Vec模型因为能够捕捉到词语和词语之间复杂的语义语法关系,所以在NLP任务中被广泛使用。

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

参考:https://time.geekbang.org/column/article/785460

posted @ 2025-07-01 22:59  牛犁heart  阅读(89)  评论(0)    收藏  举报