И семь идей для стартапов, которые помогут вам начать!
Одно изображение стоит тысячи слов.А что, если бы мы могли обобщить документ из 1000 слов в одной диаграмме?
Диаграммы и информационные панели используются для моделирования финансовых и числовых данных. Они являются предпочтительным инструментом для аналитиков и инвесторов для анализа, общения и разработки стратегии. Но еще несколько лет назад использование диаграмм для визуализации человеческого языка было невозможно. Сегодня встраивание слов делает текстовые документы более быстрыми для обработки, более простыми для агрегирования и более прибыльными для анализа.
Вложения слов — это числовые представления значения, они являются результатом давней традиции исследований в области обработки естественного языка, объединенных с последними достижениями в области глубокого обучения. Представление значений с помощью векторов позволяет ученым выполнять математические операции со словами так же, как с числами. К ним относятся сложение, вычитание и сравнение, используемые в таких приложениях, как поисковая система Google. Мое эссе Что такое встраивание слов? представляет собой хорошее углубленное введение в тему.
Визуализация встраивания слов начинается с преобразования текста в векторы. Затем, уменьшив его размерность, построить их. В этой статье рассматриваются все четыре этапа построения встраивания слов. Также предоставляется пример кода на TypeScript с использованием TensorflowJS, React и recharts. Я проиллюстрирую это, подойдя к проблеме классификации тем. И закончите, поделившись 7 идеями для стартапов, которые вы можете реализовать с помощью этой технологии.
1. Токенизируйте свой набор данных
Все начинается с чистых данных. Универсальный кодировщик предложений TensorflowJS преобразует слова, предложения и даже короткие абзацы в векторы. Но если ваш набор данных не соответствует этому формату, вы можете использовать регулярное выражение для его сегментации:
// Split a text by words. const wordTokenizer = (text:string) => text.match(/(\b[^ $]+\b)/g) // Split it by sentences. const sentenceTokenizer = (t:string) => t.match( /[^.!?]+[.!?]+/g ) // Split by paragraphs. const paragraphTokenizer = (text:string) => text.split("\n")
2. Смоделируйте его с помощью TensorflowJS
Получить вложения слов легко. Начните с загрузки обеих зависимостей: Tensorflow и модели кодировщика предложений. Затем загрузите модель; это вызовет сетевой запрос и займет пару секунд. Наконец, передайте модель токенизированный набор данных в виде массива строк и преобразуйте выходные данные в массив JavaScript.
import { load } from '@tensorflow-models/universal-sentence-encoder'import '@tensorflow/tfjs' // Turn an array of texts into word-embeddings. const vectorize = (text:string[]) => { const model = await load() const tensors = await model.embed(text) const embeddings = await tensor.array() return embeddings }
3. Уменьшение размерности
Выходные данные TensorflowJS представляют собой 512-мерные векторы; попытка заговорить их - химерическое усилие. К счастью, существует несколько методов уменьшения размерности. Распространенным, эффективным и простым методом является Анализ главных компонентов.
Модуль npm ml-pca — отличный легкий выбор для сжатия векторов в Typescript. Чтобы использовать его, мы сначала создаем новую модель на основе выходных данных TensorflowJS и используем модель для прогнозирования двумерных векторов.
import { PCA } from 'ml-pca' // Reduce the dimensionality of word embeddings. reduceDimensionality = (embeddings:number[][]) => { const pca = new PCA(embeddings) const matrix = pca.predict([embeddings], {nComponents:2}) const reducedVectors = matrix.to2DArray()[0] return reducedVectors }
4. Нарисуйте его с помощью ReactJS
Последний шаг — построить его с помощью ReactJS и recharts. Мы собираемся начать с сопоставления нашего токенизированного набора данных с уменьшенными векторами. Затем импортируйте точечную диаграмму и добавьте соответствующие цвета, свойства и стиль, чтобы превратить ее в компонент React. Наконец, выберите заголовок: не стоит недооценивать этот шаг. Убедитесь, что четко понимаете, что вы хотите передать сюжетом.
import { ScatterChart, Scatter, Tooltip } from 'recharts' interface iData {name:string, x:number, y:number} interface iEmbeddingsPlot {title:string, data:iData[]} const EmbeddingsPlot = ({title, data}:iEmbeddingsPlot) => <div> <h1> { title } </h1> <ScatterChart data={data}> <Tooltip/> <RechartScatter data={data} fill={colors[i]} /> </ScatterChart> </div>
Пример: визуализация документа по теме
Чтобы проиллюстрировать процедуру, рассмотрим отображение массива документов, помеченных по темам. Вот некоторые из проблем, с которыми мы можем столкнуться:
- Размер документа слишком велик для универсального кодировщика предложений.
- Количество тем слишком велико, чтобы присвоить каждой из них уникальный цвет на диаграмме.
- Нам нужно использовать инструмент для классификации немаркированных документов.
Шей Палахи написал выдающееся 39-минутное руководство для обзора различных технологий, используемых для встраивания документов. Для приведенного выше примера я выбрал более прагматичный подход, разбивая тексты по предложениям и усредняя их, чтобы найти окончательное встраивание документа.
Я использовал аналогичную процедуру, чтобы нарисовать каждую тему на диаграмме. Берем среднее значение вектора для каждого документа, соответствующего одной и той же теме. Усреднение — отличный пример ценности, полученной в результате применения математических операций к текстовым данным.
Последний шаг: прогнозирование темы неразмеченных документов. Мы можем применить алгоритм машинного обучения, такой как машина опорных векторов (SVM), обучить нейронную сеть или сделать географический запрос, чтобы найти ближайшую тему в двумерное векторное пространство. Для получения дополнительной информации по этому вопросу, пожалуйста, обратитесь к моему руководству: Как создать механизм текстовых рекомендаций.
БОНУС: 7 идей для стартапов на основе встраивания Word
- Kluster: технология агрегирования отзывов о продуктах.
- Качественные лиды: автоматически классифицируйте потенциальных клиентов на основе языка их веб-сайта.
- HR-Rec: система рекомендаций для поиска лучших потенциальных клиентов.
- Туристический: сгруппируйте рестораны, отели и направления на основе опыта, а не местоположения.
- ReadFlix: находите лучший контент для чтения каждый вечер после работы.
- Healtty: информационная панель для мониторинга корпоративного общения и организационной культуры.
- Соответствие: присоединяйтесь к людям на основе идей, а не внешности.
У каждой из этих идей одна и та же концепция: анализ текстовых данных и создание визуализаций для облегчения принятия решений. Я буду рад расширить любую из этих идей или связаться со мной в LinkedIn, чтобы обсудить MVP. Как вы думаете, какая идея имеет наибольший потенциал?
«Всякий раз, когда вы видите успешный бизнес, кто-то однажды принял смелое решение». ― Питер Ф. Друкер
Спасибо, что прочитали. Надеюсь, вам понравилась история! Чтобы получить дополнительные материалы по обработке естественного языка, рассмотрите вариант подписаться на меня. Я хотел бы услышать ваше мнение в комментариях, и ваши хлопки будут очень признательны. 🙏