这一段时间在研究自然语言处理,一直想找一些预训练模型,发现这个非常全,就收藏好好研究
作者|Robin van Merle
编译|VK
来源|Towards Data Science
原文链接: https://towardsdatascience.com/effortless-nlp-using-pre-trained-hugging-face-pipelines-with-just-3-lines-of-code-a4788d95754f
最近,BERT模型在语言处理领域得到了广泛的应用,因为它能够将最先进的性能与计算能力结合起来。
在本文中,我将向你展示如何使用Hugging Face Transformers库,仅用3行代码就可以使用模型!但是首先让我们看看BERT模型是如何工作的。
BERT代表Bidirectional Encoder Representations from Transformers。它是一种新的语言模型,能够在广泛的自然语言处理任务中获得最前沿的结果。
BERT的一个主要优点是它是双向的,这意味着该模型可以同时考虑整个单词序列。与从左到右的方法不同,这允许BERT使用所有周围的单词(在左侧和右侧)来上下文化每个单词。
此外,你可以在计算能力有限的机器上使用BERT模型,因为它利用了迁移学习:首先对模型进行一般任务的训练(预训练),然后将获得的知识“转移”到相关的NLP任务(微调)。让我们更详细地看一下这两个步骤。
首先,该模型是在维基百科这样的大型纯文本语料库上预训练的。预训练应该是通用的,以便在以后的广泛目标中使用该模型。
其次,预训练是在自我监督下进行的,这样输入就不需要标记,这反过来意味着我们有一个几乎无限的训练数据供应。BERT模型的预训练分为两个任务:
Paris is the [MASK] of France
,这个模型会试图预测capital
。the man went to the store
和he bought a gallon of milk
,这两个句子可以顺理成章地跟在一起。然而,这句话也可能是the man went to the store
,penguins are flightless
,这就不太可能连续出现。这些任务的结合使BERT既能理解单词之间的关系,又能理解句子之间的关系。预训练只需要做一次(节省计算能力),并且预训练的模型在网上广泛可用,可以用于一种或多种语言,也可以用于大小写和非大小写文本。
然而,预训练的BERT模型仍然是非常通用的。为了能够将其用于情感分析、命名实体识别、文本摘要、翻译或其他方面,我们需要针对特定用例对模型进行微调。
这最大的优点是,这种微调相对便宜:大部分的权重已经在训练前阶段完成,只需要做一次。
如果你没有一个标记的训练集,已经微调的模型也可以在网上广泛使用,例如在Hugging Face model hub(https://huggingface.co/models).。这是我将在本文中使用的方法。
关于BERT的更多信息,我推荐:https://github.com/google-research/bert
或者为更高级的读者推荐原始的研究论文“BERT:Pre training of Deep directional Transformers For Language Understanding”:https://arxiv.org/abs/1810.04805
使用BERT模型最简单的方法之一是使用Hugging Face Transformers:一个基于PyTorch和TensorFlow的最先进的NLP库。
他们的model hub,目前提供了7500多个预训练的各种NLP任务和语言的模型。这样,你几乎总能找到与你的特定目标相对应的模型。
每个模型都可以在你自己的数据集上使用hug Face transformer库提供的简单方法进行微调。然而,更简单的是,这些模型也可以开箱即用,只需极少的编程,就可以使用Hugging Face Transformers提供的管道之一,完成以下11项任务:
有关更多信息,请访问:https://github.com/huggingface/transformers
确保你首先安装了Hugging Face Transformers库,例如在终端中运行pip install Transformers。然后,你就可以开始使用Hugging Face,只需3行代码!例如,查看以下情绪分析代码:
# 加载transformers库并初始化管道
from transformers import pipeline
classifier = pipeline('sentiment-analysis')
# 这是你使用管道所需要的全部内容!
classifier('Today is a beautiful day!')
# >> [{'label': 'POSITIVE', 'score': 0.9998838901519775}]
看,那很简单!你所要做的就是导入库,初始化管道,然后就可以开始使用模型了!
如前所述,这些函数使用来自Hugging Face model hub的预训练的模型。默认情况下,情绪分析管道使用distilbert-base-uncased-finetened-sst-2-english模型,但是你可以使用模型中心的任何模型。
让我们看看两个扩展:从模型中心选择不同的模型,以及解决不同的任务。
通过在创建管道时设置模型参数,你可以轻松地使用不同的模型。
例如,假设我们正在做一个项目,想要预测财务情绪。在模型中心进行快速搜索,我们就会看到ProsusAI/finbert模型,它是专门针对金融的情感进行训练的。这个模型的实现和前面的例子一样简单,只需包含模型参数:
# 我假设你已经像前面的例子一样导入了transformer库
classifier = pipeline('sentiment-analysis', model='ProsusAI/finbert')
classifier('Stocks hit record highs')
# >> [{'label': 'positive', 'score': 0.8461698889732361}]
Hugging Face Transformers将自动为你下载所选的模型!
管道目前能够处理11个不同的任务,从命名实体识别到翻译。
创建管道时,可以通过将“sentiment-analysis”更改为其他内容来选择模型。例如,让我们试着翻译“‘I love dogs”从英语到德语。转到模型中心,过滤任务“Translation”和语言“de”,你将看到超过100个模型。我将使用t5-small模型:
classifier = pipeline('translation_en_to_de', model='t5-small')
classifier('I love dogs!')
# >> [{'translation_text': 'Ich liebe Hunde!'}]
就这样!有关管道可以执行的所有任务的完整列表,请查看此wiki页面:https://huggingface.co/transformers/main_classes/pipelines.html#the-pipeline-abstraction
在本文中,你已经阅读了BERT模型是如何工作的以及它是如何训练的。此外,你已经看到了使用Hugging Face Transformers管道是多么强大和简单。每个人都可以使用NLP !