텍스트 임베더는 텍스트 조각의 벡터 표현을 만드는 데 사용되는 기계 학습 작업입니다. 그런 다음 이 벡터를 기계 학습 알고리즘의 입력으로 사용할 수 있습니다. 텍스트 임베딩의 목표는 기계 학습에 적합한 방식으로 텍스트의 의미를 캡처하는 것입니다.
텍스트 임베딩을 만드는 방법에는 여러 가지가 있지만 가장 일반적인 방법은 신경망을 사용하는 것입니다. 신경망은 복잡한 관계를 학습하는 데 매우 효과적인 기계 학습 알고리즘입니다. 신경망에 대한 입력은 벡터이고 출력은 동일한 크기의 벡터입니다. 신경망은 입력과 출력 간의 관계를 포착하는 방식으로 입력 벡터를 출력 벡터에 매핑하는 방법을 학습합니다.
텍스트 임베딩을 생성하기 위해 신경망은 먼저 대규모 텍스트 모음에서 훈련됩니다. 훈련 데이터는 문장의 집합이며, 각 문장은 벡터로 표현됩니다. 벡터는 문장에 있는 단어의 단어 벡터를 가져와서 합산하여 생성됩니다. 그런 다음 신경망은 문장 벡터를 고정된 벡터 크기로 매핑하도록 훈련됩니다.
신경망이 훈련되면 이를 사용하여 새로운 텍스트 조각에 대한 텍스트 임베딩을 생성할 수 있습니다. 새 텍스트는 먼저 벡터로 표현된 다음 신경망을 사용하여 벡터를 고정된 벡터 크기로 매핑합니다. 그 결과 텍스트의 의미를 포착하는 텍스트 임베딩이 생성됩니다.
텍스트 임베딩은 다양한 기계 학습 작업에 사용될 수 있습니다. 예를 들어 텍스트를 분류하는 데 사용되는 기계 학습 알고리즘의 성능을 향상시키는 데 사용할 수 있습니다. 텍스트 임베딩을 사용하면 유사한 텍스트 조각을 찾거나 텍스트를 함께 클러스터링할 수도 있습니다.
텍스트 임베딩을 생성하는 방법은 다양하며, 방법 선택은 애플리케이션에 따라 달라집니다. 그러나 신경망은 텍스트 임베딩을 생성하는 데 강력하고 널리 사용되는 방법입니다.
Co:here는 텍스트를 생성, 삽입 및 분류할 수 있는 강력한 신경망입니다. 이 튜토리얼에서는 Co:here를 사용하여 설명을 삽입합니다. Co:here를 사용하려면 Co:here에 계정을 만들고 API 키를 받아야 합니다.
우리는 Python으로 프로그래밍할 것이므로 pip
로 cohere
라이브러리를 설치해야 합니다.
pip install cohere
먼저 cohere.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
와 비교할 것이므로 두 가지 방법으로 데이터를 준비해야 합니다. Random Forest
의 경우 Co:here Embedder
사용하며 이 튜토리얼에서는 이에 중점을 둘 것입니다. Cohere 분류기에는 샘플이 필요하며, 각 샘플은 목록 [description, label]
으로 설계되어야 하며 이전 튜토리얼(여기)에서 수행했습니다.
이를 위해서는 처음에는 모든 데이터를 로드해야 합니다. load_examples
함수를 만듭니다. 이 함수에서는 세 가지 외부 라이브러리를 사용합니다.
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에서 return은 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
수업으로 돌아왔습니다. 예제를 삽입하려면 한 가지 방법을 추가해야 합니다.
두 번째 cohere
방법은 텍스트를 삽입하는 것입니다. 이 메소드에는 다음과 같은 서버 인수가 있습니다.
모델의 model
크기.
texts
삽입할 텍스트 목록입니다.
텍스트가 사용 가능한 토큰보다 긴 경우 텍스트의 어느 부분을 LEFT
, RIGHT
또는 NONE
으로 가져와야 하는지 truncate
.
여기에서 모두 찾을 수 있습니다.
이 튜토리얼에서는 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,...
두 가지 가능성 표시를 비교하는 애플리케이션을 만들기 위해 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의 데이터 과학 인턴