Word2Vec是一种生成词向量的技术,这些向量是单词的分布式数值表示,包含了单词的特征——这些特征可能包括代表词汇表中单个单词上下文的单词。词嵌入最终有助于通过创建的向量建立一个词与另一个具有相似含义的词之间的关联。
词嵌入为何重要?
让考虑这两个句子——“可以扩展业务。”和“可以增长业务。”。这两个句子具有相同的意义。如果考虑一个词汇,考虑到这两个句子,将由这些单词组成:{,可以,扩展,增长,,业务}。
# 一个热编码的这些单词将创建一个长度为6的向量。每个单词的编码看起来像这样:
: [1,0,0,0,0,0],
可以: [0,1,0,0,0,0],
扩展: [0,0,1,0,0,0],
增长: [0,0,0,1,0,0],
: [0,0,0,0,1,0],
业务: [0,0,0,0,0,1]
在6维空间中,每个单词将占据一个维度,这意味着这些单词之间没有任何相似性——无论它们的文字含义如何。Word2Vec,一种词嵌入方法,解决了这个问题,并使相似的单词具有相似的维度,从而使上下文得以体现。
CBOW模型如何工作?
尽管Word2Vec是一个无监督模型,可以提供一个没有任何标签信息的语料库,模型可以创建密集的词嵌入,Word2Vec在内部利用一个监督分类模型从语料库中获得这些嵌入。这些嵌入是单词在向量空间中的表示,对于各种自然语言处理任务和机器学习应用至关重要。
# CBOW架构包括一个深度学习分类模型,输入上下文单词作为X,并尝试预测目标单词Y。
例如,如果考虑句子——“Word2Vec有一个深度学习模型在后端工作。”,可以有上下文单词和目标(中心)单词对。如果考虑一个上下文窗口大小为2,将有对如([深度,模型],学习),([模型,中],工作),([一个,学习],深度)等。深度学习模型将尝试基于上下文单词预测这些目标单词。
Skip-gram模型如何工作?
# 由于skip-gram模型需要从单个给定单词预测多个单词,用(X, Y)对来喂模型,其中X是输入,Y是标签。
# 安装模块
pip install gensim
pip install nltk
# 导入库
from nltk.tokenize import sent_tokenize, word_tokenize
import gensim
from gensim.models import Word2Vec
# 读取文本数据
import pandas as pd
rev = pd.read_csv("Reviews.csv")
print(rev.head())
# 准备语料库
corpus_text = 'n'.join(rev[:1000]['Text'])
data = []
# 遍历文件中的每个句子
for i in sent_tokenize(corpus_text):
temp = []
# 将句子分词成单词
for j in word_tokenize(i):
temp.append(j.lower())
data.append(temp)
# 使用Gensim构建Word2Vec模型
model1 = gensim.models.Word2Vec(data, min_count = 1, size = 100, window = 5, sg=0)
model2 = gensim.models.Word2Vec(data, min_count = 1, size = 100, window = 5, sg = 1)