자연어 처리는 컴퓨터와 인간(자연) 언어 간의 상호 작용과 관련된 컴퓨터 과학 및 언어학 분야입니다. 가장 간단한 형태로 NLP는 인간의 언어를 자동으로 이해하고 생성할 수 있는 알고리즘을 개발하는 것입니다. NLP의 장기적인 목표는 다양한 작업을 수행하는 데 사용할 수 있는 인간 언어의 계산 모델을 만드는 것입니다. 이러한 작업에는 자동 번역, 요약, 질문 답변, 정보 추출 등이 포함됩니다. NLP 연구는 언어학, 인지과학, 인공지능, 컴퓨터 과학 등 분야의 연구자들이 참여하는 고도로 학제간 연구입니다.
자연어 처리에는 규칙 기반 방법, 통계 방법, 신경 계산 방법 등 다양한 방법이 사용됩니다. 규칙 기반 방법은 일반적으로 NLP 전문가가 직접 작성한 규칙을 기반으로 합니다. 이러한 방법은 특정 작업에 매우 효과적일 수 있지만 범위가 제한되고 유지 관리에 많은 노력이 필요한 경우가 많습니다. 통계적 방법은 계산 모델을 훈련하기 위해 대량의 데이터를 사용하는 것을 기반으로 합니다. 그런 다음 이러한 모델을 사용하여 다양한 NLP 작업을 자동으로 수행할 수 있습니다. 신경망은 NLP 작업에 특히 적합한 일종의 기계 학습 알고리즘입니다. 신경망은 기계 번역 및 분류와 같은 작업을 위한 최첨단 모델을 만드는 데 사용되었습니다.
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
).
이 필드의 작업은 파일에서 설명과 레이블을 읽고 설명과 레이블이 하나의 데이터 샘플로 포함된 데이터를 생성하는 것입니다. 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개 이상의 예시가 있어야 합니다. 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
수업으로 돌아왔습니다. 예제를 로드하고 입력을 분류하는 두 가지 방법을 추가해야 합니다.
첫 번째는 간단합니다 co:here
cohere
의 추가 메소드인 cohere.classify.Example
을 사용하여 cohere 예제 목록을 생성해야 합니다.
def list_of_examples ( self ):
for e in examples ():
self . examples . append ( Example ( text = e [ 0 ], label = e [ 1 ]))
두 번째 방법은 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 키와 예측할 텍스트에 대해 두 개의 텍스트 입력이 필요합니다.
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의 데이터 과학 인턴