您的位置:首页 > 房产 > 家装 > 王战营_北京最放心的装修公司_宁波seo关键词排名_杭州市优化服务

王战营_北京最放心的装修公司_宁波seo关键词排名_杭州市优化服务

2024/12/23 2:54:24 来源:https://blog.csdn.net/ty154542607/article/details/144235210  浏览:    关键词:王战营_北京最放心的装修公司_宁波seo关键词排名_杭州市优化服务
王战营_北京最放心的装修公司_宁波seo关键词排名_杭州市优化服务

文本摘要简介

文本摘要是从大量文本中提取关键信息并生成简短概括的过程。它在信息检索、新闻报道、学术研究、法律文档处理等领域有着广泛的应用。文本摘要可以帮助用户快速了解文档的主要内容,而无需阅读整个文档
文本摘要是一个经典的序列到序列(seq2seq)任务,有一个输入文本和一个目标文本。这也正是编码器-解码器Transformers的优势所在。

1. 文本摘要的类型

文本摘要主要分为两大类:抽取式摘要(Extractive Summarization)生成式摘要(Abstractive Summarization)

a. 抽取式摘要
  • 定义:从原始文本中直接抽取句子或片段组成摘要。
  • 优点:
    简单易实现。
    摘要中的信息直接来源于原文,减少了信息扭曲的风险。
  • 缺点:
    可能会导致摘要冗长,包含不必要的细节。
    摘要的连贯性和流畅性可能较差。
  • 适用场景:当需要保持高度忠实于原文时,如法律文件、技术文档等。
b. 生成式摘要
  • 定义:通过理解文本的内容,重新组织语言生成新的摘要,不局限于原文中的句子。
  • 优点:
    摘要更加简洁和连贯。
    可以捕捉更深层次的意义,提供更有价值的信息。
  • 缺点:
    实现难度较大,依赖于先进的自然语言处理技术和深度学习模型。
    存在信息扭曲或误解的风险。
  • 适用场景:当需要生成更为精炼且易于理解的摘要时,如新闻报道、社交媒体内容等。
2. 文本摘要的方法
a. 基于统计的方法
  • 词频统计:计算每个词在文档中出现的频率,并根据频率选择重要句子。
  • TF-IDF:结合词频(Term Frequency, TF)和逆文档频率(Inverse Document Frequency, IDF),识别出对文档具有代表性的词语。
  • TextRank:使用图论算法来评估句子的重要性,类似于PageRank算法用于网页排序的方式。
b. 基于机器学习的方法
  • 特征工程:提取诸如句子位置、长度、关键词密度等特征,训练分类器或回归模型预测句子的重要性。
  • 监督学习:使用标注数据集训练模型,学习如何从文档中选出重要的句子。
  • 无监督学习:不需要标注数据,通过聚类或其他方法自动发现文本结构和主题。
c. 基于深度学习的方法
  • 编码-解码架构(Encoder-Decoder Architecture):使用神经网络将输入文本编码为一个向量表示,然后解码生成摘要。典型模型包括Seq2Seq模型及其变种。
  • 预训练语言模型:利用大规模预训练模型(如BERT, T5, BART)的强大表征能力,微调这些模型以适应特定的摘要任务。
  • 注意力机制(Attention Mechanism):允许模型聚焦于输入序列的不同部分,从而更好地捕捉上下文信息。
深度学习详解介绍
1. 编码-解码架构

编码-解码架构是深度学习文本摘要的核心,它包括两个主要部分:编码器和解码器。

a. 编码器
  • 作用:将输入文本转换为一个或多个向量表示,这些向量捕捉了文本的主要语义信息。
  • 实现:
    RNN/LSTM/GRU:早期的序列到序列模型使用递归神经网络(RNN)、长短期记忆网络(LSTM)或门控循环单元(GRU)作为编码器。
  • Transformer:现代模型更多地采用基于自注意力机制的Transformer架构,如BERT、T5等,因为它们在处理长文本时表现出更好的性能。
