情感分析是自然语言处理(NLP)和会话人工智能的一个子领域,专注于通过NLP技术提取有意义的用户情感并为其分配分数。它帮助理解用户对特定服务和产品的情感和意见,从而对改进业务逻辑和组织的整体利润产生重大影响,因为它揭示了客户的偏好。在本文中,将探讨如何使用NLP和迁移学习来分析IMDB评论的情感分析。
情感分析可以通过文本预处理使用标准的NLP程序,并应用语言理解算法来预测用户情感。本教程将让亲身体验使用NLP实践和迁移学习来分析IMDB电影评论的情感。
使用的数据库是IMDB大型电影评论数据库。在开始之前,需要准备以下库:PyTorch和Torchtext,以及FastAI。
在自然语言处理中的任何数据驱动问题陈述之前,处理数据是最繁琐且关键的任务。在分析IMDB评论时,将处理大量数据。PyTorch的Torchtext库为大型数据集提供了文本预处理功能,只需几行代码即可完成!
textdata = data.Field(lower=True, tokenize=spacy_tok)
在IMDB评论的NLP文本预处理部分之后,将专注于准备数据以供语言建模。让准备数据!
modeldata = LanguageModelData(PATH, textdata, **FILES, bs=64, bptt=70, min_freq=10)
FastAI是一个专为微调预训练模型而设计的库,它专注于开发具有预训练权重的语言模型,这些模型可以针对特定任务数据集进行微调。
现在,让看看上述代码行中的参数所代表的含义:
- PATH - 指定数据集保存的位置。
- text data - 在第一步中预处理的文本数据。
- *FILES - 将数据集转换为键值对或字典数据类型。
- bs - 批处理大小。
- bptt - 反向传播通过时间,用于更新循环神经网络(如LSTM)中的权重的训练算法。
- min_freq - 最低可能的词频值,低于此值的词将被归类为未分类。
预训练模型在大量文本语料库上进行训练,非常强大和稳健。称之为迁移学习,即使用这样的预训练模型并对其进行微调以适应特定任务。简而言之,将模型获得的知识转移到微调和实现次要用例的任务上。
将在这里使用一个预训练模型来进行情感分析任务,因为它将比传统的Scikit-learn模型提供更好的结果,并且更加稳健、错误更少。
learner = modeldata.get_model(opt_fn, em_sz, nh, nl,dropouti=0.05, dropout=0.05, wdrop=0.1, dropoute=0.02, dropouth=0.05)
让看看get_model函数给出的参数所映射的含义:
- opt_fn - 优化器函数通过使用dropout和正则化的组合来优化模型性能。
- em_sz - 嵌入层的大小,通常定义了该层对每个词的输出向量的大小。
- nh - 神经网络的秘诀,nh是隐藏层的数量。
- nl - 想要的自定义神经网络中的层数。
- dropout - dropout值,默认为0.05到0.1。
- dropouti, wdrop, dropoute, dropouth - 时间参数可以忽略。
现在,预训练模型已经用数据进行了训练,并用理想的参数进行了拟合,是时候对其进行微调以进行情感分析任务,并查看性能了!
model = text_classifier_learner(textdata, AWD_LSTM, drop_mult=0.5)
model.freeze_to(-3)将模型冻结到第3个最底层,并进行拟合,解冻,并重复相同的过程,直到整个训练完成!
最后一步是评估数据的性能,这是关于分析IMDB评论的NLP。现在已经微调和训练了模型,迁移学习部分已经结束,让看看模型的工作情况!
model.load('first')
model.predict("This is by far the best sci-fi thriller. Enjoyed a lot!")
运行这个并查看结果:
(Category pos, tensor(1), tensor([7.5679e-04, 9.9456e-01]))