glove中文词向量_NLP中文文本分类任务的笔记(一)
詞向量的使用。
通用的詞向量包含word2vec,glove,fasttext三種方式,通過n-gram以及COBW或者skip-gram的方式獲取得到, 這邊分享一個詞向量的GitHub資
Embedding/Chinese-Word-Vectors?github.comstep 1:準備詞表,將詞進行one-hot-encoding。
step 2:進行正負樣本的采樣,利用context word構建正負樣本。
step 3:基于softmax進行淺層神經網絡進行訓練,fasttext的加速方法:
選擇使用分層softmax, ngram的方式處理數據。
2. Glove的基本原理概述:
基于窗口的共現矩陣(windows based co-occurrence matrix)和詞上下文出現的總詞數形成一個共現頻率矩陣, 類似于singular value decomposition的方法實現的。
傳統文本分類的方法(LR,SVM,TEXTCNN)
LR的概率定義:
目標函數是:
mi. n -frac{1}{n}sum_{i=1}^{n}y_ilog(1-hat{p_i}) +(1-y_i)loghat{p_i}
2. SVM:
hard margin hinge loss:
soft margin loss 加入松弛變量
根據KKT條件,我們將其轉化為對偶問題, 從而減少計算量:
核函數相關的
Linear Kernel:
Polynomial Kernel:
Radius Basis Kernel:
Sigmoid Kernel:
3. TEXT-CNN:
text-cnn 是一種高效且準確率有保障的一種文本分類算法, 具體的原理可以有下面的圖片表示:
上面的圖表示的是每個詞被表征為一個向量,然后一句話就可以concatenate成一個詞向量矩陣, 接下來,我們可以定義不同的 conv2d layer (如上圖,我們用了不同的kernel, kernel size為2,3,4)。具體的代碼實現如下。
class TextCNN(nn.Module):def __init__(self, config):super(TextCNN, self).__init__()self.config = configvocab_size = config["vocab_size"]embed_dim = config["emb_dim"]label_num = config["num_labels"]channel_i = 1channel_o = config["kernel_num"]kernel_sizes = config["kernel_sizes"]self.encoder = nn.Embedding(vocab_size, embed_dim)if vectors:self.encoder = self.encoder.from_pretrained(torch.tensor(vectors), freeze=True)self.convs = nn.ModuleList([nn.Conv2d(channel_i, channel_o, (k, embed_dim)) for k in kernel_sizes])self.dropout = nn.Dropout(config["dropout"])self.fc = nn.Linear(len(kernel_sizes)*channel_o, label_num)# self.fc1 = nn.Linear(config.max_len*embed_dim, label_num)def forward(self, sentence):x = self.encoder(sentence)x= x.unsqueeze(1) ## (N, 1, W, embed_dim)x = [F.relu(conv(x).squeeze(3)) for conv in self.convs] ## (N, channel_o, Wi]) i = 1,...,len(kernel_sizes)x = [F.max_pool1d(i, i.size(2)).squeeze(2) for i in x] ## (N, channel_o) * len(kernel_sizes)x = torch.cat(x, dim=1) ## (N, channel_o*len(kernel_sizes))x = self.dropout(x) ## (N, channel_o*len(kernel_sizes))logit = self.fc(x) ## (N, label_num)output = F.log_softmax(logit, dim=1)return output總結
以上是生活随笔為你收集整理的glove中文词向量_NLP中文文本分类任务的笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse CTRL+F Find/
- 下一篇: layui 行悬停显示工具_Minita