用Bert NLP预训练模型建立商业评论情感分析器作为案例研究

517 阅读3分钟

简介

Al是第五代的工具,它得到了相关性,到目前为止已经在健康、农业、政治、安全、工程、商业等各个行业中找到了它的表现。特别是帮助这些行业中的数据驱动型组织获得洞察力并建立解决方案,帮助推动他们的业务向正确的方向发展。

image.png 图片来源:https://www.leewayhertz.com/ai-use-cases-and-applications/

自然语言处理(NLP)是一种人工智能科学工具,可以处理结构化和非结构化数据。它有能力用自然语言文本或语音来询问数据。它的使用案例是垃圾邮件检测、翻译、虚拟代理和聊天框、文本总结、社交媒体情感分析等。适用于医疗保健、法律、政治、金融、保险和客户服务等行业。 image.png 图片来源:https://datasciencedojo.com/blog/natural-language-processing-applications/

情感分析也被称为意见挖掘,可以被称为自然语言处理的主要工具,它使用机器学习和自然语言处理来推动客户体验和品牌声誉达到一个更高的水平,帮助组织在行业市场中建立关于其服务和产品的实时客户情感解决方案,从而提高产品开发、客户忠诚度和保留率。情感分析涉及一种自然语言处理算法,以确定文本背后的情感或情绪,为文本分配标签,这有助于对它们进行分类。

BERT、NTLK、Spacy和Stanford NLP等开源NLP库提供了用于情感分析的预训练NLP模型,NLP开发人员可以用最少的努力和时间来实现这些模型。

BERT Huggingface提供了管道API,用于将不同的预训练模型组合在一起,用于不同的NLP任务,它完全建立在Transformer的编码器上。该模型是在两个无监督的预训练任务(屏蔽语言建模和下一个序列预测)的无标签数据上训练的。

在我们的用例中,我们将从一些商业网页上刮取评论部分,使用nlptown/bert-base-multilingual-uncased-sentiment预训练模型来提供我们的类别,作为对收到的评论的评级。4或5的评级表示客户提供的评论中的正面评论,3的评级表示中性评论,1或2的评级表示负面评论。

实施BERT预训练模型

这是一个为产品评论的情感分析而微调的Bert-base-multilingual-uncased模型,它将评论的情感预测为星星的数量(1到5之间)。

导入所有必要的依赖性。

#Importing all dependencesfrom transformers import AutoTokenizer, AutoModelForSequenceClassificationimport torchimport tensorflow as tfimport requestsfrom bs4 import BeautifulSoupimport reimport pandas as pdimport numpy as np
tokenizer = AutoTokenizer.from_pretrained('nlptown/bert-base-multilingual-uncased-sentiment')# Instansiating the NLP bert model for use into our tokenizermodel = AutoModelForSequenceClassification.from_pretrained('nlptown/bert-base-multilingual-uncased-sentiment')

实例化并下载模型以供使用。

tokens = tokenizer.encode('You built a great empire an I do hope there are visionaries to sustain it', return_tensors='pt')tokens[0]result = model(tokens)result.logitsint(torch.argmax(result.logits))+1

编码器将评论解释成ASCII码供标记器使用,标记器将文本预处理成数字数组作为模型的输入,并返回概率最高的五个被屏蔽的标记的对数并打印出来。*torch.argmax(input)*返回该元素的最大值。

# Scraping the Jumia website with product about 10 reviews from the siter = requests.get('https://www.jumia.com.ng/catalog/productratingsreviews/sku/GE779EA1BY9XTNAFAMZ/')soup = BeautifulSoup(r.text, 'html.parser')regex = re.compile('-pvs')results = soup.find_all('p', {'class':regex})reviews = [result.text for result in results]

从商业网站上搜刮产品的评论,我们使用jumia网站

df1 = pd.DataFrame(np.array(reviews), columns=['review']) # Converting it to pandas dataframedf1['review'].iloc[1]df1.shape

用从网站上搜刮的评论创建一个pandas数据框。

# Sentimental Analysis function to be used on the comments scraped to pandas dataframedef sentiment_score(review):    tokens = tokenizer.encode(review, return_tensors='pt')    result = model(tokens)    return int(torch.argmax(result.logits))+1

上面的函数对我们搜刮到的评论进行情感分析,并将其放到panda的数据框中。

df1['sentiment'] = df1['review'].apply(lambda x: sentiment_score(x[:512]))

使用lambda函数和pandas的apply函数,我们可以应用并获得每条评论的每一个评分分数。

参考资料

BERT的介绍和使用方法

bert-base-multilingual-uncased-sentiment

Jumia

自然语言处理(NLP)