「コンテキストの解読:NLPにおける単語ベクトル化技術」

Decoding Context Word Vectorization Techniques in NLP

あなたは自国から遠く離れた新しい町に引っ越しました。そこでカフェで誰かにばったり出会いました。あなたと同じ年齢の若い女性で、すぐに会話に入りました。それはお互いが英語を知っていたから起こったことです。あなたの言語を話す誰かに出会えたことに興奮していたとき、ウェイターが現地の言葉で注文を取りに来ました。まあ、新しい友達は翻訳者になる準備ができています。アパートに戻った直後、あなたはインターネットを駆使して、現地の言語を学ぶためのコースを探しました。したがって、2つの実体間の適切なコミュニケーションには共通の言語が不可欠であることが明白です。

daan eversによる写真 Unsplash

人工知能の活発な領域である自然言語処理は、興味深い技術です。機械があなたの母国語で話していることを理解できるのは魅力的です。これにより、人間とコンピュータの間でスムーズな相互作用が可能になります。ただし、それが実現するには共通のコミュニケーション言語が必要ではないでしょうか?人間は英語、スペイン語、フランス語、ヒンディー語、中国語など、さまざまな言語を話しますが、コンピュータが知っている唯一の言語はバイナリです。彼らの世界は0と1で構成されています。

コンピュータが数値を理解し、私たちが英語などの言語を理解できるのであれば、自然言語を数値に変換するものがあるはずです。それがWord2vecです。

Word2vecは文章中の単語を連続した空間内のベクトルとして表現します。ベクトルはさまざまな文脈で単語間の意味的な関係を捉えます。類似した単語は類似したベクトルを持ちます。以下の図は、そのようなベクトル空間の2次元表現を示しています(実際のNLP問題では、ベクトル空間の次元は2よりもはるかに高いです)。

歩くと走るのような類似した単語が近くにあることがわかります。一方、smileとRadiologyは関連のない単語であり、遠く離れています。お互いに近い単語は置き換え可能な単語と呼ばれます。つまり、これらの単語を文の中で入れ替えても、文はまだ意味をなします。2つの単語の置換可能性は、2つの単語のベクトル間の角度の余弦に基づいて計算することができます。これは-1から1の値を取り、1は単語が強く関連していることを意味します。ベクトル上でいくつかの操作を行うことで、類似の単語を見つけるなどのタスクを実行することができます。

Word2vecは主に単語の予測に使用されます。私たちは電子メールなどの日常的に使用されるアプリで自動補完や自動修正のような機能を見たことがあるかもしれません。Word2vecは、不完全なドキュメント内の次の単語/単語を予測するために主に使用されます。これらのタスクを実行するためには、機械学習モデルをトレーニングする必要があります。

現実のアプリケーションで自然言語がベクトル化されるいくつかの方法を見てみましょう。

Jefferson Santosによる写真 Unsplash

ここでは、比較的小さなデータセットを使用してスパムフィルタリングモデルをトレーニングします。適切なモデルを作成するには、より大きなデータセットを使用する必要があります。それには時間がかかります。

データには、スパムメッセージまたはそうでないテキストメッセージが含まれています。ここからダウンロードできます。

それはテキストファイルであり、各行には、ラベルとカンマで区切られた文が2つのフィールドがあります。スパムメッセージの場合はラベルがスパムであり、本物のメッセージの場合はハムです。

これをPythonで実装します。プログラムには、numpy、pandas、nltk、regex、gensimなど、さまざまなライブラリが必要です。インストールされていない場合は、pipを使用してインストールできます。プログラムにインポートされたすべてのパッケージを示します。

from gensim.models import Word2Vecimport numpy as npfrom nltk.corpus import stopwordsimport nltkfrom nltk.corpus import stopwordsimport pandas as pdimport stringimport regex as refrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.metrics import precision_score,recall_scorefrom sklearn.model_selection import train_test_splitimport gensim

全てのパッケージをインポートしたので、実装を始めることができます。

最初のステップは、データセットをクリーンにし、準備することです。

messages = pd.read_csv("output.csv", delimiter="\t")messages.columns = ["label", "text"]  def text_cleaner(text):    nxt = "".join([char for char in text if char not in string.punctuation])    nxt = re.split("\W+",nxt.lower())    nxt = [k for k in nxt if k not in stopwords.words('english')]    return nxt messages["clean_text"] = messages['text'].apply(lambda x:text_cleaner(x))print(messages.head())

データセットをoutput.csvというファイルに保存しました。ファイルを読み込むためにpandas.read_csv()を使用しました。デリミタは”\t”に設定されています。

データには、”label”と”text”という2つの列にタイトルを付けました。

テキストをトークンに変換する必要があります。その前に、テキストをクリーンにすることができます。まず、文中の全ての句読点を削除しました。Pythonでは、一般的な句読点はstring.punctuationで見つけることができます。

nxt = re.split(“\W+”,nxt.lower())は、正規表現を使用して文を単語のセットに分割するために使用されます。また、単語を小文字に変換しました。なぜなら、モデルが大文字と小文字を区別しないようにしたいからです。

ストップワードとは、文の要点にほとんど貢献しない単語のことです。英語には約170以上のストップワードがあります。nltkライブラリのstopwords.words(‘english’)を使って、これらの単語をデータから削除することができます。

データは今クリーンになり、トークン化され、clean_textという新しい列に保存されています。データの最初の5つのエントリはhead()関数を使用してプリントすることができます。

トークンのセットができたので、トレーニングする前にベクトルに変換する必要があります。そのために、TF-IDF(Term Frequency Inverse Document Frequency)という特性を使用しましょう。文書内の単語のTF-IDFは、その単語が文書にとってどれだけ重要かを示します。これは、文書内の単語の頻度に直接関連し、サンプル空間内の文書の数に反比例します。以下の式で計算することができます:

