• <rp id="m9a4z"></rp>

    <rp id="m9a4z"><object id="m9a4z"><input id="m9a4z"></input></object></rp>
    <th id="m9a4z"><pre id="m9a4z"></pre></th>

  • 電子發燒友App

    硬聲App

    0
    • 聊天消息
    • 系統消息
    • 評論與回復
    登錄后你可以
    • 下載海量資料
    • 學習在線課程
    • 觀看技術視頻
    • 寫文章/發帖/加入社區
    創作中心
    發布
    • 發文章

    • 發資料

    • 發帖

    • 提問

    • 發視頻

    創作活動

    完善資料讓更多小伙伴認識你,還能領取20積分哦, 立即完善>

    3天內不再提示
    創作
    電子發燒友網>電子資料下載>電子資料>PyTorch教程15.7之詞的相似性和類比

    PyTorch教程15.7之詞的相似性和類比

    2023-06-05 | pdf | 0.10 MB | 次下載 | 免費

    資料介紹

    15.4 節中,我們在一個小數據集上訓練了一個 word2vec 模型,并將其應用于為輸入詞尋找語義相似的詞。在實踐中,在大型語料庫上預訓練的詞向量可以應用于下游的自然語言處理任務,這將在第 16 節后面介紹。為了以直接的方式展示來自大型語料庫的預訓練詞向量的語義,讓我們將它們應用到詞相似度和類比任務中。

    import os
    import torch
    from torch import nn
    from d2l import torch as d2l
    
    import os
    from mxnet import np, npx
    from d2l import mxnet as d2l
    
    npx.set_np()
    

    15.7.1。加載預訓練詞向量

    下面列出了維度為 50、100 和 300 的預訓練 GloVe 嵌入,可以從GloVe 網站下載。預訓練的 fastText 嵌入有多種語言版本。這里我們考慮一個可以從fastText 網站下載的英文版本(300 維“wiki.en”) 。

    #@save
    d2l.DATA_HUB['glove.6b.50d'] = (d2l.DATA_URL + 'glove.6B.50d.zip',
                    '0b8703943ccdb6eb788e6f091b8946e82231bc4d')
    
    #@save
    d2l.DATA_HUB['glove.6b.100d'] = (d2l.DATA_URL + 'glove.6B.100d.zip',
                     'cd43bfb07e44e6f27cbcc7bc9ae3d80284fdaf5a')
    
    #@save
    d2l.DATA_HUB['glove.42b.300d'] = (d2l.DATA_URL + 'glove.42B.300d.zip',
                     'b5116e234e9eb9076672cfeabf5469f3eec904fa')
    
    #@save
    d2l.DATA_HUB['wiki.en'] = (d2l.DATA_URL + 'wiki.en.zip',
                  'c1816da3821ae9f43899be655002f6c723e91b88')
    
    #@save
    d2l.DATA_HUB['glove.6b.50d'] = (d2l.DATA_URL + 'glove.6B.50d.zip',
                    '0b8703943ccdb6eb788e6f091b8946e82231bc4d')
    
    #@save
    d2l.DATA_HUB['glove.6b.100d'] = (d2l.DATA_URL + 'glove.6B.100d.zip',
                     'cd43bfb07e44e6f27cbcc7bc9ae3d80284fdaf5a')
    
    #@save
    d2l.DATA_HUB['glove.42b.300d'] = (d2l.DATA_URL + 'glove.42B.300d.zip',
                     'b5116e234e9eb9076672cfeabf5469f3eec904fa')
    
    #@save
    d2l.DATA_HUB['wiki.en'] = (d2l.DATA_URL + 'wiki.en.zip',
                  'c1816da3821ae9f43899be655002f6c723e91b88')
    

    為了加載這些預訓練的 GloVe 和 fastText 嵌入,我們定義了以下TokenEmbedding類。

    #@save
    class TokenEmbedding:
      """Token Embedding."""
      def __init__(self, embedding_name):
        self.idx_to_token, self.idx_to_vec = self._load_embedding(
          embedding_name)
        self.unknown_idx = 0
        self.token_to_idx = {token: idx for idx, token in
                   enumerate(self.idx_to_token)}
    
      def _load_embedding(self, embedding_name):
        idx_to_token, idx_to_vec = [''], []
        data_dir = d2l.download_extract(embedding_name)
        # GloVe website: https://nlp.stanford.edu/projects/glove/
        # fastText website: https://fasttext.cc/
        with open(os.path.join(data_dir, 'vec.txt'), 'r') as f:
          for line in f:
            elems = line.rstrip().split(' ')
            token, elems = elems[0], [float(elem) for elem in elems[1:]]
            # Skip header information, such as the top row in fastText
            if len(elems) > 1:
              idx_to_token.append(token)
              idx_to_vec.append(elems)
        idx_to_vec = [[0] * len(idx_to_vec[0])] + idx_to_vec
        return idx_to_token, torch.tensor(idx_to_vec)
    
      def __getitem__(self, tokens):
        indices = [self.token_to_idx.get(token, self.unknown_idx)
              for token in tokens]
        vecs = self.idx_to_vec[torch.tensor(indices)]
        return vecs
    
      def __len__(self):
        return len(self.idx_to_token)
    
    #@save
    class TokenEmbedding:
      """Token Embedding."""
      def __init__(self, embedding_name):
        self.idx_to_token, self.idx_to_vec = self._load_embedding(
          embedding_name)
        self.unknown_idx = 0
        self.token_to_idx = {token: idx for idx, token in
                   enumerate(self.idx_to_token)}
    
      def _load_embedding(self, embedding_name):
        idx_to_token, idx_to_vec = [''], []
        data_dir = d2l.download_extract(embedding_name)
        # GloVe website: https://nlp.stanford.edu/projects/glove/
        # fastText website: https://fasttext.cc/
        with open(os.path.join(data_dir, 'vec.txt'), 'r') as f:
          for line in f:
            elems = line.rstrip().split(' ')
            token, elems = elems[0], [float(elem) for elem in elems[1:]]
            # Skip header information, such as the top row in fastText
            if len(elems) > 1:
              idx_to_token.append(token)
              idx_to_vec.append(elems)
        idx_to_vec = [[0] * len(idx_to_vec[0])] + idx_to_vec
        return idx_to_token, np.array(idx_to_vec)
    
      def __getitem__(self, tokens):
        indices = [self.token_to_idx.get(token, self.unknown_idx)
              for token in tokens]
        vecs = self.idx_to_vec[np.array(indices)]
        return vecs
    
      def __len__(self):
        return len(self.idx_to_token)
    

    下面我們加載 50 維 GloVe 嵌入(在維基百科子集上預訓練)。創建TokenEmbedding實例時,如果尚未下載指定的嵌入文件,則必須下載。

    glove_6b50d = TokenEmbedding('glove.6b.50d')
    
    Downloading ../data/glove.6B.50d.zip from http://d2l-data.s3-accelerate.amazonaws.com/glove.6B.50d.zip...
    
    glove_6b50d = TokenEmbedding('glove.6b.50d')
    
    Downloading ../data/glove.6B.50d.zip from http://d2l-data.s3-accelerate.amazonaws.com/glove.6B.50d.zip...
    

    輸出詞匯量。詞匯表包含 400000 個單詞(標記)和一個特殊的未知標記。

    len(glove_6b50d)
    
    400001
    
    len(glove_6b50d)
    
    400001
    

    我們可以獲得一個詞在詞匯表中的索引,反之亦然。

    glove_6b50d.token_to_idx['beautiful'], glove_6b50d.idx_to_token[3367]
    
    (3367, 'beautiful')
    
    glove_6b50d.token_to_idx['beautiful'], glove_6b50d.idx_to_token[3367]
    
    (3367, 'beautiful')
    

    15.7.2。應用預訓練詞向量

    使用加載的 GloVe 向量,我們將通過將它們應用于以下單詞相似性和類比任務來演示它們的語義。

    15.7.2.1。詞相似度

    第 15.4.3 節類似,為了根據詞向量之間的余弦相似度為輸入詞找到語義相似的詞,我們實現以下knnk-最近的鄰居)功能。

    def knn(W, x, k):
      # Add 1e-9 for numerical stability
      cos = torch.mv(W, x.reshape(-1,)) / (
        torch.sqrt(torch.sum(W * W, axis=1) + 1e-9) *
        torch.sqrt((x * x).sum()))
      _, topk = torch.topk(cos, k=k)
      return topk, [cos[int(i)] for i in topk]
    
    def knn(W, x, k):
      # Add 1e-9 for numerical stability
      cos = np.dot(W, x.reshape(-1,)) / (
        np.sqrt(np.sum(W * W, axis=1) + 1e-9) * np

    下載該資料的人也在下載 下載該資料的人還在閱讀
    更多 >

    評論

    查看更多

    下載排行

    本周

    1. 1ASUS主板圖紙
    2. 1.49 MB  |  6次下載  |  免費
    3. 2STM32F10xxx參考手冊(中文)
    4. 15.19 MB  |  3次下載  |  1 積分
    5. 3帶有ESP32的Arduino物聯網云
    6. 0.00 MB  |  2次下載  |  免費
    7. 4野火_LubanCat_Zero_N 原理圖
    8. 0.73 MB  |  2次下載  |  免費
    9. 5野火RK3566 LUBANCAT原理圖
    10. 0.81 MB  |  2次下載  |  免費
    11. 612W通用輸入恒壓適配器設計
    12. 0.24 MB  |  1次下載  |  1 積分
    13. 7野火_LubanCat_Zero_W 原理圖
    14. 0.71 MB  |  1次下載  |  免費
    15. 8野火_EBF RK3568 LBC原理圖
    16. 0.78 MB  |  1次下載  |  免費

    本月

    1. 1美的電磁爐電路圖
    2. 0.16 MB  |  96次下載  |  免費
    3. 2逆變電源的設計
    4. 11.96 MB  |  46次下載  |  免費
    5. 3技能H61主板圖紙
    6. 0.65 MB  |  23次下載  |  免費
    7. 4PCB線寬電流計算器
    8. 0.83 MB  |  21次下載  |  2 積分
    9. 5AD常用快捷鍵
    10. 0.36 MB  |  13次下載  |  免費
    11. 6蘋果手機維修電路圖
    12. 3.84 MB  |  10次下載  |  免費
    13. 7labview計算器
    14. 0.02 MB  |  9次下載  |  1 積分
    15. 8【兆松科技】RISC-V軟硬件協同設計全流程軟件棧PPT
    16. 5.47 MB  |  9次下載  |  免費

    總榜

    1. 1matlab軟件下載入口
    2. 未知  |  935037次下載  |  免費
    3. 2protel99se軟件下載(可英文版轉中文版)
    4. 78.1 MB  |  537762次下載  |  免費
    5. 3MATLAB 7.1 下載 (含軟件介紹)
    6. 未知  |  420006次下載  |  免費
    7. 4OrCAD10.5下載,OrCAD10.5中文版軟件
    8. 817182  |  234269次下載  |  免費
    9. 5Altium DXP2002下載入口
    10. 未知  |  233029次下載  |  免費
    11. 6數據采集系統基礎知識視頻
    12. 16.3 MB  |  192989次下載  |  免費
    13. 7電路仿真軟件multisim 10.0免費下載
    14. 340992  |  191156次下載  |  免費
    15. 8十天學會AVR單片機與C語言視頻教程 下載
    16. 158M  |  183247次下載  |  免費
    洞里的珠子一颗一颗被扯出,日本JAPANESEXXXX日本熟,欧洲美女粗暴牲交免费观看,性啪啪CHINESE东北女人