#python #keras #scikit-learn #word-embedding #glove
#python #keras #scikit-learn #встраивание слов #перчатка
Вопрос:
Я использовал keras для использования предварительно обученных встраиваний слов, но я не совсем уверен, как это сделать в модели scikit-learn.
Мне нужно сделать это и в sklearn, потому что я использую vecstack
для объединения как последовательной модели keras, так и модели sklearn.
Это то, что я сделал для модели keras:
glove_dir = '/home/Documents/Glove'
embeddings_index = {}
f = open(os.path.join(glove_dir, 'glove.6B.200d.txt'), 'r', encoding='utf-8')
for line in f:
values = line.split()
word = values[0]
coefs = np.asarray(values[1:], dtype='float32')
embeddings_index[word] = coefs
f.close()
embedding_dim = 200
embedding_matrix = np.zeros((max_words, embedding_dim))
for word, i in word_index.items():
if i < max_words:
embedding_vector = embeddings_index.get(word)
if embedding_vector is not None:
embedding_matrix[i] = embedding_vector
model = Sequential()
model.add(Embedding(max_words, embedding_dim, input_length=maxlen))
.
.
model.layers[0].set_weights([embedding_matrix])
model.layers[0].trainable = False
model.compile(----)
model.fit(-----)
Я очень новичок в scikit-learn, из того, что я видел, чтобы создать модель в sklearn, которую вы делаете:
lr = LogisticRegression()
lr.fit(X_train, y_train)
lr.predict(x_test)
Итак, мой вопрос в том, как мне использовать предварительно обученную перчатку с этой моделью? куда мне передать предварительно подготовленную перчатку embedding_matrix
Большое вам спасибо, и я действительно ценю вашу помощь.
Комментарии:
1. Пожалуйста, опишите, в какую модель вы хотите встроить
sklearn
, лучше всего с помощью формулы и / или описательной диаграммы.2. Здравствуйте, я просто хочу модель логистической регрессии с предварительно обученным встраиванием слов и беру среднее значение векторов встраивания слов.
3. Входные данные — это обзор amazon. Поскольку это обзор (текст), встраивание word играет огромную роль, верно?
4. Итак, вы хотите ввести …. представление некоторого текста в виде набора слов, т. Е. вектор фиксированной длины с количеством отдельных слов в тексте?
5. Ну, и да, и нет. Я использовал Tokenizer для векторизации и преобразования текста в последовательности, чтобы его можно было использовать в качестве входных данных. Вместо пакета слов я хочу встраивания слов, потому что я думаю, что подход «пакета слов» очень специфичен для домена, и я также хочу работать в разных доменах.
Ответ №1:
Вы можете просто использовать библиотеку Zeugma.
Вы можете установить его с помощью pip install zeugma
, затем создать и обучить свою модель с помощью следующих строк кода (предполагая, что corpus_train
и corpus_test
являются списками строк):
from sklearn.linear_model import LogisticRegresion
from zeugma.embeddings import EmbeddingTransformer
glove = EmbeddingTransformer('glove')
x_train = glove.transform(corpus_train)
model = LogisticRegression()
model.fit(x_train, y_train)
x_test = glove.transform(corpus_test)
model.predict(x_test)
Вы также можете использовать различные предварительно обученные встраивания (полный список здесь) или обучить свои собственные (см. Документацию Zeugma о том, как это сделать).
Комментарии:
1. Этот код больше не работает с Gensim 4.0.0 или выше.
2. С сегодняшнего дня Zeugma теперь должен поддерживать Gensim 4.0 . Просто обновите до последней версии (0.49 ) с помощью
pip install -U zeugma
3. Да, я видел, в данный момент я обновляю его.
4. Есть ли какая-либо альтернатива zeugma? мне кажется, больше не поддерживается :/
5. Привет, @DanielWiczew Я не в курсе альтернатив, но Zeugma все еще поддерживается, просто в последнее время не было коммитов, потому что ни один не был нужен. Дайте мне знать, если у вас возникнут проблемы с этим.