1 строка для встраивания слов ELECTRA с NLU в Python

Включая часть речи, распознавание именованных сущностей, классификацию эмоций в одной строке! С графиками Bonus t-SNE!

0. Введение

0.1 Что такое НЛУ?

Библиотека NLU John Snow Labs дает вам более 1000 моделей НЛП и более 100 встраиваний слов на 300+ языках, а также бесконечные возможности для изучения ваших данных и получения информации.

В этом руководстве мы расскажем, как получить мощные вложения Electra с помощью одной строки кода NLU, а затем как визуализировать их с помощью t-SNE. Сравним сравнение настроений с сарказмом и эмоциями!

0.2 Что такое t-SNE?

T-SNE — это инструмент для визуализации многомерных данных. Он преобразует сходства между точками данных в совместные вероятности и пытается минимизировать расхождение Кульбака-Лейблера между совместными вероятностями низкоразмерного встраивания и данных высокой размерности. t-SNE имеет функцию стоимости, которая не является выпуклой, т.е. при разных инициализациях мы можем получить разные результаты.

0.3 Что такое Электра?

Методы предварительного обучения моделированию языка с маской (MLM), такие как BERT, искажают ввод, заменяя некоторые токены на [MASK], а затем обучают модель для восстановления исходных токенов. Хотя они дают хорошие результаты при передаче на последующие задачи NLP, для их эффективности обычно требуется большой объем вычислений. В качестве альтернативы предлагается более эффективная задача предварительного обучения, называемая обнаружением замененного токена. Вместо того, чтобы маскировать ввод, подход искажает его, заменяя некоторые токены правдоподобными альтернативами, отобранными из небольшой сети генератора. Затем, вместо обучения модели, которая прогнозирует исходные идентификаторы поврежденных токенов, Electra обучает дискриминативную модель, которая прогнозирует, был ли каждый токен в поврежденных входных данных заменен образцом генератора или нет. Тщательные эксперименты демонстрируют, что эта новая задача предварительного обучения более эффективна, чем MLM, потому что задача определяется для всех входных токенов, а не только для небольшого подмножества, которое было замаскировано. В результате контекстные представления научились этому подходу существенно превосходить те, которые были изучены BERT, при том же размере модели, данных и вычислениях. Прирост особенно велик для небольших моделей; например, модель была обучена на одном графическом процессоре в течение 4 дней, что превосходит GPT (обученная с использованием 30-кратного увеличения вычислительной мощности) на тесте понимания естественного языка GLUE. Этот подход также хорошо работает в масштабе, где он сопоставим с RoBERTa и XLNet, используя менее 1/4 их вычислений, и превосходит их при использовании того же объема вычислений.

См. также:  RuntimeError: цикл событий закрывается при попытке выполнить запрос https с помощью aiohttp

1. Импортируйте NLU, загрузите Electra и вставьте образец строки в 1 строку.

nlu.load('electra').predict('He was suprised by the diversity of NLU')

2. Загрузите больший набор данных.

Следующий фрагмент загрузит набор данных сарказма Reddit и загрузит его в фрейм данных Pandas.

import pandas as pd
# Download the dataset
! wget -N https://s3.amazonaws.com/auxdata.johnsnowlabs.com/public/resources/en/sarcasm/train-balanced-sarcasm.csv -P /tmp
# Load dataset to Pandasdf = pd.read_csv('/tmp/train-balanced-sarcasm.csv')
df

3. Сделайте прогноз на основе набора данных, а также добавьте часть классификаторов речи, эмоций и настроений.

Поскольку добавить дополнительные классификаторы и получить их прогнозы в NLU так просто, мы расширим наш конвейер NLU классификаторами POS, Emotion и Sentiment, которые позволяют достичь результатов, близких к современным.

Эти дополнительные прогнозы также пригодятся при построении наших результатов.
Мы ограничиваем себя частью набора данных, потому что наша оперативная память, к сожалению, ограничена, и мы не работаем в кластере. С Spark NLP вы можете взять точно такие же модели и запустить их в масштабируемом режиме внутри кластера Spark.

pipe = nlu.load('pos sentiment emotion electra')
df['text'] = df['comment']
# NLU to gives us one row per embedded word by specifying the output level
predictions = pipe.predict(df[['text','label']], output_level='token')
predictions

4. Эмоциональные сюжеты.

Мы можем быстро построить распределение предсказанных эмоций с помощью функций панд во фрейме данных.

# Some Tokens are None which we must drop first
predictions.dropna(how='any', inplace=True)
# Some sentiment are 'na' which we must drop first
predictions = predictions[predictions.emotion!= 'na']
predictions.emotion.value_counts().plot.bar(title='Dataset emotion distribution')

5. Подготовьте данные для T-SNE.

Подготавливаем данные для алгоритма T-SNE, собирая их в матрицу для TSNE.

import numpy as np
mat = np.matrix([x for x in predictions.electra_embeddings])

6. Установите T-SNE.

Наконец, мы подбираем алгоритм T-SNE и получаем двумерное представление наших вложений слов Electra.

from sklearn.manifold import TSNE
model = TSNE(n_components=2)
low_dim_data = model.fit_transform(mat)
print('Lower dim data has shape',low_dim_data.shape)

7. Постройте вложения слов ELECTRA, раскрашенные частью речевого тега.

Следующие ниже графики показывают точечные диаграммы для двумерного представления вложений слов. Каждая точка представляет слово в предложении, а цвет представляет класс POS, к которому принадлежит слово. Tsne_df = pd.DataFrame (low_dim_data, predictions.pos) ax = sns.scatterplot (data = tsne_df, x = 0, y = 1, hue = tsne_df.index) ax.set_title (‘Вложения T-SNE ELECTRA, окрашенные частью речевого тега’)

tsne_df =  pd.DataFrame(low_dim_data, predictions.pos)
ax = sns.scatterplot(data=tsne_df, x=0, y=1, hue=tsne_df.index)
ax.set_title('T-SNE ELECTRA Embeddings, colored by Part of Speech Tag')

См. также:  Сделать скролл-индикатор в Nuxt.js

8. Постройте вложения Electra Word, раскрашенные эмоциями.

Следующие ниже графики показывают точечные диаграммы для двумерного представления вложений слов. Каждая точка представляет собой слово из предложения, которое было отнесено к определенной эмоции, которая отражается в цветах.

tsne_df =  pd.DataFrame(low_dim_data, predictions.emotion)
ax =  sns.scatterplot(data=tsne_df, x=0, y=1, hue=tsne_df.index)
ax.set_title('T-SNE ElECTRA Embeddings, colored by Emotion')

9. Постройте вложение слов Electra, раскрашенное сарказмом.

Следующие ниже графики показывают точечные диаграммы для двумерного представления вложений слов. Каждая точка представляет собой слово из предложения, которое было классифицировано как саркастическое или нет, что отражается в цветах.

tsne_df =  pd.DataFrame(low_dim_data, predictions.label.replace({1:'sarcasm',0:'normal'}))
tsne_df.columns=['x','y']
ax = sns.scatterplot(data=tsne_df, x='x', y='y', hue=tsne_df.index)
ax.set_title('T-SNE ELECTRA Embeddings, colored by Sarcasm label')

10. Есть намного больше словарных вложений!

Чтобы просмотреть все вложения слов, введите следующую команду

nlu.print_all_model_kinds_for_action('embed')

Другие статьи о NLU Medium

NLU Talks

Подробнее о NLU

См. также:  Discord.py Ошибка при попытке редактирования встраивания через X секунд

Ссылка на блокнот

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: