Word2vec с Conv1D для путаницы классификации текста

Я занимаюсь классификацией текста и планирую использовать вложения слов word2vec и передавать их слоям Conv1D для классификации текста. У меня есть фрейм данных, который содержит тексты и соответствующие метки ( настроения). Я использовал модуль gensim и использовал алгоритм word2vec для создания модели встраивания слов. Код, который я использовал:

import pandas as pd
from gensim.models import Word2Vec
from nltk.tokenize import word_tokenize
df=pd.read_csv('emotion_merged_dataset.csv')
texts=df['text']
labels=df['sentiment']
df_tokenized=df.apply(lambda row: word_tokenize(row['text']), axis=1)
model = Word2Vec(df_tokenized, min_count=1)

Я планирую использовать CNN и использовать эту модель встраивания слов. Но как мне использовать эту модель встраивания слов для моего cnn? Каким должен быть мой вклад?

Я планирую использовать что-то вроде (очевидно, не с теми же гиперпараметрами):

model = Sequential()
model.add(layers.Embedding(max_features, 128, input_length=max_len))
model.add(layers.Conv1D(32, 7, activation='relu'))
model.add(layers.MaxPooling1D(5))
model.add(layers.Conv1D(32, 7, activation='relu'))
model.add(layers.GlobalMaxPooling1D())
model.add(layers.Dense(1))

Может ли кто-нибудь помочь мне и указать мне правильное направление? Заранее спасибо.


person Souraj Adhikary    schedule 01.03.2018    source источник
comment
вам нужно загрузить веса word2vec в слой встраивания, вам также необходимо преобразовать слова в целые числа, чтобы слой встраивания мог преобразовывать каждое слово в вектор, для этой цели word2vec имеет словарь, который сопоставляет каждое слово с целым числом   -  person Kailegh    schedule 01.03.2018
comment
@Kailegh Не могли бы вы уточнить, желательно с кодом? Спасибо за молниеносный ответ.   -  person Souraj Adhikary    schedule 01.03.2018
comment
ахахха, я работаю прямо сейчас, я дам вам подробный ответ сегодня вечером, если никто еще этого не сделал, хотя я обычно загружаю файл для встраивания слов сам, а не беру файл gensim, но я это не будет проблемой   -  person Kailegh    schedule 01.03.2018
comment
@Kaleigh Можете ли вы также рассказать мне об альтернативном методе, который вы упомянули, без использования gensim? Спасибо   -  person Souraj Adhikary    schedule 01.03.2018
comment
мой ответ сработал для вас?   -  person Kailegh    schedule 06.03.2018
comment
@Kaleigh На самом деле я заработал сам. Спасибо. Можете ли вы ответить на мой последний вопрос на CNN о низкой точности проверки?   -  person Souraj Adhikary    schedule 06.03.2018


Ответы (1)


Извините за поздний ответ, я надеюсь, что это все еще полезно для вас. В зависимости от вашего приложения вам может потребоваться загрузить определенный файл встраивания слов, например здесь у вас есть файлы перчаток< /а>

EMBEDDING_FILE='glove.6B.50d.txt'

embed_size = 50 # how big is each word vector
max_features = 20000 # how many unique words to use (i.e num rows in embedding vector)
maxlen = 100 # max number of words in a comment to use

word_index = tokenizer.word_index
nb_words = min(max_features, len(word_index))
embedding_matrix = np.random.normal(emb_mean, emb_std, (nb_words, embed_size))
for word, i in word_index.items():
    if i >= max_features: continue
    embedding_vector = embeddings_index.get(word)
    if embedding_vector is not None: embedding_matrix[i] = embedding_vector

#this is how you load the weights in the embedding layer
inp = Input(shape=(maxlen,))
x = Embedding(max_features, embed_size, weights=[embedding_matrix])(inp)

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

person Kailegh    schedule 05.03.2018