b. 解码器
  • 作用:根据编码器生成的向量表示,逐步生成目标摘要。
  • 实现:
  • Seq2Seq with Attention:解码器同样可以是RNN/LSTM/GRU,并且通常会结合注意力机制来增强对输入序列不同部分的关注度。
  • Transformer Decoder:对于基于Transformer的模型,解码器也是多层的Transformer结构,与编码器共享相似的设计,但专注于生成输出序列。
2. 预训练语言模型

预训练语言模型(如BERT, T5, BART, PEGASUS)已经在大规模语料库上进行了充分训练,能够提供强大的文本表征能力,极大地提升了文本摘要的质量。

  • a. BERT (Bidirectional Encoder Representations from Transformers)
    特点:双向编码器,能够在上下文中理解词语的意义。
    应用:主要用于抽取式摘要,通过识别重要句子来进行摘要。
  • b. T5 (Text-to-Text Transfer Transformer)
    特点:统一了多种NLP任务到一个框架内,即所有任务都被视为文本到文本的任务。
    应用:广泛应用于生成式摘要,因为它可以直接生成新的文本作为摘要。
  • c. BART (Bidirectional and Auto-Regressive Transformers)
    特点:结合了双向编码和自回归解码的优势,先进行噪声扰动再恢复原始文本。
    应用:特别适合于生成式摘要任务,因其良好的文本生成能力和鲁棒性。
  • d. PEGASUS (Pre-training with Extracted Gap-sentences for Abstractive Summarization)
    特点:专门针对摘要任务设计的预训练目标,通过对文档中的关键句子进行遮蔽然后预测这些句子。
    应用:非常适用于生成高质量的生成式摘要,尤其擅长捕捉文档的关键信息。
评估指标

自动化评估指标通过计算生成摘要与参考摘要之间的相似度来量化摘要的质量,这类方法快速且易于实施,但可能无法完全捕捉人类读者的感受。

  • a. ROUGE (Recall-Oriented Understudy for Gisting Evaluation)
    定义:ROUGE是一系列基于召回率(recall)的评价指标,旨在评估生成摘要是否包含了参考摘要中的关键信息。
    变体:
    ROUGE-N:衡量n-gram(连续的n个词)重叠情况,如ROUGE-1考虑单个词,ROUGE-2考虑双词组合10。
    ROUGE-L:基于最长公共子序列(Longest Common Subsequence, LCS),反映生成摘要与参考摘要之间最长连续匹配的部分。
    ROUGE-SU4:结合了skip-bigram(允许中间插入任意数量非重叠单词)和unigram的信息。
    优点:广泛应用于文本摘要领域,特别是对于抽取式摘要效果较好。
    局限性:主要关注词汇级别的重合,难以评估语义层面的一致性和流畅性。
  • b. BLEU (Bilingual Evaluation Understudy)
    定义:最初为机器翻译设计的评价标准,后来也被用于评估文本摘要。
    原理:计算生成摘要与一个或多个参考摘要在不同长度n-gram上的精确匹配比例,并对结果取几何平均值。
    特点:强调精确度而非召回率,因此更适合评估生成式摘要中是否有足够的细节被保留下来。
    局限性:倾向于奖励短小精悍但可能丢失重要信息的摘要;并且同样侧重于词汇级别而非更高层次的意义表达。
  • c. METEOR (Metric for Evaluation of Translation with Explicit ORdering)
    定义:综合考虑了词汇匹配、同义词替换、词形变化等因素,同时还引入了片段惩罚机制以鼓励连贯性的保持。
    优势:相比ROUGE和BLEU,它能够更好地处理同义词和形态学差异带来的挑战。
    应用:虽然最初是为翻译任务设计,但在某些情况下也可作为文本摘要的一个补充评价工具。
  • d. BERTScore
    定义:利用预训练的语言模型(例如BERT)计算候选摘要与参考摘要之间的余弦相似度,从而评估两者间的语义相似性。
    特点:相较于传统的基于词汇匹配的方法,BERTScore能更准确地捕捉句子级别的语义关系。
    应用场景:特别适用于那些需要评估摘要内容忠实度的任务,因为它不仅关注词汇层面的重合,还考虑到了上下文的理解9。

