И семь идей для стартапов, которые помогут вам начать!

Одно изображение стоит тысячи слов.А что, если бы мы могли обобщить документ из 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>

Пример: визуализация документа по теме

Чтобы проиллюстрировать процедуру, рассмотрим отображение массива документов, помеченных по темам. Вот некоторые из проблем, с которыми мы можем столкнуться:

  1. Размер документа слишком велик для универсального кодировщика предложений.
  2. Количество тем слишком велико, чтобы присвоить каждой из них уникальный цвет на диаграмме.
  3. Нам нужно использовать инструмент для классификации немаркированных документов.

Шей Палахи написал выдающееся 39-минутное руководство для обзора различных технологий, используемых для встраивания документов. Для приведенного выше примера я выбрал более прагматичный подход, разбивая тексты по предложениям и усредняя их, чтобы найти окончательное встраивание документа.

Я использовал аналогичную процедуру, чтобы нарисовать каждую тему на диаграмме. Берем среднее значение вектора для каждого документа, соответствующего одной и той же теме. Усреднение — отличный пример ценности, полученной в результате применения математических операций к текстовым данным.

Последний шаг: прогнозирование темы неразмеченных документов. Мы можем применить алгоритм машинного обучения, такой как машина опорных векторов (SVM), обучить нейронную сеть или сделать географический запрос, чтобы найти ближайшую тему в двумерное векторное пространство. Для получения дополнительной информации по этому вопросу, пожалуйста, обратитесь к моему руководству: Как создать механизм текстовых рекомендаций.

БОНУС: 7 идей для стартапов на основе встраивания Word

  1. Kluster: технология агрегирования отзывов о продуктах.
  2. Качественные лиды: автоматически классифицируйте потенциальных клиентов на основе языка их веб-сайта.
  3. HR-Rec: система рекомендаций для поиска лучших потенциальных клиентов.
  4. Туристический: сгруппируйте рестораны, отели и направления на основе опыта, а не местоположения.
  5. ReadFlix: находите лучший контент для чтения каждый вечер после работы.
  6. Healtty: информационная панель для мониторинга корпоративного общения и организационной культуры.
  7. Соответствие: присоединяйтесь к людям на основе идей, а не внешности.

У каждой из этих идей одна и та же концепция: анализ текстовых данных и создание визуализаций для облегчения принятия решений. Я буду рад расширить любую из этих идей или связаться со мной в LinkedIn, чтобы обсудить MVP. Как вы думаете, какая идея имеет наибольший потенциал?

«Всякий раз, когда вы видите успешный бизнес, кто-то однажды принял смелое решение». ― Питер Ф. Друкер

Спасибо, что прочитали. Надеюсь, вам понравилась история! Чтобы получить дополнительные материалы по обработке естественного языка, рассмотрите вариант подписаться на меня. Я хотел бы услышать ваше мнение в комментариях, и ваши хлопки будут очень признательны. 🙏