日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

glove中文词向量_NLP中文文本分类任务的笔记(一)

發布時間:2024/9/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 glove中文词向量_NLP中文文本分类任务的笔记(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

詞向量的使用。

通用的詞向量包含word2vec,glove,fasttext三種方式,通過n-gram以及COBW或者skip-gram的方式獲取得到, 這邊分享一個詞向量的GitHub資

Embedding/Chinese-Word-Vectors?github.com
  • word2vec/fasttext基本訓練步驟:
  • step 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)

  • Logistic Regression:
  • 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中文文本分类任务的笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。