赞
踩
模型结构:
CBOW 模型:通过给定上下文(背景单词),来预测中心词(目标词)。
Skip-gram 模型:给定一个单词,预测这个单词周围的上下文(上下文中的其他单词)。
训练数据:
学习过程:
在训练过程中,Word2Vec 通过最大化正确中心单词和上下文单词之间的相似度,同时最小化与负样本之间的相似度来学习单词向量。这意味着模型会尝试:
获取词嵌入的方法有很多种,以下是一些主要的方法及其适用情况:
# 从sklearn导入词袋模型
from sklearn.feature_extraction.text import CountVectorizer
# 例句
documents = ["Text analytics with Python", "Python for data science"]
# 创建词袋模型
vectorizer = CountVectorizer()
bow_matrix = vectorizer.fit_transform(documents)
# 词袋矩阵
print(bow_matrix.toarray())
# 从sklearn导入词袋模型TF-IDF
from sklearn.feature_extraction.text import TfidfVectorizer
documents = ['your document text here']
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(documents)
from gensim.models import Word2Vec
sentences = [['word1', 'word2', 'word3'], ['word2', 'word3']]
model = Word2Vec(sentences, min_count=1)
# 导入GloVe库
import glove
from glove import Corpus, Glove
corpus = Corpus()
corpus.fit(sentences, window=10)
glove = Glove(no_components=100, learning_rate=0.05)
glove.fit(corpus.matrix, epochs=30, no_threads=4, verbose=True)
glove.add_dictionary(corpus.dictionary)
from gensim.models import FastText
model_ft = FastText(sentences, size=100, window=5, min_count=5, workers=4, sg=1)
from allennlp.modules.elmo import Elmo, batch_to_ids
# 初始化 ELMo
options_file = 'elmo_options.json'
weight_file = 'elmo_weights.hdf5'
elmo = Elmo(options_file, weight_file, num_output_representations=1)
# 例句
sentences = [['I', 'have', 'a', 'green', 'apple'], ['I', 'have', 'a', 'green', 'thumb']]
# 将词转化为对应的索引
character_ids = batch_to_ids(sentences)
# 得到 ELMo 编码
embeddings = elmo(character_ids)
# BERT分词器的使用
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
tokens = tokenizer.tokenize("Hello, how are you?")
print(tokens)
词嵌入主要分为两类:静态嵌入(Static Embeddings)和上下文嵌入(Contextual Embeddings)
定义:静态嵌入是每个单词一个唯一的固定向量表示,不考虑单词在不同上下文中的变化。
唯一性:每个单词的向量表示是唯一的,不随上下文变化。如 Word2Vec、GloVe 和 FastText。
在 Word2Vec 中,“bank”(银行)一词在所有情况下都有相同的向量表示,无论是指金融机构还是河岸。
定义:上下文嵌入是每个单词的向量表示根据其在句子中的上下文动态变化。
上下文敏感:同一个单词在不同的上下文中会有不同的向量表示。如 ELMo、BERT、GPT-3 等。
在 BERT 中,“bank” 在句子 “I went to the bank to deposit money” 中的向量表示与 “I sat on the river bank” 中的向量表示不同,因为模型捕捉到了不同的上下文信息。
在自然语言处理(NLP)领域,有两种主要的模型架构:循环神经网络(Recurrent Neural Networks, RNNs)和Transformers。
Transformers 学习更快:由于 Transformers 架构可以并行处理整个序列数据,相较于 RNNs 的循环处理方式,训练速度明显更快。RNNs 需要逐步处理每个时间步的数据,而 Transformers 能够同时处理整个输入序列,大大加快了训练速度。
定义:负采样是一种训练神经网络模型的方法,用于有效地训练 Word2Vec 模型,特别是 Skip-gram 模型。
在 Word2Vec 中,训练模型需要计算词汇表中每个单词的 softmax 概率,这对于大词汇表来说计算成本非常高。负采样通过减少需要计算的负例数量,大大降低了计算复杂度,从而提高训练效率。
定义:层次 Softmax 是一种替代标准 Softmax 的方法,通过构建霍夫曼树(Huffman Tree)来加速概率计算。
工作原理:
适用情况:
定义:FastText 提出的一种方法,通过将单词分解为子词(如字符 n-gram)来处理未见过的单词。
工作原理:
定义:稠密嵌入是指每个单词由一个低维稠密向量表示,向量的每个维度都有非零值。
低维度:通常是几十到几百维。
稠密性:每个维度的值通常都是非零的,但不意味着没有0。
优点:
维度的选择直接影响到模型的性能、计算效率和内存使用。
描述:短文本数据通常词汇量有限,词与词之间的共现次数较少,导致模型难以捕捉到单词之间的语义关系。
解决方法:
描述:在短文本中,许多单词可能只出现一次或几次,模型难以学习到这些单词的有效表示。
解决方法:
描述:由于短文本数据量小,模型容易在训练数据上过拟合,难以泛化到新的数据。
解决方法:
描述:即使是短文本数据,训练 Word2Vec 也可能需要大量计算资源和时间,特别是在尝试增大数据集和上下文窗口时。
解决方法:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。