我最近开始学习使用Python进行NLP和机器学习。我从情感分析开始。我在理解机器学习在情感分析中如何发挥作用时遇到了困难。
假设我正在使用NLTK的SentimentIntensityAnalyzer来分析推文或新闻标题,并且我加载了相关词汇表,因此我可以获得极性、负面、正面和中性的得分。现在我不明白的是,在什么情况下我应该使用像这篇文章中的代码:
或者只是使用NLTK内置的工具,或者甚至像Google的BERT这样的工具?
任何回答或指向博客或教程的链接都将受到欢迎!
回答:
SentimentIntensityAnalyzer
是一个专门用于分析情感的工具,使用起来很简单,但可能会遗漏一些情况,例如:
In [52]: from nltk.sentiment.vader import SentimentIntensityAnalyzer In [53]: sia = SentimentIntensityAnalyzer() In [54]: sia.polarity_scores("I am not going to miss using this product.") Out[54]: {'neg': 0.0, 'neu': 0.829, 'pos': 0.171, 'compound': 0.1139}
像你链接中描述的机器学习方法更为复杂,它专注于创建特征,通常使用TF-IDF,但不限于此。然后在这些特征之上使用机器学习。这种方法依赖于足够好且足够大的训练数据集。通常,特征提取是更重要的部分,并且通常会选择一个简单的模型,如逻辑回归。
BERT是一个预训练模型,可以进行微调,尽管不需要,但我发现微调在我的经验中是有帮助的。
BERT的主要优势包括:
-
在有足够的训练数据的情况下,BERT可以非常强大,足以正确处理我文章开头的例子。这是巨大的优势。
-
由于BERT已经预训练,可能只需要相对较少的训练样本就能给出合理的良好结果。
-
因为BERT不需要(或需要很少的)特征工程,它在机器学习工程工作中可以快速获得良好的初始结果。
BERT的主要限制包括:
-
学习曲线,主要是概念上理解它是如何工作的。使用BERT并不难。
-
BERT在训练和预测时速度慢。即使对于小数据集,你也几乎必须使用至少中等配置的GPU。
-
缺乏透明度。很难知道基于BERT的模型为什么会给出这样的建议。