Word 埋め込みと Word2Vec モデルと例

Word 埋め込みとは何ですか?

単語の埋め込み 機械学習を可能にする単語表現タイプです algorithms 似たような意味の言葉を理解すること。これは、単語を実際のベクトルにマッピングする言語モデリングおよび特徴学習手法です。 numbers ニューラル ネットワーク、確率モデル、または単語共起行列の次元削減を使用します。単語埋め込みモデルには、Word2vec (Google)、Glove (Stanford)、および最速 (Facebook) などがあります。

Word Embedding は、分散意味論的モデル、分散表現または意味論的ベクトル空間またはベクトル空間モデルとも呼ばれます。 これらの名前を読んでいると、類似した単語をまとめて分類することを意味するセマンティックという単語に遭遇します。 たとえば、リンゴ、マンゴー、バナナなどの果物は近くに配置する必要がありますが、本はこれらの単語から遠く離れた場所に配置します。 より広い意味では、単語の埋め込みにより、本のベクトル表現から遠く離れた場所に配置される果物のベクトルが作成されます。

Word の埋め込みはどこで使用されますか?

Word の埋め込みは特徴生成、ドキュメントに役立ちます clustering、テキスト分類、および自然言語処理タスク。それらをリストアップし、それぞれのアプリケーションについて議論してみましょう。

  • 類似した単語を計算します。 単語の埋め込みは、予測モデルの対象となる単語に類似した単語を提案するために使用されます。 それに加えて、最も一般的な単語だけでなく、異なる単語も提案します。
  • 関連する単語のグループを作成します。 これは、似た特徴を持つものを一緒にグループ化し、遠く離れた異なるものをグループ化する意味論的なグループ化に使用されます。
  • テキスト分類の機能: テキストはベクトルの配列にマッピングされ、トレーニングと予測のためにモデルに供給されます。 テキストベースの分類子モデルは文字列でトレーニングできないため、テキストが機械でトレーニング可能な形式に変換されます。 さらに、テキストベースの分類でセマンティック ヘルプを構築する機能も備えています。
  • ドキュメント clustering: Word Embedding Word2vec が広く使用されているもう XNUMX つのアプリケーションです
  • 自然言語処理: 単語の埋め込みが便利で、品詞のタグ付け、感情分析、構文分析などの特徴抽出フェーズで役立つアプリケーションは数多くあります。 これで、単語の埋め込みについてある程度の知識が得られました。 単語埋め込みを実装するために、さまざまなモデルにもいくつかの光が当てられています。 この Word 埋め込みチュートリアル全体は、モデルの 2 つ (WordXNUMXvec) に焦点を当てています。

Word2vecとは何ですか?

Word2vec は、より適切な単語表現を目的とした単語埋め込みを生成する手法/モデルです。 これは、多数の正確な構文的および意味的な単語の関係を取得する自然言語処理方法です。 これは浅い XNUMX 層のニューラル ネットワークであり、トレーニング後に同義語を検出し、文の一部に対して追加の単語を提案できます。

この Word2vec チュートリアルをさらに進める前に、以下の Word 埋め込み例の図に示すように、浅いニューラル ネットワークと深いニューラル ネットワークの違いを確認してください。

浅いニューラル ネットワークは入力と出力の間に XNUMX つの隠れ層のみで構成されますが、深いニューラル ネットワークには入力と出力の間に複数の隠れ層が含まれます。 入力はノードの影響を受けますが、出力層と同様に隠れ層にはニューロンが含まれます。

浅い学習と深い学習
浅い学習と深い学習

Word2vec は、入力 XNUMX つの隠れ層と出力がある XNUMX 層ネットワークです。

Word2vec は、Google の Tomas Mikolov が率いる研究者グループによって開発されました。 Word2vec は、潜在的な意味分析モデルよりも優れており、より効率的です。

Word2vec を使用する理由

