Средство внедрения текста — это задача машинного обучения, которая используется для создания векторного представления фрагмента текста. Затем этот вектор можно использовать в качестве входных данных для алгоритма машинного обучения. Цель внедрения текста — передать смысл текста способом, подходящим для машинного обучения.
Существует много разных способов создания вложений текста, но наиболее распространенным является использование нейронной сети. Нейронная сеть — это алгоритм машинного обучения, который очень хорошо справляется с изучением сложных отношений. Входные данные нейронной сети представляют собой вектор, а выходные данные — вектор того же размера. Нейронная сеть учится сопоставлять входные векторы с выходными векторами таким образом, чтобы фиксировать взаимосвязи между входными и выходными данными.
Чтобы создать встраивание текста, нейронная сеть сначала обучается на большом корпусе текста. Обучающие данные представляют собой набор предложений, каждое предложение представлено в виде вектора. Векторы создаются путем взятия векторов слов в предложении и их суммирования. Затем нейронную сеть обучают отображать векторы предложений в фиксированный векторный размер.
После обучения нейронной сети ее можно использовать для создания вложений текста для новых фрагментов текста. Новый текст сначала представляется в виде вектора, а затем нейронная сеть используется для сопоставления вектора с фиксированным векторным размером. Результатом является встраивание текста, отражающее смысл текста.
Встраивание текста можно использовать для различных задач машинного обучения. Например, их можно использовать для повышения производительности алгоритма машинного обучения, используемого для классификации текстов. Встраивание текста также можно использовать для поиска похожих фрагментов текста или для объединения текстов в группы.
Существует много разных способов создания вложений текста, и выбор метода будет зависеть от приложения. Однако нейронные сети являются мощным и широко используемым методом создания вложений текста.
Co: вот мощная нейронная сеть, которая может генерировать, внедрять и классифицировать текст. В этом уроке мы будем использовать Co:here для встраивания описаний. Чтобы использовать Co:here, вам необходимо создать учетную запись на Co:here и получить ключ API.
Мы будем программировать на Python, поэтому нам нужно установить библиотеку cohere
с помощью pip
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 = []
Основная часть каждой нейронной сети — это набор данных. В этом уроке я буду использовать набор данных, включающий 1000 описаний 10 классов. Если вы хотите использовать то же самое, вы можете скачать его здесь.
Загруженный набор данных имеет 10 папок, в каждой папке по 100 files.txt
с описаниями. Имя файлов представляет собой метку описания, например sport_3.txt
.
Мы будем сравнивать Random Forest
с Co:here Classifier
, поэтому нам придется подготовить данные двумя способами. Для Random Forest
мы будем использовать Co:here Embedder
, на этом мы сосредоточимся в этом уроке. Классификатор Cohere требует выборок, в которых каждая выборка должна быть оформлена в виде списка [description, label]
и я сделал это в своем предыдущем уроке (здесь).
Для этого вначале нам нужно загрузить все данные. Создаем функцию load_examples
. В этой функции мы будем использовать три внешние библиотеки:
os.path
для перехода в папку с данными. Код выполняется по пути, где находится file.py
Python. Это внутренняя библиотека, поэтому нам не нужно ее устанавливать.
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
. Нам осталось добавить один метод — для встраивания примеров.
Второй метод 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,...
Для создания приложения, которое будет сравнивать два отображения правдоподобия, мы будем использовать Stramlit
. Это простая и очень полезная библиотека.
Установка
pip install streamlit
Нам понадобится текстовый ввод для ключа API co:here
.
В документацииstreamlit мы можем найти методы:
st.header()
чтобы создать заголовок в нашем приложении.
st.test_input()
для отправки текстового запроса
st.button()
для создания кнопки
st.write()
для отображения результатов согласованной модели.
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
огромны. С его помощью можно построить много чего.
Следите за будущими уроками! Репозиторий этого кода можно проверить здесь.
Спасибо! - Адриан Банахович, стажер по науке о данных в New Native