文本摘要实现

文本摘要的简介写了这么多看着都晕,那么我们这里采取那种方案训练文本摘要模型。
使用深度学习方式进行文本摘要测试。
预训练模型:Langboat/mengzi-t5-base(T5)
数据集:nlpcc_2017
数据集的处理方案,上面简介中提到了,编码-解码架构,数据处理就要针对它来进行处理。
编码器:文本内容作为输入

.........................EOS

解码器:目标内容作为输入

bos......................................eos

使用模型的分词器,分别处理,要告知分词器是什么输入,分词器会打标签,后面代码有体现。

评估指标:这里使用ROUGE,直接使用rouge-chinese, 这里需要使用:pip install rouge-chinese

以上是文本摘要(T5)技术方案。

代码展示:

# 基于T5的文本摘要
## Step1 导入相关包import torch
from datasets import Dataset
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, DataCollatorForSeq2Seq, Seq2SeqTrainer, Seq2SeqTrainingArguments
import numpy as np
from rouge_chinese import Rouge
from transformers import pipeline## Step2 加载数据集
ds = Dataset.load_from_disk("./nlpcc_2017/")
print(ds)ds = ds.train_test_split(100, seed=42)
print(ds)print(ds["train"][0])
## Step3 数据处理 mengzi-t5-base在本地tokenizer = AutoTokenizer.from_pretrained("mengzi-t5-base")def process_func(exmaples):contents = ["摘要生成: \n" + e for e in exmaples["content"]]inputs = tokenizer(contents, max_length=384, truncation=True)labels = tokenizer(text_target=exmaples["title"], max_length=64, truncation=True)inputs["labels"] = labels["input_ids"]return inputstokenized_ds = ds.map(process_func, batched=True)
print(tokenized_ds)q = tokenizer.decode(tokenized_ds["train"][0]["input_ids"])
print(q)
w = tokenizer.decode(tokenized_ds["train"][0]["labels"])
print(w)## Step4 创建模型
model = AutoModelForSeq2SeqLM.from_pretrained("mengzi-t5-base")## Step5 创建评估函数rouge = Rouge()def compute_metric(evalPred):predictions, labels = evalPreddecode_preds = tokenizer.batch_decode(predictions, skip_special_tokens=True)labels = np.where(labels != -100, labels, tokenizer.pad_token_id)decode_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)decode_preds = [" ".join(p) for p in decode_preds]decode_labels = [" ".join(l) for l in decode_labels]scores = rouge.get_scores(decode_preds, decode_labels, avg=True)return {"rouge-1": scores["rouge-1"]["f"],"rouge-2": scores["rouge-2"]["f"],"rouge-l": scores["rouge-l"]["f"],}## Step6 配置训练参数args = Seq2SeqTrainingArguments(output_dir="./summary",per_device_train_batch_size=4,per_device_eval_batch_size=8,gradient_accumulation_steps=8,logging_steps=8,eval_strategy="epoch",save_strategy="epoch",metric_for_best_model="rouge-l",predict_with_generate=True
)## Step7 创建训练器
trainer = Seq2SeqTrainer(args=args,model=model,train_dataset=tokenized_ds["train"],eval_dataset=tokenized_ds["test"],compute_metrics=compute_metric,tokenizer=tokenizer,data_collator=DataCollatorForSeq2Seq(tokenizer=tokenizer)
)## Step8 模型训练trainer.train()## Step9 模型推理
pipe = pipeline("text2text-generation", model=model, tokenizer=tokenizer, device=0)pipe("摘要生成:\n" + ds["test"][-1]["content"], max_length=64, do_sample=True)p = ds["test"][-1]["title"]print("结果:", p)

mengzi-t5-base是模型,已下载在本地,可以替换为Langboat/mengzi-t5-base,但需要kexue上网才能运行这段代码。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com