Word2vec は単語をベクトル空間表現で表します。単語はベクトル形式で表現され、意味の似た単語は一緒に出現し、異なる単語は遠くに配置されるように配置されます。これは意味関係とも呼ばれます。ニューラル ネットワークはテキストを理解せず、テキストだけを理解します。 numbers。 Word Embedding は、テキストを数値ベクトルに変換する方法を提供します。

Word2vec は単語の言語コンテキストを再構築します。 さらに先に進む前に、言語的コンテキストとは何なのかを理解しましょう。 一般的な生活の場面では、私たちがコミュニケーションのために話したり書いたりするとき、他の人はその文の目的が何かを理解しようとします。 たとえば、「インドの気温は何度ですか」、ここでのコンテキストは、ユーザーが知りたいのは「インドの気温」、つまりコンテキストです。 つまり、文の主な目的は文脈です。 話し言葉または書き言葉の周りの単語や文(開示)は、文脈の意味を判断するのに役立ちます。 Word2vec は、コンテキストを通じて単語のベクトル表現を学習します。

Word2vec は何をするのですか?

Word埋め込み前

Word 埋め込みの前にどのアプローチが使用されるか、またそのデメリットは何かを知ることが重要です。その後、Word2vec アプローチを使用した Word 埋め込みによってデメリットがどのように克服されるかというトピックに移ります。 最後に、Word2vec の動作を理解することが重要なので、WordXNUMXvec がどのように動作するかを説明します。

潜在意味解析のアプローチ

これは、単語の埋め込みが行われる前に使用されていたアプローチです。 これは、単語がエンコードされたベクトルの形式で表現される Bag of Words の概念を使用しました。 これは、次元が語彙のサイズと等しいスパース ベクトル表現です。 単語が辞書にある場合はカウントされ、それ以外の場合はカウントされません。 さらに詳しく理解するには、以下のプログラムをご覧ください。

Word2vec の例

Word2vec の例

from sklearn.feature_extraction.text import CountVectorizer
vectorizer=CountVectorizer()
data_corpus=["guru99 is the best sitefor online tutorials. I love to visit guru99."]
vocabulary=vectorizer.fit(data_corpus)
X= vectorizer.transform(data_corpus)
print(X.toarray())
print(vocabulary.get_feature_names())

出力:

[[1 2 1 1 1 1 1 1 1 1]]

[u'best', u'guru99', u'is', u'love', u'online', u'sitefor', u'the', u'to', u'tutorials', u'visit']

コードの説明

  1. CountVectorizer は、単語の適合に基づいて語彙を保存するために使用されるモジュールです。 これはsklearnから輸入したものです。
  2. CountVectorizer クラスを使用してオブジェクトを作成します。
  3. CountVectorizer に当てはめるデータをリストに書き込みます。
  4. データは、CountVectorizer クラスから作成されたオブジェクトに収まります。
  5. Bag of Word アプローチを適用して、語彙を使用してデータ内の単語をカウントします。 単語またはトークンが語彙内で使用できない場合、そのインデックス位置はゼロに設定されます。
  6. 5 行目の変数 x は配列に変換されます (x で使用できるメソッド)。 これにより、3 行目で指定された文またはリスト内の各トークンの数が得られます。
  7. これにより、4 行目のデータを使用して適合させた場合の語彙の一部である特徴が表示されます。

潜在意味論的アプローチでは、行は一意の単語を表し、列はその単語が文書内に出現する回数を表します。 これは、文書マトリックスの形式で単語​​を表現したものです。 用語頻度逆文書頻度 (TFIDF) は、文書内の単語の頻度をカウントするために使用されます。これは、文書内の用語の頻度/コーパス全体内の用語の頻度です。

