学习时间:2022.04.26~2022.04.30
文章目录
7. 基于PyTorch的BERT应用实践
本节着重于将BERT模型应用到具体的实践当中,因此未来有很多可以优化的地方,比如自己重写dataset和dataloader方法,这样对于pytorch应该能有更好地、更灵活的运用。
7.1 工具选取
使用PyTorch框架应用Bert,一般是去Hugging Face (一个社区,有很多人会把训练好了的模型放在上面,可以支持PyTorch和Tenserflow)上,把Bert模型下载下来,然后再应用。
在应用具体模型之前,需要先安装一下Hugging Face提供的transformers库,因为它上面的模型都是基于这个transformers库来编写的,即使下载了模型也要通过这个库来使用。(这个是必要的)
pip install transformers
此外,数据处理部分,如果不想自己重写dataset和dataloader方法的话,Hugging Face也提供了datasets库,可以通过pip install datasets
来进行安装和使用。(这个是可选的)
这两个库的使用方法,可以直接去官网查看使用文档,我觉得还是相对来说比较详细了(见Transformers和Datasets)。
此外,自己这次使用的数据集也是来自Kaggle:Quora Insincere Questions Classification | Kaggle。
7.2 文本预处理
这一部分主要参考了Kaggle上大神的代码,然后汇总了一下装进一个函数里了。以下简单举例:
- 将一些表情符号、html网址、email ids、urls全都清除:
def clean_data(data):
punct_tag = re.compile(r'[^\w\s]')
data = punct_tag.sub(r'', data)
html_tag = re.compile(r'<.*?>')
data = html_tag.sub(r'', data)
url_clean = re.compile(r"https://\S+|www\.\S+")
data = url_clean.sub(r'', data)
emoji_clean = re.compile("["
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols & pictographs
u"\U0001F680-\U0001F6FF" # transport & map symbols
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
u"\U00002702-\U000027B0"
u"\U000024C2-\U0001F251"
"]+", flags=re.UNICODE)
data = emoji_clean.sub(r'', data)
url_clean = re.compile(r"https://\S+|www\.\S+")
data = url_clean.sub(r'', data)
return data
- 清除所有格:
def strip_possessives(text):
text = text.replace("'s", '')
text = text.replace('’s', '')
text = text.replace("\'s", '')
text = text.replace("\’s", '')
return text
- 将数字替换成##:
def clean_numbers(x):
x = re.sub("[0-9]{5,}", '#####'