一、Glove模型與Word2Vec
Glove是一種詞向量表示方法,它使用了全局向量表述(global matrix factorization)來將每個詞映射到一個N維空間中,進而把詞之間的相似性計算出來。相較於傳統的Word2Vec詞向量,Glove不但可以處理連續單詞,也能處理歧義單詞的複雜語義,能夠更加準確地描述語義相似性。
在Glove模型中,詞與詞之間的相似性是通過共現矩陣(co-occurrence matrix)來衡量的,即統計每兩個詞在文本中共同出現的次數(共現次數)。然後,通過對這個矩陣進行奇異值分解(Singular Value Decomposition,SVD),得到了一組每個詞的特徵向量(word embeddings),將這些詞向量作為該模型的輸出。
二、Glove模型結構
在Glove模型中,輸入是一個共現矩陣X(m×n),它包含m個單詞和n個單詞的共現次數;輸出是一個詞向量矩陣W(m×d),其中每個詞的詞向量維度為d。
Glove模型的目標函數是:$\sum_{i,j=1}^{m}f(X_{i,j})(w_i^T\tilde{w_j}+b_i+\tilde{b_j}-log(X_{i,j}))^2$,其中$w_i$和$\tilde{w_j}$是根據輸入X得到的兩個詞向量,$b_i$和$\tilde{b_j}$是兩個詞的偏置項,$f(X_{i,j})$是一個加權函數,用以對頻繁出現的共現單詞與不常見的共現單詞進行權衡,此外$log(X_{i,j})$的加入也是為了進行加強稀有單詞與共現詞的相關程度。通過最小化目標函數,我們可以學習到每個單詞的詞向量,進而求出詞之間的相似性。
三、Glove模型缺點
儘管Glove模型在處理詞義方面表現出色,但是它在一定程度上也存在一些缺點。比如,Glove模型無法很好地處理多義詞(polysemy)情況。因為在共現矩陣中,同一個單詞的不同意思常常被當作不同的單詞處理。但是事實上,這些不同的意思在語義層面上是相關的,在詞向量表示中應該保持相似性。
此外,Glove模型對於一些非常出現單詞的處理也不太好,它們可能被忽略或者在訓練過程中的欠採樣造成了過擬合。這些問題都需要通過改進模型結構來進行解決。
四、Glove模型生詞
Glove這個詞來源於全稱「Global Vector for Word Representation」,單詞glove的讀音為[gʌv],可以簡單地理解為「手套」。
五、glove怎麼讀
glove這個單詞的發音為[gʌv]。
六、Glove模型詞嵌入
import numpy as np import torch import torch.nn as nn import torch.optim as optim class Glove(nn.Module): def __init__(self, vocab_size, embedding_dim): super(Glove, self).__init__() self.embedding_i = nn.Embedding(vocab_size, embedding_dim) self.embedding_j = nn.Embedding(vocab_size, embedding_dim) self.biases_i = nn.Embedding(vocab_size, 1) self.biases_j = nn.Embedding(vocab_size, 1) def forward(self, center_words, target_words, coocs): center_embeds = self.embedding_i(center_words) target_embeds = self.embedding_j(target_words) center_biases = self.biases_i(center_words).squeeze(1) target_biases = self.biases_j(target_words).squeeze(1) inner_product = torch.sum(torch.mul(center_embeds, target_embeds), dim=1) log_coocs = torch.log(coocs) loss = torch.mean(torch.pow(inner_product + center_biases + target_biases - log_coocs, 2)) return loss vocab_size = 10000 embed_dim = 100 glove = Glove(vocab_size, embed_dim) optimizer = optim.Adagrad(glove.parameters(), lr=0.05) for epoch in range(10): for idx, (inputs, targets, cooccurrences) in enumerate(dataset): glove.zero_grad() loss = glove(inputs, targets, cooccurrences) loss.backward() optimizer.step() print("Epoch %d: %.4f" % (epoch+1, loss.item()))
七、Glove模型是幹什麼的
Glove模型的主要作用是用於將文本中的詞轉換成高維向量,使得這些詞之間的關聯關係更加具有語義性質。這些高維向量可以應用在各種自然語言處理任務中,比如情感分析、文本分類、問答系統等。
八、Glove模型學到了什麼
Glove模型通過對大規模文本數據的統計分析,學習到了每個單詞在文本語料庫中的分布情況,也就是每個單詞和其他單詞之間的關係。通過將單詞表示為高維向量,我們可以在向量空間中度量單詞之間的相似性。例如,在一個由100維向量構成的空間中,我們可以認為「狗」和「貓」比「狗」和「樹」更加相似。這種相似性可以被用於許多自然語言處理任務,例如聚類、分類、生成等。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/246964.html