Bag of Words 法の欠点

  • たとえば、これは悪い = これは悪いというように、単語の順序は無視されます。
  • 単語の文脈を無視します。 「彼は本が好きでした。」という文を書いたとします。 教育は本から得られるのが一番です。」 これにより、「彼は本が好きだった」というベクトルと「教育は本に最もよく見つかる」という XNUMX つのベクトルが作成されます。 両方を直交して扱うため独立していますが、実際には相互に関連しています。

これらの制限を克服するために、単語埋め込みが開発され、Word2vec はそれを実装するためのアプローチです。

Word2vec はどのように機能するのでしょうか?

Word2vec は、周囲のコンテキストを予測して単語を学習します。 たとえば、「彼は」という言葉を考えてみましょう。 フットボール。"

「loves」という単語の Word2vec を計算したいと考えています。

仮に

loves =  Vin. P(Vout / Vin) is calculated	
where,	
Vin is the input word. 	
P is the probability of likelihood.	
Vout is the output word. 	

Word コーパス内の各単語を移動します。 単語間の構文的関係だけでなく意味的関係もエンコードされます。 これは、類似した単語や類似した単語を見つけるのに役立ちます。

単語のすべてのランダムな特徴 計算されます。 これらの機能は、隣接単語または文脈単語に関して変更または更新されます。 誤差逆伝播法 方法。

もう XNUMX つの学習方法は、XNUMX つの単語の文脈が類似している場合、または XNUMX つの単語が類似した特徴を持っている場合、そのような単語は関連しているということです。

Word2vec Archi構造

二つあります archiWord2vec で使用されるテクチャ:

  1. 連続バッグ・オブ・ワード (CBOW)
  2. スキップグラム

この Word2vec チュートリアルをさらに進める前に、これらの理由について説明しましょう。 archi構造またはモデルは、単語表現の観点から重要です。単語表現の学習は基本的に教師なしですが、モデルをトレーニングするにはターゲット/ラベルが必要です。 Skip-gram と CBOW は、モデルのトレーニングのために教師なし表現を教師あり形式に変換します。

CBOW では、周囲のコンテキストのウィンドウを使用して現在の単語を予測します windows。たとえば、w の場合I-1,wI-2,wi + 1,wi + 2単語またはコンテキストが与えられると、このモデルは以下の情報を提供します。i

Skip-Gram は、単語から指定されたシーケンスまたはコンテキストを予測することを意味する CBOW の逆の動作を行います。 例を逆にすると理解できます。 もしwi が与えられた場合、これはコンテキストまたは w を予測します。I-1,wI-2,wi + 1,wi+2。

Word2vec は、CBOW (Continuous Bag of Words) とスキムグラムのどちらかを選択するオプションを提供します。このようなパラメーターは、モデルのトレーニング中に提供されます。ネガティブサンプリングまたはそれ以上のサンプリングを使用するオプションがあります。archi校正ソフトマックス層。

言葉の連続バッグ

Word の連続バッグを理解するために、簡単な Word2vec の例の図を描いてみましょう。 archi構造。

連続した単語の袋 Archi構造

連続した単語の袋 Archi構造

方程式を数学的に計算してみましょう。 V が語彙サイズ、N が隠れ層サイズであると仮定します。 入力は { x として定義されますI-1、Xi-2、 xi+1、 xi + 2}。 V * N を乗算して重み行列を取得します。別の行列は、入力ベクトルと重み行列を乗算して取得します。 これは次のようにしても理解できますwing 方程式。

h=xitW

ここでxit? W はそれぞれ入力ベクトルと重み行列です。

コンテキストと次の単語の間の一致を計算するには、以下の式を参照してください。

u=予測された表現*h

ここで、予測表現は上式のモデル?h で取得されます。

スキップグラムモデル

Skip-Gram アプローチは、入力単語が与えられた文を予測するために使用されます。 これをよりよく理解するために、以下の Word2vec の例に示すような図を描いてみましょう。

スキップグラムモデル

スキップグラムモデル

