GloVe Text Summarization, возвращающий стоп-слово - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь обучить модель суммирования тестов Keras для создания нового заголовка для новостной статьи, который затем я могу сравнить с опубликованным заголовком.Я тренируюсь на GloVe 6B, затем прогнозирую по статье, которую я очистил, удалив теги, проанализировав, удалив стоп-слова, лемматизировал, а затем снова присоединился.Мои результаты, как правило, выглядят так:

Оригинальный заголовок: «Форд» отправился в Мэриленд в августе, несмотря на то, что якобы «боязнь полета» сгенерирован. Заголовок: мнение: the the to to

Текст статьи после очистки:Обвинитель Бретта Кавано, Кристина Блейси Форд, прошла тест на детекторе лжи вдали от дома в Калифорнии, несмотря на предполагаемый страх перед полетом. Документы, выпущенные в среду, прошли тест на детекторе лжи, проведенный в Форде 7 августа. Отель Hilton Linthicum Heights, штат Мэриленд, далеко Балтиморский международный аэропорт в Вашингтоне. Подруга Кейт ДеВарни Блейси Форд любит летать в трудное время.Маршрут побега Кристина Блейси Профессор Форд, обвиняющий кандидатуру Верховного суда Бретта Кавано в том, что он подвергся сексуальному насилию в старшей школе, о которой ранее рассказывал друг, предположительно, столкнулся 30 лет назад с долговременным эффектом жизни Два давних друга Форда, о которых CNN неделю ранее описывал чувство дискомфорта, борющихся в замкнутом пространстве, выход из выходной двери вызвал дискомфортостановил предполагаемую встречу с КаваноАрни сказал, что самолет в высшей степени закрыто вдали. Страх, пролетавший над Фордом, может свидетельствовать своевременно. Сенатский судебный орган. В письме сенатор-демократ от Калифорнии Дайан Файнштейн от 30 июля 2018 года.

Вот мой тренировочный код:

from __future__ import print_function

import pandas as pd
from sklearn.model_selection import train_test_split
from keras_text_summarization.library.utility.plot_utils import plot_and_save_history
from keras_text_summarization.library.seq2seq import Seq2SeqGloVeSummarizer
from keras_text_summarization.library.applications.fake_news_loader import fit_text
import numpy as np

LOAD_EXISTING_WEIGHTS = False


def main():
    np.random.seed(42)
    data_dir_path = './data'
    very_large_data_dir_path = './very_large_data'
    report_dir_path = './reports'
    model_dir_path = './models'

    print('loading csv file ...')
    df = pd.read_csv("dcr Man_Cleaned.csv")

    print('extract configuration from input texts ...')
    Y = df.Title
    X = df['Joined']
    config = fit_text(X, Y)

    print('configuration extracted from input texts ...')

    summarizer = Seq2SeqGloVeSummarizer(config)
    summarizer.load_glove(very_large_data_dir_path)

    if LOAD_EXISTING_WEIGHTS:
        summarizer.load_weights(weight_file_path=Seq2SeqGloVeSummarizer.get_weight_file_path(model_dir_path=model_dir_path))

    Xtrain, Xtest, Ytrain, Ytest = train_test_split(X, Y, test_size=0.2, random_state=42)

    print('training size: ', len(Xtrain))
    print('testing size: ', len(Xtest))

    print('start fitting ...')
    history = summarizer.fit(Xtrain, Ytrain, Xtest, Ytest, epochs=20, batch_size=16)

    history_plot_file_path = report_dir_path + '/' + Seq2SeqGloVeSummarizer.model_name + '-history.png'
    if LOAD_EXISTING_WEIGHTS:
        history_plot_file_path = report_dir_path + '/' + Seq2SeqGloVeSummarizer.model_name + '-history-v' + str(summarizer.version) + '.png'
    plot_and_save_history(history, summarizer.model_name, history_plot_file_path, metrics={'loss', 'acc'})


if __name__ == '__main__':
    main()

Любые мысли о том, что здесь происходит не так, приветствуются.

1 Ответ

0 голосов
/ 19 октября 2018

Хорошо, так что это очень широкий вопрос, и есть много вещей, которые могут пойти не так.Проблема в том, что ваша модель застревает в классах по нескольким причинам:

  1. Скорее всего, у вас недостаточно данных, и модель не может извлечь из этого урок, поэтому она просто предсказываетнаиболее вероятный выход.
  2. Ваша модель слишком велика или слишком мала.Если он слишком большой, он не сможет извлечь из данных достаточно информации, чтобы предсказать правильные слова, поэтому он просто предсказывает наиболее вероятные из них, чтобы минимизировать ошибку.Если он слишком мал, он не способен выучить такую ​​сложную структуру, как естественный язык.

В любом случае, вам следует попробовать добавить несколько слоев, удалить несколько слоев, добавить регуляризацию,попробуйте подход с колесом рулетки, чтобы сгенерировать следующее слово на основе вероятности слов.Надеюсь, это поможет:)

...