ホームページ バックエンド開発 Python チュートリアル ワードベクトル埋め込みの詳細な例

ワードベクトル埋め込みの詳細な例

Jun 21, 2017 pm 04:11 PM
ベクター 勉強 ノート

Word ベクトルの埋め込みには、大規模なテキスト コーパスの効率的な処理が必要です。 word2vec。簡単に説明すると、単語はワンホット エンコーディング学習システムに送信され、長さは語彙の長さのベクトル、単語の対応する位置要素は 1、その他の要素は 0 になります。ベクトルの次元は非常に高く、異なる単語の意味上の関連性を説明できません。共起は単語を表し、意味上の関連を解決し、大規模なテキスト コーパスを横断し、各単語から一定の距離内にある周囲の単語をカウントし、正規化された近くの単語の数で各単語を表します。似た文脈の単語は似た意味を持ちます。 PCA または同様の方法を使用して出現ベクトルの次元を削減し、より高密度の表現を取得します。優れたパフォーマンスを備え、すべての語彙の共起行列を追跡します。幅と高さが語彙の長さになります。 2013年にMikolov、Tomasらが文脈計算単語表現法「ベクトル空間における単語表現の効率的な推定」を提案した(arXivプレプリントarXiv:1301.3781(2013))。スキップグラム モデルはランダムな表現から開始され、現在の単語に基づいてコンテキスト ワードの単純な分類子を予測します。誤差は分類子の重みと単語の表現を通じて伝播され、予測誤差を減らすために 2 つが調整されます。大規模コーパス学習モデル表現ベクトルは圧縮共起ベクトルを近似します。

データセット、英語版 Wikipedia ダンプ ファイルには、すべてのページの完全な改訂履歴が含まれており、現在のページのバージョンは 100 GB です。

ダンプファイルをダウンロードし、ページの単語を抽出します。単語の出現数を数えて、共通の語彙リストを作成します。抽出されたページをボキャブラリを使用してエンコードします。ファイルは 1 行ずつ読み取られ、結果はすぐにディスクに書き込まれます。プログラムのクラッシュを避けるために、異なるステップ間のチェックポイントを保存します。

__iter__ は単語索引リストのページを横断します。 encode は文字列単語の語彙インデックスを取得します。 decode は、語彙インデックスに従って文字列単語を返します。 _read_pages は、Wikipedia ダンプ ファイル (圧縮 XML) から単語を抽出し、ページごとに 1 行の単語をスペースで区切ってページ ファイルに保存します。 bz2 モジュールのオープン関数はファイルを読み取ります。中間結果の圧縮処理。正規表現は、連続する文字または個々の特殊文字のシーケンスをキャプチャします。 _build_vocabulary はページ ファイル内の単語数をカウントし、頻度の高い単語がファイルに書き込まれます。ワンホット エンコーディングには語彙が必要です。用語集インデックスのエンコーディング。スペル ミスと非常に一般的ではない単語は削除され、語彙には、最も一般的な単語の 1 つであるvocabulary_size のみが含まれます。語彙にない単語はすべて でマークされ、単語ベクトルには表示されません。

トレーニング サンプルを動的に形成し、大量のデータを整理します。分類器は多くのメモリを占有しません。スキップグラム モデルは、現在の単語の文脈単語を予測します。テキスト、現在の単語データ、周囲の単語ターゲットを調べて、トレーニング サンプルを作成します。コンテキスト サイズ R、各単語は 2R 個のサンプルを生成し、現在の単語の左右に R 個の単語が生成されます。意味コンテキスト、近い距離が重要、遠コンテキストの単語のトレーニング サンプルをできるだけ少なく作成し、[1、D=10] の範囲で単語コンテキスト サイズをランダムに選択します。トレーニング ペアはスキップグラム モデルに基づいて形成されます。 Numpy 配列は数値ストリーム バッチ データを生成します。

最初、単語はランダムなベクトルとして表されます。分類器は、中間レベルの表現に基づいてコンテキスト ワードの現在の表現を予測します。エラーを伝播し、重みを微調整し、入力単語の表現を調整します。 MomentumOptimizer モデルの最適化、インテリジェンスの欠如、高効率。

分類器はモデルの中核です。ノイズ対比推定損失は優れたパフォーマンスを発揮します。ソフトマックス分類器モデリング。 tf.nn.nce_loss 新しいランダム ベクトルの負のサンプル (比較サンプル)、近似ソフトマックス分類器。