これを、入力が単語であり、モデルがコンテキストまたはシーケンスを提供する、単語の連続バッグ モデルの逆として扱うことができます。 また、ターゲットは入力層に供給され、選択された数のコンテキストワードに対応するために出力層が複数回複製されると結論付けることもできます。 すべての出力層からの誤差ベクトルが合計され、逆伝播法によって重みが調整されます。

どのモデルを選択しますか?

CBOW はスキップ グラムよりも数倍高速で、頻繁に使用される単語に対してより良い周波数を提供します。一方、スキップ グラムは少量のトレーニング データを必要とし、まれな単語やフレーズも表現します。

Word2vecとNLTKの関係

NLTK 自然言語ツールキットです。テキストの前処理に使用されます。人は違うこともできる opera品詞のタグ付け、見出し語化、ステミング、ストップワードの削除、まれな単語や最も使用されない単語の削除などのオプション。テキストを整理するだけでなく、効果的な単語から特徴を準備するのにも役立ちます。別の方法では、Word2vec は意味的 (密接に関連する項目の一致) および構文的 (シーケンス) の一致に使用されます。 Word2vec を使用すると、類似した単語、異なる単語、次元削減などを検索できます。 Word2vec のもう XNUMX つの重要な機能は、テキストの高次元表現を低次元のベクトルに変換することです。

NLTK と Word2vec をどこで使用するのですか?

トークン化、POS タグ付け、解析などの上記の汎用タスクを実行する必要がある場合は、NLTK を使用する必要がありますが、コンテキスト、トピック モデリング、またはドキュメントの類似性に基づいて単語を予測する場合は Word2vec を使用する必要があります。

コードを使用した NLTK と Word2vec の関係

NLTK と Word2vec を併用すると、類似した単語表現や構文一致を検索できます。 NLTK ツールキットを使用すると、NLTK に付属する多くのパッケージをロードでき、モデルは Word2vec を使用して作成できます。 その後、リアルタイムの単語でテストできます。 以下で両方の組み合わせを見てみましょうwing コード。 さらに処理を進める前に、NLTK が提供するコーパスをご覧ください。 コマンドを使用してダウンロードできます

nltk(nltk.download('all'))

NLTKとWord2vecの関係

NLTK を使用してダウンロードされたコーパス

コードのスクリーンショットを参照してください。

import nltk
import gensim
from nltk.corpus import abc

model= gensim.models.Word2Vec(abc.sents())
X= list(model.wv.vocab)
data=model.most_similar('science')
print(data)

コードを利用した NLTK と Word2vec の関係

出力:

[('law', 0.9415997266769409), ('practice', 0.9276568293571472), ('discussion', 0.9259148836135864), ('agriculture', 0.9257254004478455), ('media', 0.9232194423675537), ('policy', 0.922248125076294), ('general', 0.9166069030761719), ('undertaking', 0.916458249092102), ('tight', 0.9129181504249573), ('board', 0.9107444286346436)]

コードの説明

  1. nltk ライブラリがインポートされ、そこから次のステップで使用する abc コーパスをダウンロードできます。
  2. ゲンシムは輸入されています。 Gensim Word2vec がインストールされていない場合は、「pip3 install gensim」コマンドを使用してインストールしてください。 以下のスクリーンショットをご覧ください。
PIP を使用した Gensim のインストール

PIP を使用した Gensim のインストール
  1. nltk.download('abc') を使用してダウンロードしたコーパス abc をインポートします。
  2. Gensimを使用してインポートされたファイルをモデルWord2vecに文として渡します。
  3. 語彙は変数の形式で保存されます。
  4. これらのファイルは科学に関連しているため、モデルはサンプル単語サイエンスでテストされます。
  5. ここでは、「科学」という類似の単語がモデルによって予測されます。

アクティベータと Word2Vec

ニューロンの活性化関数は、一連の入力が与えられた場合のそのニューロンの出力を定義します。 異なる刺激を使用して異なるニューロンが活性化される脳内の活動から生物学的にインスピレーションを得ています。 以下の手順で活性化関数を理解しましょうwing 図。

