NLP Эмбеддинги

Эмбеддинги - это модель, которая позволяет предсказать близкие по смыслу слова, или слова которые чаще всего употребляются друг с другом.

Построить эту модель можно следующим образом:

  1. Текст нужно разделить на словосочетания из нечетного количества слов. Например 3 или 5 слов. Это называют Context Window.
  2. На вход модели подается центральное слово из Context Window в формате one-hot вектора.
  3. На выход модели подаются слова которые идут следом или перед ним. Для Context Windows = 3, это будут 2 one hot вектора (предыдущее слово и следующее слово), либо сумма этих 2х векторов (bag of words). Если Context Window будет равным 5, то слов будет 4, а не 2.
  4. Затем нужно сдвинуть Context Window на один шаг и повторить процедуру.

Таким образом мы создадим датасет для обучения. Этот датасет мы подадим в автоенкодер для обучения.

Такая модель называется Skip Gram (Когда на входе центральное слово, а на выходе то что его окружает). CBOW - это наоборот, когда мы в модель подаем то что окружает слово, а на выходе получаем центральное слово.

Размер входного слоя и выходного слоя равен размеру словаря. Входной слой и скрытый слой кодируют слово. Скрытый слой и выход декодируют слово. Таким образом можно, закодировать one hot вектора в эмбеддинг. А вектор эмбединга будет заметно меньше, чем one-hot вектор. Эмбедингом называется матрица весов между входом и скрытым слоем. Или значения, которые возникают на скрытом слое, при подаче one-hot вектора слова в модель.

Эмбеддинг, в дальнейшем можно передать в классификатор, вместо Bag of words. Делается это следующим образом:

  1. Береться строка и каждому слову ставятся индексы из словоря. Получается вектор индексов.
  2. Затем для каждого слова, нужно поставить его эмбединг по индексу слова. Получается двумерный вектор размером [ длина строки ] X [ размер эмбединга ]. Например, 300 x 50.
  3. После этого, этот вектор надо передать в классификатор. Т.к. используются уже двумерные слои, можно использовать сверточные сети.

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

model = ai.CustomModel(
	model_name = "Model_embedding_1",
	input_shape = input_shape,
	module = nn.Sequential(

		nn.Embedding(10000, 50),
		
		Transform_Flat(),
		
		nn.Linear(300*50, 1024),
		nn.ReLU(inplace=True),
		
		nn.Linear(1024, 256),
		nn.ReLU(inplace=True),
		
		nn.Linear(256, output_shape[0]),
		nn.Softmax(dim=-1),
	),
)

Материалы

  1. Word2Vec: как работать с векторными представлениями слов
  2. Лекция. Введение в NLP. Эмбеддинги слов (06.03.2020)
  3. Лекция. Word embeddings
  4. Семинар. Word embeddings
  5. Семантические модели для русского языка

Остались вопросы?

Если вы хотите получить консультацию или оставить комментарий, опубликуйте свой вопрос на нашем форуме.