テキスト エンベッダーは、テキストのベクトル表現を作成するために使用される機械学習タスクです。このベクトルは、機械学習アルゴリズムへの入力として使用できます。テキスト埋め込みの目的は、機械学習に適した方法でテキストの意味を捉えることです。
テキスト埋め込みを作成するにはさまざまな方法がありますが、最も一般的なのはニューラル ネットワークを使用することです。ニューラル ネットワークは、複雑な関係を学習するのに優れた機械学習アルゴリズムです。ニューラル ネットワークへの入力はベクトルであり、出力も同じサイズのベクトルです。ニューラル ネットワークは、入力と出力の間の関係を把握する方法で、入力ベクトルを出力ベクトルにマッピングする方法を学習します。
テキスト埋め込みを作成するには、まずニューラル ネットワークを大規模なテキスト コーパスでトレーニングします。訓練データは文の集合であり、各文はベクトルとして表現されます。ベクトルは、文内の単語の単語ベクトルを取得し、それらを合計することによって作成されます。次に、ニューラル ネットワークは、文ベクトルを固定ベクトル サイズにマッピングするようにトレーニングされます。
ニューラル ネットワークがトレーニングされると、新しいテキストのテキスト埋め込みを作成するために使用できます。新しいテキストはまずベクトルとして表され、次にニューラル ネットワークを使用してベクトルが固定ベクトル サイズにマッピングされます。その結果、テキストの意味を捉えたテキスト埋め込みが作成されます。
テキストの埋め込みは、さまざまな機械学習タスクに使用できます。たとえば、テキストの分類に使用される機械学習アルゴリズムのパフォーマンスを向上させるために使用できます。テキストの埋め込みを使用して、類似したテキストの部分を検索したり、テキストをクラスター化することもできます。
テキスト埋め込みを作成するにはさまざまな方法があり、どの方法を選択するかはアプリケーションによって異なります。ただし、ニューラル ネットワークは、テキスト埋め込みを作成するための強力で広く使用されている方法です。
Co:here は、テキストを生成、埋め込み、分類できる強力なニューラル ネットワークです。このチュートリアルでは、Co:here を使用して説明を埋め込みます。 Co:hereを使用するには、Co:hereでアカウントを作成し、APIキーを取得する必要があります。
Pythonでプログラミングするので、 pip
でcohere
ライブラリをインストールする必要があります
pip install cohere
まず、 cohere.Client
実装する必要があります。 Client の引数には、以前に生成した API キーとバージョン2021-11-08
を指定する必要があります。 CoHere
クラスを作成します。これは次のステップで役立ちます。
class CoHere :
def __init__ ( self , api_key ):
self . co = cohere . Client ( f' { api_key } ' , '2021-11-08' )
self . examples = []
各ニューラル ネットワークの主要部分はデータセットです。このチュートリアルでは、10 クラスの 1000 個の記述を含むデータセットを使用します。同じものを使用したい場合は、ここからダウンロードできます。
ダウンロードされたデータセットには 10 個のフォルダーがあり、各フォルダーには 100 files.txt
と説明が含まれています。ファイル名は説明のラベルです (例: sport_3.txt
。
Random Forest
とCo:here Classifier
比較するため、2 つの方法でデータを準備する必要があります。 Random Forest
の場合はCo:here Embedder
使用します。このチュートリアルではこれに焦点を当てます。 Cohere 分類子にはサンプルが必要です。各サンプルはリスト[description, label]
として設計する必要があり、前のチュートリアル (ここ) でそれを行いました。
そのためには、最初にすべてのデータをロードする必要があります。関数load_examples
を作成します。この関数では、3 つの外部ライブラリを使用します。
os.path
て、データのあるフォルダーに移動します。コードは、Python のfile.py
というパスで実行されます。これは内部ライブラリなので、インストールする必要はありません。
numpy
このライブラリは配列を操作するのに便利です。このチュートリアルでは、これを使用して乱数を生成します。このライブラリは pip pip install numpy
でインストールする必要があります。
glob
、すべてのファイルとフォルダー名を読み取るのに役立ちます。これは外部ライブラリであるため、インストールが必要です - pip install glob
。
ダウンロードしたデータセットはdata
フォルダーに抽出する必要があります。 os.path.join
により、フォルダーのユニバーサル パスを取得できます。
folders_path = os . path . join ( 'data' , '*' )
Windows では、戻り値はdata*
と同じです。
次に、 glob
メソッドを使用してフォルダーのすべての名前を取得します。
folders_name = glob ( folders_path )
folders_name
は、フォルダーのウィンドウ パスを含むリストです。このチュートリアルでは、これらはラベルの名前です。
[ 'data \ business' , 'data \ entertainment' , 'data \ food' , 'data \ graphics' , 'data \ historical' , 'data \ medical' , 'data \ politics' , 'data \ space' , 'data \ sport' , 'data \ technologie' ]
Co:here
トレーニング データセットのサイズは 50 サンプルを超えることはできず、各クラスには少なくとも 5 つのサンプルが必要ですが、 Random Forest
の場合は 1000 サンプルを使用できます。ループfor
使用すると、各ファイルの名前を取得できます。関数全体は次のようになります。
import os . path
from glob import glob
import numpy as np
def load_examples ( no_of_ex ):
examples_path = []
folders_path = os . path . join ( 'data' , '*' )
folders_name = glob ( folders_path )
for folder in folders_name :
files_path = os . path . join ( folder , '*' )
files_name = glob ( files_path )
for i in range ( no_of_ex // len ( folders_name )):
random_example = np . random . randint ( 0 , len ( files_name ))
examples_path . append ( files_name [ random_example ])
return examples_path
最後のループでは、各ラベルの N パスをランダムに取得し、それらを新しいリストexamples_path
に追加します。
次に、トレーニング セットを作成する必要があります。これを行うには、 load_examples()
を使用してサンプルをロードします。各パスにはクラスの名前があり、それを使用してサンプルを作成します。説明はファイルから読み取る必要があり、長さを長くすることはできないため、このチュートリアルでは長さは 100 になります。 texts
をリストするには、 [descroption, class_name]
のリストが追加されます。したがって、戻り値はそのリストです。
def examples ( no_of_ex ):
texts = []
examples_path = load_examples ( no_of_ex )
for path in examples_path :
class_name = path . split ( os . sep )[ 1 ]
with open ( path , 'r' , encoding = "utf8" ) as file :
text = file . read ()[: 100 ]
texts . append ([ text , class_name ])
return texts
CoHere
クラスに戻ります。例を埋め込むメソッドを 1 つ追加する必要があります。
2 番目のcohere
方法は、テキストを埋め込むことです。このメソッドには次のような引数があります。
モデルのmodel
サイズ。
texts
埋め込むテキストのリスト。
テキストが使用可能なトークンより長い場合はtruncate
。テキストのどの部分をLEFT
、 RIGHT
、またはNONE
として取得する必要があります。
それらはすべてここで見つけることができます。
このチュートリアルでは、 cohere
メソッドはCoHere
クラスのメソッドとして実装されます。
def embed ( self , no_of_ex ):
# as a good developer we should split the dataset.
data = pd . DataFrame ( examples ( no_of_ex ))
self . X_train , self . X_test , self . y_train , self . y_test = train_test_split (
list ( data [ 0 ]), list ( data [ 1 ]), test_size = 0.2 , random_state = 0 )
# in the next two lines we create a numeric form of X_train data
self . X_train_embeded = self . co . embed ( texts = X_train ,
model = "large" ,
truncate = "LEFT" ). embeddings
self . X_test_embeded = self . co . embed ( texts = X_test ,
model = "large" ,
truncate = "LEFT" ). embeddings
X_train_embeded
次のような数値の配列になります。
[ 386, 0.39653537, -0.409076, 0.5956299, -0.06624506, 2.0539167, 0.7133603,...
2 つの尤度表示を比較するアプリケーションを作成するには、 Stramlit
使用します。これは簡単で非常に便利なライブラリです。
インストール
pip install streamlit
co:here
API キーのテキスト入力が必要になります。
streamlit のドキュメントには次のメソッドがあります。
st.header()
アプリにヘッダーを作成します
st.test_input()
テキストリクエストを送信します
st.button()
ボタンを作成する
st.write()
使用して cohere モデルの結果を表示します。
st.progress()
進行状況バーを表示します
st.column()
でアプリを分割する
st . header ( "Co:here Text Classifier vs Random Forest" )
api_key = st . text_input ( "API Key:" , type = "password" )
cohere = CoHere ( api_key )
cohere . list_of_examples ( 50 ) # number of examples for Cohere classifier
# showed in the previous tutorial
cohere . embed ( 1000 ) # number of examples for random forest
# initialization of random forest with sklearn library
forest = RandomForestClassifier ( max_depth = 10 , random_state = 0 )
col1 , col2 = st . columns ( 2 )
if col1 . button ( "Classify" ):
# training process of random forest, to do it we use embedded text.
forest . fit ( cohere . X_train_embeded , cohere . y_train )
# prediction process of random forest
predict = forest . predict_proba ( np . array ( cohere . X_test_embeded [ 0 ]). reshape ( 1 , - 1 ))[ 0 ]
here = cohere . classify ([ cohere . X_test [ 0 ]])[ 0 ] # prediction process of cohere classifier
col2 . success ( f"Correct prediction: { cohere . y_test [ 0 ] } " ) # display original label
col1 , col2 = st . columns ( 2 )
col1 . header ( "Co:here classify" ) # predictions for cohere
for con in here . confidence :
col1 . write ( f" { con . label } : { np . round ( con . confidence * 100 , 2 ) } %" )
col1 . progress ( con . confidence )
col2 . header ( "Random Forest" ) # predictions for random forest
for con , pred in zip ( here . confidence , predict ):
col2 . write ( f" { con . label } : { np . round ( pred * 100 , 2 ) } %" )
col2 . progress ( pred )
streamlit アプリを実行するには、コマンドを使用します
streamlit run name_of_your_file . py
作成したアプリはこんな感じ
テキストの埋め込みは、機械学習アルゴリズムのパフォーマンスを向上させるために使用できる強力なツールです。ニューラル ネットワークは、テキスト埋め込みを作成するために広く使用されている効果的な方法です。テキストの埋め込みは、テキストの分類、テキストの類似性、テキストのクラスタリングなどのタスクに使用できます。
このチュートリアルでは、 Random Forest
とCo:here Classifier
を比較しますが、 Co:here Embedder
の可能性は非常に大きいです。それを使ってたくさんのものを構築できます。
今後のチュートリアルにご期待ください。このコードのリポジトリはここで確認できます。
ありがとう! - Adrian Banachowicz 氏、New Native のデータ サイエンス インターン