Word2vecのアクティベーション機能

アクティベーション関数を理解する

ここで、x1、x2、..x4 はニューラル ネットワークのノードです。

w1、w2、w3 はノードの重みです。

? は、活性化関数として機能するすべての重みとノード値の合計です。

なぜアクティベーション機能なのか?

活性化関数が使用されない場合、出力は線形になりますが、線形関数の機能は制限されます。 comを達成するためにplex オブジェクト検出、画像分類、音声を使用したテキスト入力、その他多くの非線形出力などの機能が必要であり、これはアクティベーション関数を使用して実現されます。

単語埋め込み (Word2vec) でのアクティベーション レイヤーの計算方法

Softmax Layer (正規化指数関数) は、各ノードをアクティブ化または起動する出力層関数です。使用されるもう 1 つのアプローチは Hier ですarchical Softmax ここで、complex性は O(log2V) ここで、ソフトマックスは O(V) であり、V は語彙サイズです。 これらの違いは、com の削減です。plexハイアーの都市archi校正ソフトマックス層。それを理解するには (Hierarchical Softmax) 機能については、以下の Word 埋め込み例をご覧ください。

ここでarchical Softmax ツリー状構造

ここでarchical ソフトマックス ツリーのような構造

単語が観測される確率を計算したいとします。 特定のコンテキストが与えられると。 ルートからリーフ ノードへのフローは、最初にノード 2 に移動し、次にノード 5 に移動します。したがって、語彙サイズが 8 の場合、必要な計算は XNUMX 回だけです。 したがって、XNUMX つの単語の確率を分解して計算することができます ().

Hier 以外に利用可能なオプションは何ですかarchiカルソフトマックス?

一般的な単語埋め込みオプションで言えば、微分ソフトマックス、CNN-ソフトマックス、重要度サンプリング、適応重要度サンプリング、ノイズ対比推定、ネガティブ サンプリング、自己正規化、および低頻度正規化が利用可能です。

特に Word2vec について言えば、ネガティブ サンプリングが利用可能です。

ネガティブ サンプリングは、トレーニング データをサンプリングする方法です。 これは確率的勾配降下法に似ていますが、いくつかの違いがあります。 ネガティブ サンプリングでは、ネガティブなトレーニング サンプルのみが検索されます。 これはノイズ対比推定に基づいており、文脈ではなく単語をランダムにサンプリングします。 これは高速なトレーニング方法であり、コンテキストをランダムに選択します。 予測された単語がランダムに選択されたコンテキスト内に出現する場合、両方のベクトルは互いに近くなります。

どのような結論が導き出せるでしょうか?

私たちのニューロンが外部刺激を使用して発火するのと同じように、アクティベーターはニューロンを発火させます。 Softmax 層は、単語埋め込みの場合にニューロンを起動する出力層関数の 2 つです。 WordXNUMXvec には hier などのオプションがあります。archiソフトマックスとネガティブサンプリングの校正。アクティベータを使用すると、線形関数を非線形関数に変換でき、plex このようなものを使用して機械学習アルゴリズムを実装できます。

ゲンシムとは何ですか?

ゲンシム は、オープンソースのトピック モデリングおよび自然言語処理ツールキットであり、 Python そしてサイソン。 Gensim ツールキットを使用すると、ユーザーは Word2vec をインポートしてトピック モデリングを行い、テキスト本文の隠れた構造を発見できます。 Gensim は Word2vec の実装だけでなく、Doc2vec および FastText の実装も提供します。

このチュートリアルはすべて Word2vec に関するものであるため、現在のトピックに限定して説明します。

Gensimを使用してWord2vecを実装する方法

これまで Word2vec とは何かについて説明してきましたが、それは異なります。 archiテクチャ、なぜあるのか shift ワードのバッグから Word2vec へ、ライブ コードとアクティベーション関数を使用した Word2vec と NLTK の関係。

