Правильно ли это обучение с пропуском грамматики? - PullRequest
0 голосов
/ 02 июля 2019

Я все еще начинающий с нейронными сетями и НЛП. В этом коде я тренирую очищенный текст (некоторые твиты) с помощью скип-граммы. Но я не знаю, правильно ли я это делаю. Может кто-нибудь сообщить мне о правильности этого текста пропуска грамматики? Любая помощь приветствуется.

Это мой код:

from nltk import word_tokenize

from gensim.models.phrases import Phrases, Phraser

sent = [row.split() for row in X['clean_text']]

phrases = Phrases(sent, max_vocab_size = 50, progress_per=10000)

bigram = Phraser(phrases)

sentences = bigram[sent]

from gensim.models import Word2Vec

w2v_model = Word2Vec(window=5,
                     size = 300,
                     sg=1)

w2v_model.build_vocab(sentences)


w2v_model.train(sentences, total_examples=w2v_model.corpus_count, epochs=25)


del sentences #to reduce memory usage


def get_mat(model, corpus, size):

    vecs = np.zeros((len(corpus), size))

    n = 0

    for i in corpus.index:
        vecs[i] = np.zeros(size).reshape((1, size))
        for word in str(corpus.iloc[i,0]).split():
            try:
                vecs[i] += model[word]
                #n += 1
            except KeyError:
                continue

    return vecs

X_sg = get_vectors(w2v_model, X, 300)

del X

X_sg=pd.DataFrame(X_sg)
X_sg.head()
from sklearn import preprocessing
scale = preprocessing.normalize
X_sg=scale(X_sg)

for i in range(len(X_sg)):
    X_sg[i]+=1 #I did this because some weights where negative! So could not 
               #apply LSTM on them later

1 Ответ

0 голосов
/ 02 июля 2019

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

Ваши конкретные строки кода, включающие модель Word2Vec, примерно верны: правдоподобно полезные параметры (если у вас есть набор данных, достаточно большой для обучения 300-мерных векторов) и соответствующие шаги. Таким образом, реальным доказательством будет то, являются ли ваши результаты приемлемыми.

Что касается вашей попытки использовать Phrases bigram-creation заранее:

  • Перед тем, как добавить дополнительную сложность предварительной обработки, вы должны работать как обычно и с многообещающими результатами.

  • Параметр max_vocab_size=50 серьезно ошибочен и может сделать шаг фразы бессмысленным. max_vocab_size - это жесткое ограничение на количество слов / биграмм в классе, чтобы ограничить использование памяти. (Всякий раз, когда число известных слов / биграмм попадает в этот предел, многие низкочастотные слова / биграммы удаляются - на практике большинство всех слов / биграмм каждое сокращение сокращается, что приводит к большой точности в обмен на ограниченное использование памяти.) Значение по умолчанию max_vocab_size в gensim составляет 40 000 000, но по умолчанию в источнике Google word2phrase.c, на котором основан метод gensim, было 500 000 000. Используя только 50, вы не узнаете ничего полезного о тех 50 словах / биграммах, которые выдержат множество сокращений.

Что касается вашей get_mat() функции и более позднего DataFrame кода, я понятия не имею, что вы пытаетесь с ней сделать, поэтому не могу высказать свое мнение по этому поводу.

...