「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python を使用した Word 埋め込み: Wordc

Python を使用した Word 埋め込み: Wordc

2024 年 11 月 8 日に公開
ブラウズ:826

Word-embedding-with-Python: Wordc

Python (および Gensim) を使用した word2vec 実装

  • 注: このコードは Python 3.6.1 (Gensim 2.3.0) で書かれています

  • Gensim を使用した Python の実装と word2vec のアプリケーション

  • 原著論文: Mikolov, T.、Chen, K.、Corrado, G.、および Dean, J. (2013)。ベクトル空間での単語表現の効率的な推定。 arXiv プレプリント arXiv:1301.3781.

import re
import numpy as np

from gensim.models import Word2Vec
from nltk.corpus import gutenberg
from multiprocessing import Pool
from scipy import spatial
  • トレーニング データセットをインポートします
  • nltk ライブラリからシェイクスピアのハムレット コーパスをインポート
sentences = list(gutenberg.sents('shakespeare-hamlet.txt'))   # import the corpus and convert into a list

print('Type of corpus: ', type(sentences))
print('Length of corpus: ', len(sentences))

コーパスの種類: クラス 'リスト'
コーパスの長さ: 3106

print(sentences[0])    # title, author, and year
print(sentences[1])
print(sentences[10])

['[', 'ザ'、'悲劇'、'オブ'、'ハムレット'、'バイ'、'ウィリアム'、'シェイクスピア'、'1599'、']']
['アクタス'、'プリムス'、'.']
['フラン', '.']

データの前処理

  • re モジュールを使用してデータを前処理する
  • すべての文字を小文字に変換します
  • 句読点や数字などを削除します。
for i in range(len(sentences)):
    sentences[i] = [word.lower() for word in sentences[i] if re.match('^[a-zA-Z] ', word)]  
print(sentences[0])    # title, author, and year
print(sentences[1])
print(sentences[10])

['ザ'、'悲劇'、'オブ'、'ハムレット'、'バイ'、'ウィリアム'、'シェイクスピア']
['アクタス'、'プリムス']
['フラン']

モデルの作成とトレーニング

  • word2vec モデルを作成し、Hamlet コーパスでトレーニングする
  • キーパラメータの説明 (https://radimrehurek.com/gensim/models/word2vec.html)
    • sentences: トレーニング データ (トークン化された文のリストである必要があります)
    • size: 埋め込みスペースの寸法
    • sg: 0 の場合は CBOW、1 の場合はスキップグラム
    • window: 各コンテキストに含まれる単語の数 (ウィンドウ
    • の場合)
    • サイズは 3、左近傍の 3 ワードと右近傍の 3 ワードが考慮されます)
    • min_count: 語彙に含まれる単語の最小数
    • iter: トレーニングの反復数
    • workers: トレーニングするワーカー スレッドの数
model = Word2Vec(sentences = sentences, size = 100, sg = 1, window = 3, min_count = 1, iter = 10, workers = Pool()._processes)

model.init_sims(replace = True)

モデルの保存とロード

  • word2vec モデルはローカルに保存およびロードできます
  • そうすることで、モデルを再度トレーニングする時間を短縮できます
model.save('word2vec_model')
model = Word2Vec.load('word2vec_model')

類似度計算

  • 埋め込まれた単語 (ベクトル) 間の類似性は、コサイン類似度などのメトリクスを使用して計算できます。
model.most_similar('hamlet')

[('ホレイショ', 0.9978846311569214),
('クイーン', 0.9971947073936462),
('レアテス', 0.9971820116043091),
('キング', 0.9968599081039429),
('母', 0.9966716170310974),
('どこ', 0.9966292381286621),
('ディア', 0.9965540170669556),
('オフィーリア', 0.9964221715927124),
(「とても」、0.9963752627372742)、
(「ああ」、0.9963476657867432)]

v1 = model['king']
v2 = model['queen']

# define a function that computes cosine similarity between two words
def cosine_similarity(v1, v2):
    return 1 - spatial.distance.cosine(v1, v2)

cosine_similarity(v1, v2)

0.99437165260314941

リリースステートメント この記事は、https://dev.to/ragoli86/word-embedding-with-python-word2vec-540c?1に再現されています。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3