以下は、Gensim を使用して Word2vec を実装するための段階的な方法です。

ステップ 1) データ収集

機械学習モデルの実装または自然言語処理の実装の最初のステップはデータ収集です

インテリジェントなシステムを構築するためにデータを観察してください chatbot 以下の Gensim Word2vec の例に示すように。

[{"tag": "welcome",
"patterns": ["Hi", "How are you", "Is any one to talk?", "Hello", "hi are you available"],
"responses": ["Hello, thanks for contacting us", "Good to see you here"," Hi there, how may I assist you?"]

        },
{"tag": "goodbye",
"patterns": ["Bye", "See you later", "Goodbye", "I will come back soon"],
"responses": ["See you later, thanks for visiting", "have a great day ahead", "Wish you Come back again soon."]
        },

{"tag": "thankful",
"patterns": ["Thanks for helping me", "Thank your guidance", "That's helpful and kind from you"],
"responses": ["Happy to help!", "Any time!", "My pleasure", "It is my duty to help you"]
        },
        {"tag": "hoursopening",
"patterns": ["What hours are you open?", "Tell your opening time?", "When are you open?", "Just your timing please"],
"responses": ["We're open every day 8am-7pm", "Our office hours are 8am-7pm every day", "We open office at 8 am and close at 7 pm"]
        },

{"tag": "payments",
"patterns": ["Can I pay using credit card?", " Can I pay using Mastercard?", " Can I pay using cash only?" ],
"responses": ["We accept VISA, Mastercard and credit card", "We accept credit card, debit cards and cash. Please don’t worry"]
        }
   ]

データから分かることは次のとおりです

  • このデータには、タグ、パターン、レスポンスの XNUMX つが含まれます。 タグは意図(議論のテーマは何か)です。
  • データはJSON形式です。
  • パターンとは、ユーザーがボットに尋ねる質問です。
  • レスポンスとは、次のような答えです。 chatbot 対応する質問/パターンを提供します。

ステップ 2) データの前処理

生データを処理することは非常に重要です。 クリーンなデータがマシンに供給されると、モデルはより正確に応答し、より効率的にデータを学習します。

この手順には、ストップ ワード、ステミング、不要な単語などの削除が含まれます。続行する前に、データをロードしてデータ フレームに変換することが重要です。 そのような場合は、以下のコードを参照してください

import json
json_file =’intents.json'
with open('intents.json','r') as f:
    data = json.load(f)

コードの説明:

  1. データは json 形式であるため、json がインポートされます
  2. ファイルは変数に格納されます
  3. ファイルが開かれており、データ変数にロードされています

データがインポートされたので、データをデータ フレームに変換します。 次のステップを確認するには、以下のコードを参照してください。

import pandas as pd
df = pd.DataFrame(data)
df['patterns'] = df['patterns'].apply(', '.join) 

コードの説明:

1. 上記でインポートしたpandasを使用してデータをデータフレームに変換します。

2. 列パターンのリストを文字列に変換します。

from nltk.corpus import stopwords
from textblob import Word
stop = stopwords.words('english')
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))
df['patterns't']= df['patterns''].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation)
df['patterns']= df['patterns'].str.replace('[^\w\s]','')
df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if  not x.isdigit()))
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))
df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))

コードの説明:

1. 英語のストップワードは、nltk ツールキットのストップワードモジュールを使用してインポートされます

2. for 条件とラムダ関数を使用して、テキストのすべての単語が小文字に変換されます。 ラムダ関数 は匿名関数です。

3. データ フレーム内のテキストのすべての行で文字列句読点がチェックされ、文字列句読点がフィルタリングされます。

4. などのキャラクター numbers またはドットは正規表現を使用して削除されます。

5. テキストから数字が削除されます。

6. ストップワードはこの段階で削除されます。