Pythonでは、TfidfVectorizerクラスを使用してベクトルを作成することができます。コードをシンプルにするために、クリーニングとトークン化のための新しい列を作成していません。text_cleaner関数は、TfidVectorizer()で呼び出すことができます。

new_vector = TfidfVectorizer(analyzer=text_cleaner)x = new_vector.fit_transform(messages['text'])x_features = pd.DataFrame(x.toarray())

xは、各行がサンプル空間内のすべてのトークンのTF-IDF値を含むベクトルを表す2次元配列です。単語が文に存在しない場合、そのトークンのTF-IDF値はゼロになります。ほとんどの単語についてこれが当てはまるため、私たちは疎行列を得ました。疎行列は、トレーニングのためにpandasのデータフレームに変換されます。

ここで、モデルをトレーニングするためにsklearnが提供するRandomForestClassifierを使用しています。

x_train, x_test, y_train, y_test = train_test_split(x_features,messages['label'],test_size=0.2)rf = RandomForestClassifier()rf_model = rf.fit(x_train,y_train)y_pred = rf_model.predict(x_test)precision = precision_score(y_test,y_pred,pos_label='spam')recall = recall_score(y_test,y_pred,pos_label='spam')print("precision = {} and recall = {}".format(round(precision,4),round(recall,4)))

データはトレーニングセットとテストセットに分割され、トレーニングセットはRandomForestClassifierに渡されてモデルが作成されます。このモデルはテストデータでテストされ、精度は1.0、再現率は0.8378となりました。(私がデータにいくつかの修正を加えたので、若干異なる値が表示される場合があります。)

UnsplashでNate Grantによる写真

一方、Word2vecはやや異なるアプローチで動作します。単語をその位置に基づいて研究します。これは、単語の近くにある単語を分析することによって行われます。単語の各出現の周囲には、あるサイズのウィンドウが作成されます。この方法で、単語の使用の文脈が学習されます。前の例で使用したデータセット上でどのように行われるかを見てみましょう。

データがクリーニングされ、トークン化され、以前と同様に新しい列に保存されます。そのデータをトレーニングデータとテストデータに分割し、Word2Vecモデルに渡すことができます。トークンのベクトル化は、gensimパッケージにあるWord2Vecクラスによって処理されます。

x_train、x_test、y_train、y_test = train_test_split(messages["clean_text"],messages["label"],test_size=0.2)
w2v_model = gensim.models.Word2Vec(x_train,vector_size=100,window=5,min_count=2)
w2v_model.save("mymodel.model")

トレーニングされたモデルは、ローカルシステムに保存することができるため、毎回トレーニングする必要はありません。

ここでは、最小カウントを2に設定しました。これは、データ全体で単語の出現回数が少なくとも2回ある場合にのみベクトルが作成されることを意味します。したがって、問題に影響を与えないいくつかの単語を排除することができます。

Word2Vecモデルには多くの組み込み機能があります。たとえば、モデル内で最も類似した単語を見つけたい場合は、most_similar()関数を使用することができます。

mymodel = Word2Vec.load("mymodel.model")
similar_words = mymodel.wv.most_similar("run")
print(similar_words)

[('pls', 0.9978137612342834), ('yes', 0.9977635145187378), ('r', 0.9977442026138306), ('win', 0.9977269768714905), ('today', 0.9976850152015686), ('im', 0.9976809024810791), ('get', 0.9976732134819031), ('reply', 0.9976603984832764), ('new', 0.9976487159729004), ('one', 0.9976474046707153)]

得られた出力は非常に興味深いです。これは、このトレーニングには小さなデータセットを使用したためです。gensimには、大量のWikipediaドキュメントで訓練された類似したモデルがあり、より正確な出力が得られます。

自然言語のベクトル化は、機械学習において非常に広範な適用範囲を持っています。この技術は他の領域でも適用することができます。感情分析、テキスト生成、機械DNA分類などがその応用例のいくつかです。word2vecの成功は、これらの分野の発展において重要な役割を果たしました。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

T5 テキストからテキストへのトランスフォーマー(パート2)

BERT [5] の提案により、自然言語処理(NLP)のための転移学習手法の普及がもたらされましたインターネット上での未ラベル化...

機械学習

ハリウッドにおけるディズニーの論争:AIが登場し、脚本家と俳優が退場!

ハリウッドの中心地で、AIは分かれる存在になっています。映画業界の創造的本質を守るディズニーの脚本家や俳優たちは、AIが...

機械学習

「ディープランゲージモデルは、コンテキストから次の単語を予測することを学ぶことで、ますます優れてきていますこれが本当に人間の脳が行っていることなのでしょうか?」

ディープラーニングは、テキスト生成、翻訳、および補完の分野で最近大きな進歩を遂げています。周囲の文脈から単語を予測す...

機械学習

Mozilla Common Voiceでの音声言語認識-第II部:モデル

これはMozilla Common Voiceデータセットに基づく音声認識に関する2番目の記事です最初の部分ではデータの選択と最適な埋め込...

データサイエンス

「2023年の人工知能(AI)と機械学習に関連するサブレディットコミュニティ15選」

人工知能(AI)と機械学習の世界では、最新のトレンド、ブレイクスルー、議論について最新情報を得ることが重要です。インタ...

機械学習

「SIEM-SOAR インテグレーションによる次世代の脅威ハンティング技術」

NLP、AI、およびMLは、データ処理の効率化、自動化されたインシデント処理、コンプライアンス、および積極的な脅威検知を通じ...