语言模型的工作原理基于统计学习和概率论,其目标是捕捉语言的概率分布,即我们通过不同的任务训练模型,都是为了使语言模型获取这种概率关系,如文本生成模型,它会判断下一个应该生成什么词,一步步生成完整的文本序列
Word2Vec是一个经典的语言模型,它的模型参数是一个词嵌入向量矩阵,它的训练目的就是不断优化这个矩阵,以获得高性能的词嵌入向量矩阵,它有两个具体实现
他们的区分标准是训练任务的不同,让我们继续看下去吧
CBOW模型也叫词袋模型。它的训练任务是:给定某个词的上下文,通过这个上下文来预测这个词
1.经典CBOW模型结构
2.以下是拿具体例子做的详细讲解
注意
# 导入库
import torch
import torch.nn as nn
# 创建输入向量
c0 = torch.Tensor([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
c1 = torch.Tensor([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
# 创建神经网络层
W_in = nn.Linear(20, 3)
W_out = nn.Linear(3, 20)
softmax = nn.Softmax(dim=0)
# 进行传播
h0 = W_in.forward(c0)
h1 = W_in.forward(c1)
h = 0.5 * (h0 + h1)
s = W_out.forward(h)
out = softmax(s)
# 打印结果
print(out)
与CBOW模型不同的是,Skip-Gram模型的训练任务是给定某个词,来预测它的上下文,这点与CBOW正好相反
Skip-gram的训练过程就是CBOW倒转过来,如图,就不具体做详细说明了
以下是基于CBOW模型的调用了库的示例代码
from gensim.models import Word2Vec
from nltk.tokenize import word_tokenize
# 示例文本数据
corpus = [
"This is the first sentence.",
"Word embeddings are interesting.",
"Word2Vec is a popular embedding model.",
]
# 对文本进行分词
tokenized_corpus = [word_tokenize(sentence.lower()) for sentence in corpus]
# 训练Word2Vec模型
model = Word2Vec(sentences=tokenized_corpus, vector_size=100, window=5, min_count=1, workers=4)
# 获取"word"的词向量
word_vector = model.wv["word"]
# 打印词向量
print(f"Embedding for 'word': {word_vector}")