сопоставление слов для 2D встраивания слов - PullRequest
1 голос
/ 12 мая 2019

Для моей магистерской диссертации я создал модель Word2Vec. Я хотел показать это изображение, чтобы уточнить результат. Но как работает отображение для отображения слов в этом двумерном пространстве?

Все слова представлены вектором 300 dim. Как они отображаются на этом 2D-изображении? Что такое оси x & y?

Код:

w2v_model.build_vocab(documents)

words = w2v_model.wv.vocab.keys()
vocab_size = len(words)
print("Vocab size", vocab_size)

w2v_model.train(documents, total_examples=len(documents), 

epochs=W2V_EPOCH)
tokenizer = Tokenizer()
tokenizer.fit_on_texts(df_train.text)

vocab_size = len(tokenizer.word_index) + 1
print("Total words", vocab_size)

x_train = pad_sequences(tokenizer.texts_to_sequences(df_train.text), maxlen=SEQUENCE_LENGTH)
x_test = pad_sequences(tokenizer.texts_to_sequences(df_test.text), maxlen=SEQUENCE_LENGTH)

labels = df_train.target.unique().tolist()
labels.append(NEUTRAL)

encoder = LabelEncoder()
encoder.fit(df_train.target.tolist())

y_train = encoder.transform(df_train.target.tolist())
y_test = encoder.transform(df_test.target.tolist())

y_train = y_train.reshape(-1,1)
y_test = y_test.reshape(-1,1)

embedding_matrix = np.zeros((vocab_size, W2V_SIZE))
for word, i in tokenizer.word_index.items():
  if word in w2v_model.wv:
    embedding_matrix[i] = w2v_model.wv[word]
print(embedding_matrix.shape)
embedding_layer = Embedding(vocab_size, W2V_SIZE, weights=[embedding_matrix], input_length=SEQUENCE_LENGTH, trainable=False)

enter image description here

1 Ответ

1 голос
/ 13 мая 2019

Существует несколько подходов.

Первый - использовать PCA (анализ основных компонентов) и построить первый компонент на оси x, второй компонент на оси y (и броситьпрочь другие компоненты).

Вы не говорите, какую библиотеку вы используете для генерации векторов слов, и она может иметь собственную функцию PCA.Но у sklearn есть один: https://scikit -learn.org / stable / modules / generate / sklearn.decomposition.PCA.html (https://machinelearningmastery.com/develop-word-embeddings-python-gensim/ имеет готовый код, показывающий создание векторов сgensim, затем вычерчивайте их с помощью этой функции.)

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

Но использование PCA является более нормальным подходом для визуализации.

...