自然言語処理は、コンピューターと人間 (自然) 言語の間の相互作用に関係するコンピューターサイエンスおよび言語学の分野です。最も単純な形では、NLP は人間の言語を自動的に理解して生成できるアルゴリズムを開発することです。 NLP の長期的な目標は、さまざまなタスクの実行に使用できる人間の言語の計算モデルを作成することです。これらのタスクには、自動翻訳、要約、質問応答、情報抽出などが含まれます。 NLP 研究は高度に学際的であり、言語学、認知科学、人工知能、コンピューター サイエンスなどの分野の研究者が参加しています。
自然言語処理では、ルールベースの方法、統計的方法、ニューラル計算による方法など、さまざまな方法が使用されます。ルールベースのメソッドは通常、NLP 専門家によって作成された手作りのルールに基づいています。これらの方法は特定のタスクには非常に効果的ですが、多くの場合、その範囲は限られており、維持するには多大な労力が必要です。統計的手法は、大量のデータを使用して計算モデルをトレーニングすることに基づいています。これらのモデルを使用して、さまざまな NLP タスクを自動的に実行できます。ニューラル ネットワークは、NLP タスクに特に適した機械学習アルゴリズムの一種です。ニューラル ネットワークは、機械翻訳や分類などのタスク用の最先端のモデルを作成するために使用されてきました。
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
。
この分野では、ファイルから説明とラベルを読み取り、データの 1 つのサンプルとして説明とラベルを含むデータを作成することがタスクとなります。 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 つの例が必要です。ループfor
使用すると、各ファイルの名前を取得できます。関数全体は次のようになります。
import os . path
from glob import glob
import numpy as np
def load_examples ():
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 ( 50 // len ( folders_name )):
random_example = np . random . randint ( 0 , len ( files_name ))
examples_path . append ( files_name [ random_example ])
return examples_path
最後のループでは、各ラベルの 5 つのパスをランダムに取得し、それらを新しいリストexamples_path
に追加します。
次に、トレーニング セットを作成する必要があります。これを行うには、 load_examples()
を使用してサンプルをロードします。各パスにはクラスの名前があり、それを使用してサンプルを作成します。説明はファイルから読み取る必要があり、長さを長くすることはできないため、このチュートリアルでは長さは 100 になります。 texts
をリストするには、 [descroption, class_name]
のリストが追加されます。したがって、戻り値はそのリストです。
def examples ():
texts = []
examples_path = load_examples ()
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
クラスに戻ります。例をロードする方法と入力を分類する方法という 2 つのメソッドを追加する必要があります。
1つ目は単純で、追加のcohere
メソッドcohere.classify.Example
を使用して、例のco:here
リストを作成する必要があります。
def list_of_examples ( self ):
for e in examples ():
self . examples . append ( Example ( text = e [ 0 ], label = e [ 1 ]))
2 番目の方法は、メソッドをcohere
から分類することです。このメソッドには次のような引数があります。
モデルのmodel
サイズ。
分類するデータのリストinputs
。
examples
例を含むトレーニング セットのリスト
それらはすべてここで見つけることができます。
このチュートリアルでは、 cohere
メソッドはCoHere
クラスのメソッドとして実装されます。このメソッドの引数は、予測する説明のリストです。
def classify ( self , inputs ):
return self . co . classify (
model = 'medium' ,
inputs = inputs ,
examples = self . examples
). classifications
戻り値は、 input
、入力のprediction
、およびconfidence
のリストです。 Confidence
各クラスの尤度リストです。
cohere . Classification {
input :
prediction :
confidence : []
}
CoHere
クラス import cohere
from loadExamples import examples
from cohere . classify import Example
class CoHere :
def __init__ ( self , api_key ):
self . co = cohere . Client ( f' { api_key } ' , '2021-11-08' )
self . examples = []
def list_of_examples ( self ):
for e in examples ():
self . examples . append ( Example ( text = e [ 0 ], label = e [ 1 ]))
def classify ( self , inputs ):
return self . co . classify (
model = 'medium' ,
taskDescription = '' ,
outputIndicator = '' ,
inputs = inputs ,
examples = self . examples
). classifications
テキスト入力ボックスと可能性を表示するアプリケーションを作成するには、 Stramlit
使用します。これは簡単で非常に便利なライブラリです。
インストール
pip install streamlit
co:here
API キーと予測するテキストの 2 つのテキスト入力が必要になります。
streamlit のドキュメントには次のメソッドがあります。
st.header()
アプリにヘッダーを作成します
st.test_input()
テキストリクエストを送信します
st.button()
ボタンを作成する
st.write()
使用して cohere モデルの結果を表示します。
st.progress()
進行状況バーを表示します
st.column()
でアプリを分割する
st . header ( "Your personal text classifier - Co:here application" )
api_key = st . text_input ( "API Key:" , type = "password" ) #text box for API key
description = [ st . text_input ( "Description:" )] #text box for text to predict
cohere = CoHere ( api_key ) #initialization CoHere
cohere . list_of_examples () #loading training set
if st . button ( "Classify" ):
here = cohere . classify ( description )[ 0 ] #prediction
col1 , col2 = st . columns ( 2 )
for no , con in enumerate ( here . confidence ): #display likelihood for each label
if no % 2 == 0 : # in two columns
col1 . write ( f" { con . label } : { np . round ( con . confidence * 100 , 2 ) } %" )
col1 . progress ( con . confidence )
else :
col2 . write ( f" { con . label } : { np . round ( con . confidence * 100 , 2 ) } %" )
col2 . progress ( con . confidence )
streamlit アプリを実行するには、コマンドを使用します
streamlit run name_of_your_file . py
作成したアプリはこんな感じ
Co:here モデルは、テキストの生成だけでなく分類にも使用できます。このチュートリアルでは、小さなデータセットを使用して短いテキストを分類できました。 10 クラスに対して 50 の例がありました。これは予測の可能性を高いレベルに保つのに十分でした。シナリオによっては大規模なデータセットを生成するのが難しい場合があるため、Co:here モデルはそれに対する優れたソリューションとなります。
今後のチュートリアルにご期待ください。
ありがとう! - Adrian Banachowicz 氏、New Native のデータ サイエンス インターン