7. 単語がフィルタリングされ、見出し語化を使用して同じ単語の異なる形式が削除されます。 以上でデータの前処理は完了です。

出力:

, patterns, responses, tag
0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome
1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye
2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful
3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening
4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please don’t worry']",payments

ステップ 3) Word2vec を使用したニューラル ネットワークの構築

次に、Gensim Word2vec モジュールを使用してモデルを構築します。 Gensim から Word2vec をインポートする必要があります。 これを実行してからビルドし、最終段階でリアルタイム データでモデルを確認します。

from gensim.models import Word2Vec

この Gensim Word2vec チュートリアルでは、Word2Vec を使用してモデルを正常に構築できます。 Word2Vec を使用してモデルを作成する方法については、コードの次の行を参照してください。 テキストはリストの形式でモデルに提供されるため、以下のコードを使用してテキストをデータフレームからリストに変換します。

Bigger_list=[]
for i in df['patterns']
     li = list(i.split(""))
     Bigger_list.append(li)	
Model= Word2Vec(Bigger_list,min_count=1,size=300,workers=4)

コードの説明:

1. 内部リストが追加される、bigger_list を作成しました。 これは、Word2Vec モデルに供給される形式です。

2. ループが実装され、データ フレームのパターン列の各エントリが反復されます。

3. 列パターンの各要素が分割され、内部リスト li に格納されます。

4. 内側のリストに外側のリストが追加されます。

5. このリストは Word2Vec モデルに提供されます。 ここで提供されるパラメータのいくつかを理解しましょう

最小数: 合計頻度がこれより低い単語はすべて無視されます。

サイズ: これは単語ベクトルの次元を表します。

労働者: これらはモデルをトレーニングするためのスレッドです

他にも利用可能なオプションがあり、いくつかの重要なオプションについては以下で説明します。

ウィンドウ: 文内の現在の単語と予測された単語の間の最大距離。

代表: これはトレーニング アルゴリズムであり、スキップグラムの場合は 1、単語の連続バッグの場合は 0 です。これらについては、deで議論しました。tails 上にあります。

Hs: これが 1 の場合、hier を使用します。archiトレーニング用にソフトマックスを計算し、0 の場合は負のサンプリングが使用されます。

アルファ: 初期学習率

最終的なコードを以下に表示してみましょう。

#list of libraries used by the code
import string
from gensim.models import Word2Vec
import logging
from nltk.corpus import stopwords
from textblob import Word
import json
import pandas as pd
#data in json format
json_file = 'intents.json'
with open('intents.json','r') as f:
    data = json.load(f)
#displaying the list of stopwords
stop = stopwords.words('english')
#dataframe
df = pd.DataFrame(data)

df['patterns'] = df['patterns'].apply(', '.join)
# print(df['patterns'])
#print(df['patterns'])
#cleaning the data using the NLP approach
print(df)
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))
df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation))
df['patterns']= df['patterns'].str.replace('[^\w\s]','')
df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if  not x.isdigit()))
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))
df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
#taking the outer list
bigger_list=[]
for i in df['patterns']:
    li = list(i.split(" "))
    bigger_list.append(li)
#structure of data to be taken by the model.word2vec
print("Data format for the overall list:",bigger_list)
#custom data is fed to machine for further processing
model = Word2Vec(bigger_list, min_count=1,size=300,workers=4)
#print(model)

ステップ4) モデルの保存

モデルはビンとモデルフォームの形式で保存できます。 bin はバイナリ形式です。 モデルを保存するには、以下の行を参照してください。

model.save("word2vec.model")
model.save("model.bin")

上記コードの説明

1. モデルは .model ファイルの形式で保存されます。

2. モデルは .bin ファイルの形式で保存されます

このモデルを使用して、似た単語、似ていない単語、最も一般的な単語などのリアルタイム テストを実行します。

ステップ 5) モデルのロードとリアルタイム テストの実行

