Встраивание слов — это тип метода машинного обучения, который используется для представления слов в виде векторов. Это позволяет компьютерам понимать значение слов и их взаимоотношения друг с другом. Существует два основных типа встраивания слов: 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 и традиционными встраиваниями:
Я надеюсь, что этот пост в блоге был полезен! Дайте мне знать ваши комментарии.