Встраивание слов — это тип метода машинного обучения, который используется для представления слов в виде векторов. Это позволяет компьютерам понимать значение слов и их взаимоотношения друг с другом. Существует два основных типа встраивания слов: TTE и традиционные вложения.

TTE (встраивание токенов на основе преобразователя)

TTE обучаются на большом массиве текста с использованием архитектуры нейронной сети-трансформера. Это позволяет им улавливать более сложные отношения между словами, чем традиционные встраивания. TTE также контекстуализированы, то есть учитывают контекст, в котором используется слово. Это делает их более точными для задач, требующих понимания контекста слова, таких как вывод на естественном языке.

Пример:

Слово «король» можно представить в виде вектора ТТЕ со 100 измерениями. Каждое измерение вектора представляет собой отдельный аспект значения слова «король». Например, одно измерение может представлять концепцию королевской власти, другое измерение может представлять концепцию мужественности, а третье измерение может представлять концепцию власти.

Вектор TTE для слова «король» будет близок к векторам TTE для других слов, связанных с королевской властью, таких как «королева» и «принц». Он также был бы близок к векторам TTE для слов, связанных с мужским характером, таких как «мужчина» и «мальчик». И это было бы близко к векторам ТТЕ для слов, связанных с властью, таких как «босс» и «лидер».

Вот пример обучения модели TTE с помощью TensorFlow.js:

import * as tf from "@tensorflow/tfjs";

// Load the text data
const textData = tf.data.TextLineDataset("data/text.txt");

// Tokenize the text data
const tokenizer = new tf.TextTokenizer({
  numWords: 10000,
});
tokenizer.fit(textData);

// Create the TTE model
const model = tf.keras.Sequential({
  layers: [
    tf.keras.layers.Embedding(10000, 128),
    tf.keras.layers.LSTM(128),
    tf.keras.layers.Dense(100, activation: "softmax"),
  ],
});

// Train the TTE model
model.compile({
  optimizer: "adam",
  loss: "categorical_crossentropy",
  metrics: ["accuracy"],
});
model.fit(textData, epochs: 10);

// Save the TTE model
model.save("model.h5");

Этот код сначала загружает текстовые данные из файла data/text.txt. Затем он маркирует текстовые данные с помощью класса tf.TextTokenizer. Токенизатор преобразует каждое слово в текстовых данных в уникальный целочисленный идентификатор.

Далее код создает модель TTE. Модель TTE состоит из трех слоев:

  • Уровень внедрения, который преобразует целочисленные идентификаторы в 128-мерные векторы.
  • Уровень LSTM, который изучает долгосрочные зависимости в текстовых данных.
  • Плотный слой, который выводит распределение вероятностей по 100 классам.

Затем код обучает модель TTE на текстовых данных в течение 10 эпох. После обучения модели она сохраняется в файле model.h5.

Традиционные встраивания

Традиционные внедрения обучаются на меньшем корпусе текста с использованием более простой архитектуры нейронной сети. Это означает, что они не способны улавливать такие сложные отношения между словами, как TTE. Традиционные встраивания также статичны, а это означает, что они не учитывают контекст, в котором используется слово. Это делает их менее точными для задач, требующих понимания контекста слова.

Традиционный пример встраивания:

Слово «король» также можно представить как традиционный вектор вложения со 100 измерениями. Однако значение слова «король» не так хорошо представлено в традиционном векторе внедрения, как в векторе TTE. Это связано с тем, что традиционный вектор внедрения не обучается на большом корпусе текста и не учитывает контекст, в котором используется слово.

Традиционный вектор внедрения для слова «король» будет близок к традиционным векторам внедрения для других слов, похожих по написанию, таких как «королевский» и «королевство». Это также было бы близко к традиционным векторам внедрения слов, связанных с властью, таких как «авторитет» и «контроль».

Вот пример того, как использовать предварительно обученные традиционные внедрения с TensorFlow в Python:

import tensorflow as tf

# Load the pretrained embeddings
embeddings = tf.keras.models.load_model("https://tfhub.dev/google/tfjs-text/universal-sentence-encoder/4")

# Create a text classification model
model = tf.keras.Sequential([
  embeddings,
  tf.keras.layers.Dense(10, activation="softmax"),
])

# Train the text classification model
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
model.fit(textData, epochs: 10);

# Save the text classification model
model.save("model.h5");

Этот код сначала загружает предварительно обученные внедрения из TensorFlow Hub. Предварительно обученные внедрения представляют собой набор 100-мерных векторов, которые представляют значение слов.

Далее код создает модель классификации текста. Модель классификации текста состоит из двух слоев:

  • Уровень внедрения, который использует предварительно обученные внедрения для представления текстовых данных.
  • Плотный слой, который выводит распределение вероятностей по 10 классам.

Затем код обучает модель классификации текста на текстовых данных за 10 эпох. После обучения модели она сохраняется в файле model.h5.

Это всего лишь простой пример того, как использовать предварительно обученные традиционные внедрения с TensorFlow в Python. Существует много других способов использования предварительно обученных внедрений, и конкретный подход, который вы используете, будет зависеть от конкретной задачи, которую вы пытаетесь решить.

Какая из них лучше?

TTE — более мощный подход к представлению слов, чем традиционные встраивания. Однако они также требуют больше обучающих данных и вычислительных ресурсов. По этой причине традиционные встраивания по-прежнему часто используются для задач, где точность не имеет решающего значения, например, для классификации текста.

В целом, TTE — хороший выбор для задач, требующих понимания контекста слова, таких как вывод на естественном языке и ответы на вопросы. Традиционные внедрения — хороший выбор для задач, где точность не имеет решающего значения, таких как классификация текста и анализ настроений.

Если вы заметили приведенные выше примеры, вектор TTE для слова «король» является более точным и информативным, чем традиционный вектор встраивания. Это связано с тем, что вектор TTE обучается на большом корпусе текста и учитывает контекст, в котором используется слово.

Вот таблица, в которой суммированы ключевые различия между TTE и традиционными встраиваниями:

Я надеюсь, что этот пост в блоге был полезен! Дайте мне знать ваши комментарии.