在自然语言处理(NLP)领域,Hugging Face的Transformers库是一个强大的工具,它提供了一系列的预训练模型以及易于使用的API,使得能够轻松地进行各种NLP任务。本文将介绍如何使用这个库来执行一些常见的NLP任务,包括情感分析、文本生成和问答系统。
在深入使用Hugging FaceTransformers库之前,了解深度学习和自然语言处理的基本概念是非常重要的。这将帮助更好地理解Transformers库的工作原理和如何有效地使用它。
Transformers库起源于论文《Attention is all you need》,这是一种编码器-解码器架构。这种架构允许一个编码器处理输入数据,然后由另一个解码器生成输出。在Transformers架构的基础上,衍生出了多种变体,例如BERT(Bidirectional encoder representation of transformer)仅使用编码器堆栈,而GPT(Generative Pre-trained Transformer)仅使用解码器堆栈。Google创建的T5(Text to text transfer transformer)则同时使用了编码器和解码器堆栈。
Hugging FaceTransformers库提供了大量的预训练模型,这些模型可以用于视觉、文本和音频等多种任务。通过这些API,可以下载并尝试使用这些预训练模型,甚至可以在自己的数据集上进行微调。
使用Transformers库有以下几个优点:
Pipeline是Transformers库背后的复杂代码的抽象,它是使用预训练模型进行推理的最简单方式。它提供了易于使用的pipeline函数,用于执行多种任务,包括但不限于命名实体识别、掩码语言建模、情感分析、特征提取和问答。
与机器学习/深度学习实验中需要预处理数据、训练模型和编写推理脚本不同,使用Pipeline函数,只需要导入它并传递原始数据。Pipeline将在后端预处理数据,包括标记化和填充,以及算法输入的所有相关处理步骤,并只需调用它即可返回输出。
!pip install transformers
安装完库后,可以开始探索它的神奇功能。
情感分析用于预测文本的情感,判断文本是积极的还是消极的。使用Pipeline进行情感分析,需要用“sentiment-analysis”任务初始化Pipeline,如下所示:
from transformers import pipeline
sentimentAnalysis_pipeline = pipeline("sentiment-analysis")
test_sentence = "这是一部非常好的电影。喜欢它,并且会再次观看。"
print(sentimentAnalysis_pipeline(test_sentence))
甚至可以传递一个句子列表,Pipeline将返回每个示例的推理结果。
test_sentence1 = "这是一部非常好的电影。喜欢它,并且会再次观看。"
test_sentence2 = "这是看过的最糟糕的电影。"
print(sentimentAnalysis_pipeline([test_sentence1, test_sentence2]))
第一次使用时,Pipeline将下载底层模型;甚至可以选择想要使用的模型,使用model参数;默认情况下,它使用‘distilbert-base-uncased-finetuned-sst-2-english’模型。
模型将根据给定的几个词或句子生成接下来的N个字符。需要用‘text-generation’任务初始化Pipeline。
text_gen_pipeline = pipeline('text-generation', model='gpt2')
prompt = '在进一步进行之前,请听说话'
print(text_gen_pipeline(prompt, max_length=60))
默认情况下,它将返回提供的max_length的单个输出。然而,可以设置num_return_sequences参数来输出想要的任意数量的序列。
给定一个文本(上下文)和问题,提取答案。对于QnA,需要用“question-answering”任务初始化Pipeline。
context = '''
2020-2021年度,公司及其子公司支付给公司法定审计师及网络实体中其他公司的总费用为59.73亿卢比。
在2020-2021财年,公司通过私募方式发行并分配了面值为10,00,000卢比(十 lakh卢比)的无担保可赎回非可转换债券(NCDs),共七个批次,总计24,955亿卢比,根据各自批次的发行条款。此外,第三批次的500亿卢比来自部分支付的NCD(系列IA)持有者。通过NCD筹集的资金已用于偿还现有借款和其他业务用途。
'''
ans = ques_ans_pipeline({'question': '公司支付给审计师的总费用是多少?',
'context': f'{context}'})
print(ans)