首頁 後端開發 Python教學 詞向量嵌入的實例詳解

詞向量嵌入的實例詳解

Jun 21, 2017 pm 04:11 PM
向量 學習 筆記

詞向量嵌入需要高效率處理大規模文字語料庫。 word2vec。簡單方式,將詞送入獨熱編碼(one-hot encoding)學習系統,長度為詞彙表長度的向量,詞語對應位置元素為1,其餘元素為0。向量維數很高,無法刻畫不同字詞的語意關聯。共生關係(co-occurrence)表示單詞,解決語義關聯,遍歷大規模文本語料庫,統計每個單詞一定距離範圍內的周圍詞彙,用附近詞彙規範化數量表示每個詞語。類似語境中詞語語義相似。用PCA或類似方法降維出現向量(occurrence vector),得到更稠密表示。性能好,追蹤所有詞彙共生矩陣,寬度、高度為詞彙表長度。 2013年,Mikolov、Tomas等提出上下文計算詞表示方法,《Efficient estimation of word representations in vector space》(arXiv preprint arXiv:1301.3781(2013))。 skip-gram模型,從隨機表示開始​​,依據當前詞語預測上下文詞語簡單分類器,誤差透過分類器權值和詞表示傳播,對兩者調整減少預測誤差。大規模語料庫訓練模型表示收債量逼近壓縮後共生向量。

資料集, 英文維基百科轉儲檔案包含所有頁面完整修訂歷史,目前頁面版本100GB,。

下載轉儲文件,提取頁面詞語。統計詞語出現次數,建構常見詞彙表。用詞彙表對擷取頁面編碼。逐行讀取文件,結果立即寫入磁碟。在不同步驟間保存檢查點,避免程式崩潰重來。

__iter__遍歷詞語索引清單頁面。 encode取得字串詞語詞彙索引。 decode依據詞彙索引傳回字串字詞。 _read_pages從維基百科轉儲文件(壓縮XML)提取單詞,儲存到頁面文件,每個頁面一行空格分隔的單字。 bz2模組open函數讀取檔案。中間結果壓縮處理。正規表示式可捕捉任意連續字母序列或單獨特殊字母。 _build_vocabulary統計頁面檔案單字數,出現頻率高字寫入檔案。獨熱編碼需要詞彙表。詞彙表索引編碼。移除拼字錯誤、極不常見詞語,詞彙表只包含vocabulary_size - 1個最常見詞語。所有不在詞彙表詞語標記,未出現單字詞向量。

動態形成訓練樣本,組織到大批數據,分類器不佔大量記憶體。 skip-gram模型預測當前詞語的上下文詞語。遍歷文本,當前詞語數據,周圍詞語目標,創建訓練樣本。上下文尺寸R,每個字生成2R樣本,當前字左右各R個字。語意上下文,距離近重要,盡量少創建遠上下文詞語訓練樣本,範圍[1,D=10]隨機選擇詞上下文尺寸。依據skip-gram模型形成訓練對。 Numpy數組產生數值流批資料。

初始,單字表示為隨機向量。分類器根據中層表示預測上下文單字目前表示。傳播誤差,微調權值、輸入單字表示。 MomentumOptimizer 模型最佳化,智能不足,效率高。

分類器是模型核心。噪音對比估計損失(noisecontrastive estimation loss)性能優異。 softmax分類器建模。 tf.nn.nce_loss 新隨機向量負樣本(對照樣本),近似softmax分類器。

訓練模型結束,最終詞向量寫入檔案。維基百科語料庫子集,普通CPU訓練5小時,得到NumPy數組嵌入表示。完整語料庫:  。 AttrDict類別等價Python dict,鍵可屬性存取。

