在 python 中应用预训练的 facebook/bart-large-cnn 进行文本摘要

Posted

技术标签:

【中文标题】在 python 中应用预训练的 facebook/bart-large-cnn 进行文本摘要【英文标题】:Applying pre trained facebook/bart-large-cnn for text summarization in python 【发布时间】:2021-05-28 01:29:47 【问题描述】:

我的情况是,我正在使用抱脸变形器,并且对此有所了解。我正在使用 facebook/bart-large-cnn 模型为我的项目执行文本摘要,并且到目前为止我正在使用以下代码进行一些测试:

text = """
Justin Timberlake and Jessica Biel, welcome to parenthood. 
The celebrity couple announced the arrival of their son, Silas Randall Timberlake, in 
statements to People."""

from transformers import pipeline
smr_bart = pipeline(task="summarization", model="facebook/bart-large-cnn")
smbart = smr_bart(text, max_length=150)
print(smbart[0]['summary_text'])

一小段代码实际上给了我一个很好的文本摘要。但我的问题是,如何在我的数据框列之上应用相同的预训练模型。我的数据框如下所示:

ID        Lang          Text
1         EN            some long text here...
2         EN            some long text here...
3         EN            some long text here...

.... 50K 行以此类推

现在我想将预训练模型应用到 col Text 以从中生成一个新列 df['summary'] ,生成的数据框应如下所示:

ID        Lang         Text                              Summary
1         EN            some long text here...           Text summary goes here...
2         EN            some long text here...           Text summary goes here...
3         EN            some long text here...           Text summary goes here...

我怎样才能做到这一点?任何帮助将不胜感激。

【问题讨论】:

你不只是在问如何将函数应用于系列中的每个值吗? 【参考方案1】:

您可以随时使用数据框apply 函数:

df = pd.DataFrame([('EN',text)]*10, columns=['Lang','Text'])

df['summary'] = df.apply(lambda x: smr_bart(x['Text'], max_length=150)[0]['summary_text'] , axis=1)

df.head(3)

输出:

    Lang    Text                                                summary
0   EN      \nJustin Timberlake and Jessica Biel, welcome ...   The celebrity couple announced the arrival of ...
1   EN      \nJustin Timberlake and Jessica Biel, welcome ...   The celebrity couple announced the arrival of ...
2   EN      \nJustin Timberlake and Jessica Biel, welcome ...   The celebrity couple announced the arrival of ...

这有点低效,因为每行都会调用管道(执行时间为 2 分 16 秒)。因此,我建议将Text 列转换为列表并直接传递给管道(执行时间 41 秒):

df = pd.DataFrame([('EN',text)]*10, columns=['Lang','Text'])

df['summary'] = [x['summary_text'] for x in smr_bart(df['Text'].tolist(), max_length=150)]

df.head(3)

输出:

    Lang    Text                                                summary
0   EN      \nJustin Timberlake and Jessica Biel, welcome ...   The celebrity couple announced the arrival of ...
1   EN      \nJustin Timberlake and Jessica Biel, welcome ...   The celebrity couple announced the arrival of ...
2   EN      \nJustin Timberlake and Jessica Biel, welcome ...   The celebrity couple announced the arrival of ...

【讨论】:

以上是关于在 python 中应用预训练的 facebook/bart-large-cnn 进行文本摘要的主要内容,如果未能解决你的问题,请参考以下文章

在 C/C++ 中使用 TensorFlow 预训练好的模型—— 间接调用 Python 实现

《预训练周刊》第33期:预训练语言模型的高效分层域适应

如何使用预训练的 .caffemodel 在 python 上对单个图像执行预测

如何在 android 中使用 tensorflow 预训练模型制作 stylegan

Tensorflow - 可视化预训练网络的学习过滤器

如何从 python 中的预训练模型中获取权重并在 tensorflow 中使用它?