Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有监督的抽取文本摘要_Python_Keras_Nlp_Nltk_Text Extraction - Fatal编程技术网

Python 有监督的抽取文本摘要

Python 有监督的抽取文本摘要,python,keras,nlp,nltk,text-extraction,Python,Keras,Nlp,Nltk,Text Extraction,我想从新闻文章中提取潜在的句子,这些句子可以作为文章摘要的一部分 经过一段时间,我发现这可以通过两种方式实现 提取摘要(从文本中提取句子并用棍棒插入) 抽象摘要(内部语言表示,以生成更人性化的摘要) 参考: 我遵循总结的方法,使用预先训练好的模型可以产生很好的结果,但它是抽象的 问题: 到目前为止,我看到的大多数抽取式摘要(Pytaster、PyTextRank和Gensim)都不是基于监督学习,而是基于朴素贝叶斯分类器、tf–idf、词性标记、基于关键字频率的句子排名、位置等,不需要任何训练

我想从新闻文章中提取潜在的句子,这些句子可以作为文章摘要的一部分

经过一段时间,我发现这可以通过两种方式实现

  • 提取摘要(从文本中提取句子并用棍棒插入)
  • 抽象摘要(内部语言表示,以生成更人性化的摘要)
  • 参考:

    我遵循总结的方法,使用预先训练好的模型可以产生很好的结果,但它是抽象的

    问题: 到目前为止,我看到的大多数抽取式摘要(Pytaster、PyTextRank和Gensim)都不是基于监督学习,而是基于朴素贝叶斯分类器、tf–idf、词性标记、基于关键字频率的句子排名、位置等,不需要任何训练

    到目前为止,我很少尝试提取潜在的总结句

    • 获取文章的所有句子,并将所有其他的摘要句子标记为1和0
    • 清理文本并应用停止字过滤器
    • 使用keras.preprocessing.text import Tokenizer中的标记器
      对文本语料库进行矢量化,词汇量为20000,并将所有序列填充到所有句子的平均长度
    • 建立一个序列keras模型,并对其进行训练
    model_lstm=Sequential()
    模型添加(嵌入(20000,100,输入长度=句子平均长度))
    模型添加(lstm(100,辍学率=0.2,经常性辍学率=0.2))
    模型_lstm.add(密集型(1,激活='sigmoid'))
    模型编译(loss='binary'u crossentropy',optimizer='adam',metrics=['accurity'])
    
    这是非常低的精度~0.2

    我认为这是因为上述模型更适合于肯定句/否定句,而不是总结句/非总结句的分类

    如能就解决此问题的方法提供任何指导,将不胜感激

    我认为这是因为上述模式更适合 肯定句/否定句而非总结句/非总结句 分类

    对。上述模型用于二元分类,而不是文本摘要。如果您注意到,输出(
    Dense(1,activation='sigmoid')
    )只会给您一个介于0-1之间的分数,而在文本摘要中,我们需要一个生成标记序列的模型

    我该怎么办

    解决这个问题的主要思想是(也称为seq2seq)模型。有一个用于机器翻译的基于Keras的存储库,但它很容易适应文本摘要

    守则的主要部分是:

    from keras.models import Model
    from keras.layers import Input, LSTM, Dense
    
    # Define an input sequence and process it.
    encoder_inputs = Input(shape=(None, num_encoder_tokens))
    encoder = LSTM(latent_dim, return_state=True)
    encoder_outputs, state_h, state_c = encoder(encoder_inputs)
    # We discard `encoder_outputs` and only keep the states.
    encoder_states = [state_h, state_c]
    
    # Set up the decoder, using `encoder_states` as initial state.
    decoder_inputs = Input(shape=(None, num_decoder_tokens))
    # We set up our decoder to return full output sequences,
    # and to return internal states as well. We don't use the 
    # return states in the training model, but we will use them in inference.
    decoder_lstm = LSTM(latent_dim, return_sequences=True, return_state=True)
    decoder_outputs, _, _ = decoder_lstm(decoder_inputs,
                                         initial_state=encoder_states)
    decoder_dense = Dense(num_decoder_tokens, activation='softmax')
    decoder_outputs = decoder_dense(decoder_outputs)
    
    # Define the model that will turn
    # `encoder_input_data` & `decoder_input_data` into `decoder_target_data`
    model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
    
    # Run training
    model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
    model.fit([encoder_input_data, decoder_input_data], decoder_target_data,
              batch_size=batch_size,
              epochs=epochs,
              validation_split=0.2)
    
    基于上述实现,需要将
    编码器输入数据
    解码器输入数据
    解码器目标数据
    传递到
    model.fit()
    ,它们分别是输入文本和文本的摘要版本

    请注意,
    解码器输入数据
    解码器目标数据
    是相同的,只是
    解码器目标数据
    解码器输入数据
    之前有一个标记

    这是非常低的精度~0.2

    我认为这是因为上述模式更适合 肯定句/否定句而非总结句/非总结句 分类


    由于各种原因(包括训练规模小、拟合过度、拟合不足等)导致的低精度性能。

    看看这是否有助于提取关键主题,并使用提及它们的句子生成摘要->但这也是一个抽象摘要模型,以文本为输入,对其进行编码,解码器生成抽象摘要。我试过阿比盖尔西的模型,哪一种也一样。我试图解决的问题是,给定一个文本作为输入(最有可能以向量形式表示)返回句子(属于原始文本)或文本中可以作为摘要一部分的句子索引。@UserX请参阅摘录示例我不确定该文本的作者为什么将其命名为“使用深度学习的研究文本提取摘要系统”,但它只是将Lex Rank和其他无监督模型的提取摘要作为训练数据提供给三种抽象方法。