モデルは以下のコードを使用してロードされます。

model = Word2Vec.load('model.bin')

語彙を印刷したい場合は、以下のコマンドを使用して実行します。

vocab = list(model.wv.vocab)

結果をご覧ください:

['see', 'thank', 'back', 'thanks', 'soon', 'open', 'mastercard', 'card', 'time', 'pay', 'talk', 'cash', 'one', 'please', 'goodbye', 'thats', 'helpful', 'hour', 'credit', 'hi', 'later', 'guidance', 'opening', 'timing', 'hello', 'helping', 'bye', 'tell', 'come', 'using', 'kind', 'available']

ステップ 6) 最も類似した単語のチェック

実際に実装してみましょう。

similar_words = model.most_similar('thanks')	
print(similar_words)	

結果をご覧ください:

[('kind', 0.16104359924793243), ('using', 0.1352398842573166), ('come', 0.11500970274209976), ('later', 0.09989878535270691), ('helping', 0.04855936020612717), ('credit', 0.04659383371472359), ('pay', 0.0329081267118454), ('thank', 0.02484947443008423), ('hour', 0.0202352125197649), ('opening', 0.018177658319473267)]

ステップ 7) 指定された単語の単語と一致しません

dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())
print(dissimlar_words)

私たちは言葉を提供しました 'またね later、訪問していただきありがとうございます。 これは意志 これらの単語から最も似ていない単語を出力します。 このコードを実行して結果を見てみましょう

上記のコードを実行した結果:

Thanks

ステップ 8) XNUMX つの単語間の類似性を見つける

これにより、XNUMX つの単語間の類似性の確率がわかります。 このセクションを実行する方法は、以下のコードを参照してください。

similarity_two_words = model.similarity('please','see')
print("Please provide the similarity between these two words:")
print(similarity_two_words)

上記のコードの結果は以下のようになります

0.13706

以下のコードを実行すると、類似した単語をさらに見つけることができます

similar = model.similar_by_word('kind')
print(similar)

上記のコードの出力:

[('credit', 0.11764447391033173), ('cash', 0.11440904438495636), ('one', 0.11151769757270813), ('hour', 0.0944807156920433), ('using', 0.0705675333738327), ('thats', 0.05206916481256485), ('later', 0.04502468928694725), ('bye', 0.03960943967103958), ('back', 0.03837274760007858), ('thank', 0.0380823090672493)] 

まとめ

  • 単語埋め込みは、類似した意味を持つ単語を機械学習によって理解できるようにする単語表現の一種です。 algorithms
  • 単語埋め込みは、類似した単語の計算、関連単語のグループの作成、テキスト分類機能、ドキュメントに使用されます。 clustering、自然言語処理
  • Word2vec の説明: Word2vec は、より適切な単語表現のための単語埋め込みを生成する浅い XNUMX 層のニューラル ネットワーク モデルです。
  • Word2vec は単語をベクトル空間表現で表します。 単語はベクトル形式で表現され、同じ意味の単語は一緒に表示され、異なる単語は遠くに配置されるように配置されます。
  • Word2vec アルゴリズムは 2 を使用します archiContinuous Bag of Words (CBOW) とスキップグラムを保護します
  • CBOW はスキップ グラムよりも数倍高速で、頻繁に使用される単語に対してより良い周波数を提供します。一方、スキップ グラムは少量のトレーニング データを必要とし、まれな単語やフレーズも表現します。
  • NLTK と Word2vec を組み合わせて使用​​すると、強力なアプリケーションを作成できます
  • ニューロンの活性化関数は、一連の入力が与えられた場合のそのニューロンの出力を定義します。 Word2vecで。 Softmax Layer (正規化指数関数) は、各ノードをアクティブ化または起動する出力層関数です。 Word2vec ではネガティブ サンプリングも利用できます
  • Gensim は Python で実装されたトピック モデリング ツールキットです。