トレーニング モデルが終了し、最終的な単語ベクトルがファイルに書き込まれます。 Wikipedia コーパスのサブセットが通常の CPU で 5 時間トレーニングされ、NumPy 配列埋め込み表現が取得されました。完全なコーパス: 。 AttrDict クラスは Python 辞書と同等であり、キーは属性としてアクセスできます。

ImportBZ2

Importコレクション
インポートos
インポートreをlxmlからインポートeTreeをインポートインポートダウンロードからインポートclass wikipedia:
token_regex = re.compile(r '[a-za-z]+| [!?。:、 ()]')
def __init__(self, url,cache_dir,vocabulary_size=10000):
self._cache_dir = os.path.expanduser(cache_dir)
self._pages_path (self._cache_dir) , 'ページ.bz2')
self._vocabulary_path = os.path.join(self._cache_dir, 'vocabulary.bz2')
os.path.isfile(self._pages_path):
print('ページを読む')
自分自身。 _read_pages(url)
そうでない場合 os.path.isfile(self._vocabulary_path):
print('語彙の構築')
self._build_vocabulary(vocabulary_size)
b z2.open(self._vocabulary_path, 'rt') を語彙として:
print('語彙を読む')
self._vocabulary = [語彙内の x の x.strip()]
self._indices = {x: i の場合、x は enumerate(self._vocabulary)}
__ iter__(自分自身):
bz2.open(self._pages_path, 'rt') をページとして使用:
ページ内のページ:
word = page.strip().split()
Words = [self.encode(x) for x in Words]
yield Words
@property
defvocabulary_size(self):
return len(self._vocabulary)
def encode(self, word):
return self._indices.get(word, 0)
def decode(self, Index):
return self._vocabulary[index]
def _read_pages(self, url):
wikipedia_path = download(url, self._cache_dir)
ウィキペディアとして bz2.open(wikipedia_path) を使用します。 bz2.open(self._pages_path , 'wt') as pages:
for _, etree.iterparse(wikipedia, tag='{*}page') の要素:
element.find('./{*}redirect') が None でない場合:
続き
page = element.findtext('./{*}revision/{*}text')
words = self._tokenize(page)
pages.write(' '.join(words) + )
要素.clear()
def _build_vocabulary(self,vocabulary_size):
counter = collections.Counter()
bz2.open(self._pages_path, 'rt') をページ:
ページの場合:
word = page.strip ().split()
counter.update(words)
common = [''] + counter.most_common(vocabulary_size - 1)
common = [x[0] for x common]
bz2で。 open(self._vocabulary_path, 'wt') 語彙として:
共通の単語の場合:
vocabulary.write(word + 'n')
@classmethod
        def _tokenize(cls, page):
Words = cls.TOKEN_REGEX.findall(page)
Words = [x. lower() for x in Words]
単語を返す

tensorflow を tf としてインポート
numpy をインポートnp
ヘルパーよりimport late_property
class EmbeddingModel:
def __init__(self, data, target, params):
self.data = data
self.target = target
self.params = params
self.embeddings
self.cost
self.optimize
@lazy_property
defembeddings(self):
initial = tf.random_uniform(
[self.params.vocabulary_size, self.params.embedding_size],
-1.0, 1.0)
return tf.Variable(initial)
@lazy_property
def optimize(self):
optimizer = tf.train.MomentumOptimizer(
self.params.learning_rate, self.params.momentum)
return optimizer.minimize(self.cost)
@lazy_proper ty
defcost(self):
埋め込み = tf.nn.embedding_lookup(self.embeddings, self.data)
weight = tf.Variable(tf.truncated_normal(
[self.params.vocabulary_size, self.params.embedding_size],
dev=1.0 / self.params.embedding_size ** 0.5))
bias = tf.Variable(tf.zeros([self.params.vocabulary_size]))
target = tf.expand_dims(self.target, 1)
return tf.reduce_mean(tf.nn.nce_loss(
重み、バイアス、埋め込み、ターゲット、
self.params.contrastive_examples,
self.params.vocabulary_size))