import bz2
   導入集合
   導入 os
   導入 re
   from lxml import etree
   from helpers import download#nm iki  class  '[A-Za-z]+|[!?.:,()]')
        def __init__(self, url, cache_dir,vocabulary_size=10000):##  系統(cache_dir)
            self._pages_path = os.path.join(self._cache_dir, 'pages.bz2')
      sel    ). z2')
            若不是os.path.isfile(self._pages_path):
                print('閱讀頁面')##  page page     順      如果不是os.path.isfile(self._vocabulary_path):
                print('建構字彙表')
                self._build_vocab. , 'rt') 作為字彙表:
                  print('讀字表')
                self._vocabulary = [x.strip() for x invocabulary]
           . def __iter__(self) :
            with bz2.open(self._pages_path, 'rt') 作為頁面:
                page split()
                       words = [self .encode(x) ) 對於單字中的x]
                    產生單字
        @property##  f._vocabulary)
        defencode(self, word):
            return self._indices.get(word, 0)
        def 解碼(self, index):
     . f, url):
            wikipedia_path = download(url , self._cache_dir)
            withbz2.open(wikipedia_path) 作為維基百科, \
           : cp.      for _, etree. iterparse(wikipedia) 中的元素, tag='{*}page'):
                    如果element.find('./{*}redirect') 不是None:##  如果element.find('./{*}redirect') 不是None:##  如果element.find('./{*}redirect') 不是None:##                     page = element.findtext ('./{* }revision/{*}text')
                    Words = self._tokenize(page)
                     element .clear()
        def _build_vocabulary(self,vocabulary_size):
            counter = coll,頁:
                頁中的頁:
                   的話語= pag.strip()。 common = [x [x [0 ] 對於x 的共通點]
            以bz2.open(self._vocabulary_path, 'wt') 作為字彙表:
       vocabulary.write( word + '\n')
@類別方法
        def _tokenize(cls, page):
            Words = cls.TOKEN_REGEX.findall(page)
         張量流as tf
   import numpy as np

   from helpers importlazy_property

   class EmbeddingModel:
      問題 def __init__(self data f.data = data
              self .目標= 目標
            self.params = params
            self.embeddings
      sel   self.embeddings
           @lazy_property
        def embeddings(self):
           初始= tf . random_uniform(
                [self.params.vocabulary_size, self.params.embedding_size],
         .embedding_size],
         . return tf.Variable(initial)
        @lazy_property
       def 最佳化(自我) :
            優化器= tf.train.MomentumOptimizer(
                self. ize(self.cost)
        @lazy_property
        def cost( self):
            嵌入= tf.nn.embedding_lookup(self.embeddings, self.data)
         [self.params.vocabulary_size, self.params 。            target = tf. expand_dims( self.target,1)
返回tf.reduce_mean(tf.nn.n.nce_loss(
重量,偏見,偏見,嵌入式,target,
self.params.contrastive_examples,
self.params.params.params.vocabulary_size))

導入集合
   導入tensorflow as tf
   導入numpy as np
   from batched import batched
   from EmbeddingModel import EmbeddingModel#fimgram  Wikipedia
from helpers import AttrDict
   WIKI_DOWNLOAD_DIR = './wikipedia'
   params = AttrDict(
       vocabulary_size=10000,#      _ ize=200,
       contrastive_examples=100,
Learning_rate=0.5,
       動量=0.5,
       batch_size=1000,
   )
   data = 1.placeer(tfplace.) int32, [無])
   模型= EmbeddingModel(資料、目標、參數)
   語料庫= 維基百科(
        'https://dumps.wikimedia.org/enwiki/20160501/'#wikimedia.org/enwiki/20160501/'#wikimedia.org/enN#20160501/'#wiki 。 params.max_context)
   批次=批量(例如,params.batch_size)
   sess = tf.Session()
   sess.run(tf.initialize_all_variables())
   average = collections.deque(maxlen=100) 批次為# max 列舉(批次):
        feed_dict = {資料:batch[0],目標:batch[1]}
        cost,_ = sess.run([model.cost,model.optimize],feed_dict)
       average.append(cost)
        print('{}: {:5.1f}'.format(index + 1, sum(average) / len(aver age)))
     100000:
           break
#    embeddings = sess.run(model.embeddings)
   np.save(WIKI_DOWNLOAD_DIR + '/embeddbe .npypy#

以上是詞向量嵌入的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

小紅書筆記怎麼刪除 小紅書筆記怎麼刪除 Mar 21, 2024 pm 08:12 PM

小紅書筆記怎麼刪除?在小紅書APP中是可以編輯筆記的,多數的用戶不知道小紅書筆記如何的刪除,接下來就是小編為用戶帶來的小紅書筆記刪除方法圖文教程,有興趣的用戶快來一起看看吧!小紅書使用教學小紅書筆記怎麼刪除1、先打開小紅書APP進入到主頁面,選擇右下角【我】進入到專區;2、之後在我的專區,點擊下圖所示的筆記頁面,選擇要刪除的筆記;3、進入到筆記頁面,右上角【三個點】;4、最後下方會展開功能欄,點選【刪除】即可完成。

學會徹底卸載pip,使用Python更有效率 學會徹底卸載pip,使用Python更有效率 Jan 16, 2024 am 09:01 AM

不再需要pip?快來學習如何有效卸載pip!引言:pip是Python的套件管理工具之一,它可以方便地安裝、升級和卸載Python套件。然而,有時候我們可能需要卸載pip,可能是因為我們希望使用其他的套件管理工具,或者因為我們需要完全清除Python環境。本文將介紹如何有效地卸載pip,並提供具體的程式碼範例。一、卸載pip的方法下面將介紹兩種常見的卸載pip的方法

小紅書發布過的筆記不見了怎麼辦?它剛發的筆記搜不到的原因是什麼? 小紅書發布過的筆記不見了怎麼辦?它剛發的筆記搜不到的原因是什麼? Mar 21, 2024 pm 09:30 PM

作為一名小紅書的用戶,我們都曾經遇到過發布過的筆記突然不見了的情況,這無疑讓人感到困惑和擔憂。在這種情況下,我們該怎麼辦呢?本文將圍繞著「小紅書發布過的筆記不見了怎麼辦」這個主題,為你詳細解答。一、小紅書發布過的筆記不見了怎麼辦?首先,不要驚慌。如果你發現筆記不見了,保持冷靜是關鍵,不要慌張。這可能是由於平台系統故障或操作失誤引起的。檢查發布記錄很簡單。只要打開小紅書App,點擊“我”→“發布”→“所有發布”,就可以查看自己的發布記錄。在這裡,你可以輕鬆找到之前發布的筆記。 3.重新發布。如果找到了之

小紅書怎麼在筆記中加入商品連結 小紅書在筆記中加入商品連結教學 小紅書怎麼在筆記中加入商品連結 小紅書在筆記中加入商品連結教學 Mar 12, 2024 am 10:40 AM

小紅書怎麼在筆記中添加商品連結?在小紅書這款app中用戶不僅可以瀏覽各種內容還可以進行購物,所以這款app中關於購物推薦、好物分享的內容是非常多的,如果小夥伴在這款app也是一個達人的話,也可以分享一些購物經驗,找到商家進行合作,在筆記中添加連結之類的,很多人都願意使用這款app購物,因為不僅方便,而且有很多達人會進行一些推薦,可以一邊瀏覽有趣內容,一邊看看有沒有適合自己的衣服商品。一起看看如何在筆記中添加商品連結吧!小紅書筆記添加商品連結方法  在手機桌面上開啟app。  在app首頁點擊

深入研究matplotlib的色彩映射表 深入研究matplotlib的色彩映射表 Jan 09, 2024 pm 03:51 PM

深入學習matplotlib顏色表,需要具體程式碼範例一、引言matplotlib是一個功能強大的Python繪圖庫,它提供了豐富的繪圖函數和工具,可以用於創建各種類型的圖表。而顏色表(colormap)是matplotlib中一個重要的概念,它決定了圖表的配色。深入學習matplotlib色表,將幫助我們更好地掌握matplotlib的繪圖功能,使繪

Pygame入門指南:全面安裝與設定教學課程 Pygame入門指南:全面安裝與設定教學課程 Feb 19, 2024 pm 10:10 PM

從零開始學習Pygame:完整的安裝和配置教程,需要具體程式碼範例引言:Pygame是一個使用Python程式語言開發的開源遊戲開發庫,它提供了豐富的功能和工具,使得開發者可以輕鬆創建各種類型的遊戲。本文將帶您從零開始學習Pygame,並提供完整的安裝和配置教程,以及具體的程式碼範例,讓您快速入門。第一部分:安裝Python和Pygame首先,確保您的電腦上已

揭秘C語言的吸引力: 發掘程式設計師的潛質 揭秘C語言的吸引力: 發掘程式設計師的潛質 Feb 24, 2024 pm 11:21 PM

學習C語言的魅力:解鎖程式設計師的潛力隨著科技的不斷發展,電腦程式設計已經成為了一個備受關注的領域。在眾多程式語言中,C語言一直以來都備受程式設計師的喜愛。它的簡單、高效以及廣泛應用的特點,使得學習C語言成為了許多人進入程式設計領域的第一步。本文將討論學習C語言的魅力,以及如何透過學習C語言來解鎖程式設計師的潛力。首先,學習C語言的魅力在於其簡潔性。相較於其他程式語言而言,C語

一起學習word根號輸入方法 一起學習word根號輸入方法 Mar 19, 2024 pm 08:52 PM

在word編輯文字內容時,有時會需要輸入公式符號。有的小夥子們不知道在word根號輸入的方法,小面就讓小編跟小夥伴們一起分享下word根號輸入的方法教學。希望對小夥伴們有幫助。首先,開啟電腦上的Word軟體,然後開啟要編輯的文件,並將遊標移到需要插入根號的位置,參考下方的圖片範例。 2.選擇【插入】,再選擇符號裡的【公式】。如下方圖片紅色圈的部分內容所示:3.接著選擇下方的【插入新公式】。如下方圖片紅色圈的部分內容所示:4.選擇【根式】,再選擇適當的根號。如下方圖片紅色圈的部分內容所示:

See all articles