コレクションをインポートします
tensorflowをtfとしてインポートします
numpyをnpとしてインポートします
バッチからインポートバッチ
EmbeddingModelからインポートEmbeddingModel
skipgramsからインポートskipgrams
WikipediaからインポートWikipedia
ヘルパーからインポート
WIKI_DOWNLOAD_DIR = './wikipedia'
params = AttrDict (
vocabulary_size=10000,
max_context=10,
embedding_size=200,
contrative_examples=100,
learning_rate=0.5,
momentum=0.5,
batch_size=1000,
)
data = tf.placeholder(tf.int32, [ None])
target = tf.placeholder(tf.int32, [None])
model = EmbeddingModel(data, target, params)
コーパス = Wikipedia(
'https://dumps.wikimedia.org/enwiki/20160501/ '
'enwiki-20160501-pages-meta-current1.xml-p000000010p000030303.bz2',
WIKI_DOWNLOAD_DIR,
params.vocabulary_size)
examples =コーパス、params.max_context)
バッチ = バッチ化(例、params.batch_size)
sess = tf.Session()
sess.run(tf.initialize_all_variables())
average = collections.deque(maxlen=100)
インデックスの場合、 enumerate(batches) のバッチ:
feed_dict = {data:batch[0 ]、ターゲット:バッチ[1]}
cost, _ = sess.run([model.cost, model.optimize], feed_dict)
average.append(cost)
print('{}: {:5.1f}' .format(index + 1, sum(average) / len(average)))
if Index > 100000:
Break
embeddings = sess.run(model.embeddings)
np.save(WIKI_DOWNLOAD_DIR + '/embeddings.npy', embeddings)

以上がワードベクトル埋め込みの詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

小紅書メモを削除する方法 小紅書メモを削除する方法 Mar 21, 2024 pm 08:12 PM

小紅書メモを削除するにはどうすればよいですか? メモは小紅書アプリで編集できます。ほとんどのユーザーは小紅書メモの削除方法を知りません。次に、エディターがユーザーに小紅書メモの削除方法に関する写真とテキストを提供します。チュートリアル、興味のあるユーザーが来て、それを受講してください見てください!小紅書使い方チュートリアル 小紅書メモの削除方法 1. まず小紅書アプリを開いてメインページに入り、右下隅の[自分]を選択して特別エリアに入ります; 2. 次に、マイエリアで、表示されているメモページをクリックします下の図で、削除したいメモを選択します; 3. メモページに入り、右上隅の [3 つの点] をクリックします; 4. 最後に、下部に機能バーが展開され、[削除] をクリックして完了します。

pip を完全にアンインストールし、Python をより効率的に使用する方法を学びます pip を完全にアンインストールし、Python をより効率的に使用する方法を学びます Jan 16, 2024 am 09:01 AM

もうpipは必要ありませんか? pip を効果的にアンインストールする方法を学びましょう!はじめに: pip は Python のパッケージ管理ツールの 1 つで、Python パッケージを簡単にインストール、アップグレード、アンインストールできます。ただし、別のパッケージ管理ツールを使用したい場合や、Python 環境を完全にクリアする必要がある場合など、pip をアンインストールする必要がある場合があります。この記事では、pip を効率的にアンインストールする方法を説明し、具体的なコード例を示します。 1. pip をアンインストールする方法 以下では、pip をアンインストールする 2 つの一般的な方法を紹介します。

小紅書に投稿したメモが見つからない場合はどうすればよいですか?送信したばかりのメモが見つからない理由は何ですか? 小紅書に投稿したメモが見つからない場合はどうすればよいですか?送信したばかりのメモが見つからない理由は何ですか? Mar 21, 2024 pm 09:30 PM

小紅書のユーザーとして、私たちは皆、公開されたノートが突然消えてしまう状況に遭遇したことがありますが、間違いなく混乱し、心配しています。この場合、どうすればよいでしょうか?この記事では、「小紅書が公開したメモが見つからない場合の対処方法」というテーマに焦点を当て、詳細な回答を提供します。 1. 小紅書が発行したメモが紛失した場合はどうすればよいですか?まず、パニックにならないでください。メモがなくなっていることに気づいた場合は、パニックに陥らず、落ち着いて行動することが重要です。これは、プラットフォームのシステム障害または操作エラーが原因である可能性があります。リリース記録の確認も簡単です。小紅書アプリを開き、「自分」→「公開」→「すべての出版物」をクリックするだけで、自分の出版記録を表示できます。ここでは、以前に公開されたノートを簡単に見つけることができます。 3.再投稿。見つかったら

小紅書でノートに商品リンクを追加する方法 小紅書でノートに商品リンクを追加するチュートリアル 小紅書でノートに商品リンクを追加する方法 小紅書でノートに商品リンクを追加するチュートリアル Mar 12, 2024 am 10:40 AM

小紅書でメモに商品リンクを追加するにはどうすればよいですか?小紅書アプリでは、ユーザーはさまざまなコンテンツを閲覧できるだけでなく、ショッピングもできるため、このアプリにはショッピングのおすすめや良い商品の共有に関するコンテンツがたくさんあります。このアプリでは、ショッピング体験を共有したり、協力してくれる販売者を見つけたり、メモにリンクを追加したりすることもできます。便利なだけでなく、専門家がいくつかの機能を備えているため、多くの人がこのアプリをショッピングに使用したいと考えています。興味深いコンテンツを閲覧して、自分に合った衣料品があるかどうかを確認できます。ノートに商品リンクを追加する方法を見てみましょう! 小紅書ノートに商品リンクを追加する方法 携帯電話のデスクトップでアプリを開きます。アプリのホームページをクリックします

matplotlib のカラーマップの詳細 matplotlib のカラーマップの詳細 Jan 09, 2024 pm 03:51 PM

matplotlib カラー テーブルの詳細については、特定のコード サンプルが必要です 1. はじめに matplotlib は強力な Python 描画ライブラリであり、さまざまな種類のチャートの作成に使用できる豊富な描画関数とツールのセットを提供します。カラーマップ (カラーマップ) は matplotlib の重要な概念であり、チャートの配色を決定します。 matplotlib カラー テーブルを詳しく学ぶことは、matplotlib の描画機能をよりよく習得し、描画をより便利にするのに役立ちます。

C言語の魅力に迫る ~プログラマーの可能性を引き出す~ C言語の魅力に迫る ~プログラマーの可能性を引き出す~ Feb 24, 2024 pm 11:21 PM

C言語学習の魅力:プログラマーの可能性を引き出す テクノロジーの発展に伴い、コンピュータプログラミングは大きな注目を集めている分野です。数あるプログラミング言語の中でもC言語は常にプログラマーに愛されています。そのシンプルさ、効率性、幅広い用途により、C 言語の学習は、多くの人にとってプログラミングの分野に入る最初のステップとなっています。この記事では、C言語を学ぶ魅力と、C言語を学ぶことでプログラマーの可能性を引き出す方法について解説します。 C言語学習の魅力は、まずその簡単さにあります。他のプログラミング言語と比較すると、C言語は

Pygame 入門: 包括的なインストールと構成のチュートリアル Pygame 入門: 包括的なインストールと構成のチュートリアル Feb 19, 2024 pm 10:10 PM

Pygame をゼロから学ぶ: 完全なインストールと構成チュートリアル、特定のコード例が必要 はじめに: Pygame は、Python プログラミング言語を使用して開発されたオープン ソースのゲーム開発ライブラリであり、豊富な機能とツールを提供し、開発者はさまざまなタイプのゲームを簡単に作成できますゲームの。この記事は、Pygame をゼロから学習するのに役立ち、完全なインストールと構成のチュートリアルと、すぐに始めるための具体的なコード例を提供します。パート1:最初にPythonとPygameをインストールして、確認してください

Wordでルート番号を入力する方法を一緒に学びましょう Wordでルート番号を入力する方法を一緒に学びましょう Mar 19, 2024 pm 08:52 PM

Word でテキスト コンテンツを編集するときに、数式記号の入力が必要になる場合があります。 Word でルート番号を入力する方法を知らない人もいるので、Xiaomian は私に、Word でルート番号を入力する方法のチュートリアルを友達と共有するように頼みました。それが私の友達に役立つことを願っています。まず、コンピュータで Word ソフトウェアを開き、編集するファイルを開き、ルート記号を挿入する必要がある場所にカーソルを移動します。下の図の例を参照してください。 2. [挿入]を選択し、記号内の[数式]を選択します。下の図の赤丸で示すように: 3. 次に、下の[新しい数式を挿入]を選択します。以下の図の赤丸で示すように: 4. [根号式]を選択し、適切な根号を選択します。下の図の赤丸で示したように、

See all articles