Data Science

Python 情感分析简介

Read this post in other languages:

情感分析是最流行的文本分析方式之一。 它能让我们直观地了解人们在多种领域的感受,并在客户服务、市场与产品研究以及竞争分析等方面具有实际应用。

像其他自然语言处理 (NLP) 领域一样,情感分析也可能会有些复杂。 好在 Python 拥有出色的软件包和工具,使 NLP 的这一分支更易理解。

在这篇博文中,我们将探讨一些最流行的 Python 情感分析软件包、它们的运作方式,以及如何使用前沿技术训练您自己的情感分析模型。 我们还将分析一些使这些软件包更易用、更快速的 PyCharm 功能。

什么是情感分析?

情感分析是分析一段文本以确定其情绪基调的过程。 从这个定义中您可能可以看出,情感分析领域非常广泛,融合了自然语言处理领域内的多种方法。

您可以通过多种方式定义“情绪基调”。 最常用的方法是确定一段文本的效价(valence)极性(polarity),即文本中表达的情感是正面还是负面。 情绪基调通常也被视为文本分类问题,其中文本被归类为正面或负面。

以如下 Amazon 产品评价为例:

这显然不是一个满意的客户,情感分析技术会将这条评价归类为负面。

与之相对,来看一位更满意的买家:

这一次,情感分析技术会将其归类为正面。

不同类型的情感分析

您可以通过多种方式从文本中提取情绪信息。 我们来看其中最重要的几种。

定义情感的方式

首先,情感分析方式有多种定义情感或情绪的方式。

二分类:将文档的效价分为两类,即正面负面,如 SST-2 数据集。 与此相关的是效价的分类,添加中立类(文本不表达有关某个主题的情感)甚至冲突类(文本同时表达有关某个主题的正面和负面情感)。

一些情感分析器使用相关衡量方法将文本分为主观客观

细粒度:这个术语描述了几种不同的情感分析方式,但在这里指的是将正价和负价分解为李克特量表。 SST-5 数据集是一个著名的例子,它使用五点李克特量表,类别包括非常正面正面中立负面非常负面

连续:一段文本的效价也可以被连续衡量,分数表明作者的情感是正面还是负面。 例如,VADER 情感分析器会给一段文本一个介于 –1(强烈负面)和 1(强烈正面)之间的分数,接近 0 的分数表示中立情感。

基于情绪:也称为情绪检测或情绪识别,这种方式尝试检测一段文本中表达的特定情绪。 您可以通过两种方式来实现。 分类情绪检测尝试将文本表达的情感分为几种离散情绪之一,通常基于埃克曼模型,包括愤怒厌恶恐惧喜悦悲伤惊讶。 用于此类情绪检测的数据集有很多。 维度情绪检测在情感分析中不太常用,衡量的是一段文本的三个情绪切面极性唤醒(感觉有多刺激)和支配(情绪表达有多受限)。

分析级别

我们还可以考虑分析一段文本的不同级别。 为了更好地理解,我们来看另一条对咖啡机的评价:

文档级别:这是最基本的分析级别,将返回整段文本的一种情感。 文档级分析可能适用于非常短的文本,例如推文,但如果存在混合情感,则可能给出误导性答案。 例如,如果我们根据整个文档对此评价进行情感分析,它很可能会被分为中立或冲突,因为它对同一台咖啡机有两种相反的情感。

句子级别:在这个级别分别预测每个句子的情感。 在咖啡机评价上,句子级分析会告诉我们评价者对产品的某些部分持正面态度,但对其他部分持负面态度。 不过,这种分析并没有告诉我们评价者对这台咖啡机喜欢和不喜欢的地方。

基于切面:这类情感分析深入探究一段文本并尝试了解用户对特定切面的情感。 对于这款咖啡机的评价,评价者提到两个切面:外观噪音。 提取这些切面后,我们可以进一步了解用户具体喜欢和不喜欢什么。 用户对机器的外观持正面态度,但对机器发出的噪音持负面态度。

将情感分析与其他 NLP 技术结合

基于意图:在最后这类情感分析中,文本按两种方式分类:表达的情感和文本的主题。 例如,如果一家电信公司收到一张投诉其服务经常中断的工单,他们可以将文本意图或主题归类为服务可靠性,并将情感归类为负面。 与基于切面的情感分析一样,除了客户总体满意度之外,这种分析还可以为公司提供更多信息。

情感分析应用

现在,您可能已经想到了情感分析的一些潜在用例。 基本上,它可以用于任何可以获得有关某个主题的文本反馈或意见的地方。 组织或个人可以使用情感分析进行社交媒体监测,了解公众对品牌、政府实体或主题的感受。

客户反馈分析可以用于了解反馈或工单中表达的情感。 产品评价分析可以展示人们对公司产品的满意或不满意程度。 最后,情感分析可以成为市场研究和竞争分析的一个关键组成部分,其中公众对新兴趋势、功能和竞争对手的感受可以帮助指导公司战略。

情感分析如何运作?

总体而言,情感分析是将单词(或者,在更复杂的模型中为文本的整体基调)与情绪联系起来。 最常见的情感分析方式有以下三种。

基于词典的方式

这些方式依赖于一个词典,其中包括一系列单词的情感分数。 它们使用一组规则将这些分数结合,获得一段文本的整体情感。 这些方式往往非常快,还具有产生更细粒度的连续情感分数的优势。 不过,由于词典需要手工制作,制作起来非常耗时且成本高昂。

机器学习模型

这些方式在包含文本及其情感标签(例如电影评价)的数据集上训练机器学习模型(最常见的是朴素贝叶斯分类器)。 在模型中,文本一般被分为正面、负面,有时还有中立。 这些模型也往往非常快,但由于它们通常不考虑输入中单词之间的关系,它们可能难以处理涉及限定词和否定词的更复杂的文本。

大语言模型

这些方式依赖于在用于训练前述机器学习分类器的相同数据集上对预训练的基于 Transformer 的大语言模型进行微调。 这些复杂模型能够对文本中单词之间的复杂关系进行建模,但往往比其他两种方式慢。

Python 中的情感分析

Python 拥有丰富的 NLP 软件包生态系统,因此在使用这种语言进行情感分析时会有很多选择。

我们来看一些最流行的情感分析 Python 软件包

用于情感分析的最佳 Python 库

VADER

VADER(效价感知词典和情感推理器)是一种流行的基于词典的情感分析器。 这个分析器内置于强大的 NLTK 软件包中,返回四种情感分数:文本的正面中立负面的程度,以及复合情感分数。 正面、中立和负面分数的范围是 0 到 1,表示正面、中立或负面文本的比例。 复合分数的范围是 -1(极其负面)到 1(极其正面),表示文本的整体情感效价。

我们来看一个展示其运作方式的基本示例:

from nltk.sentiment.vader import SentimentIntensityAnalyzer
import nltk

我们首先需要下载 VADER 词典。

nltk.download('vader_lexicon')

然后,我们可以实例化 VADER SentimentIntensityAnalyzer() 并使用 polarity_scores() 方法提取情感分数。

analyzer = SentimentIntensityAnalyzer()

sentence = "I love PyCharm! It's my favorite Python IDE."
sentiment_scores = analyzer.polarity_scores(sentence)
print(sentiment_scores)
{'neg': 0.0, 'neu': 0.572, 'pos': 0.428, 'compound': 0.6696}

可以看到,VADER 给这段文本的总体情感分数为 0.67,将其内容分类为 43% 正面、57% 中立和 0% 负面。

VADER 的运作方式是在词典中查找每个单词的情感分数,然后使用一组细致规则将它们组合起来。 例如,限定词可以增加或减少单词情感的强度,因此单词前的限定词(如“a bit”)会降低情感强度,而“extremely”则会增强情感强度。

VADER 的词典包括“smh”(shaking my head,摇头)等缩写和表情符号,特别适合社交媒体文本。 VADER 的主要限制是它不适用于英语以外的语言,但您可以使用 vader-multi 等项目替代。 如果您有兴趣深入了解这个软件包,我写了一篇有关 VADER 运作方式的文章

NLTK

此外,您可以使用 NLTK 训练自己的机器学习情感分类器,使用来自 scikit-learn 的分类器。

您可以通过多种方式处理文本并馈入这些模型,但最简单的方式是基于文本中存在的单词进行处理,这种文本建模称为词袋方式。 最直接的词袋建模类型是二元矢量化,其中每个单词被视为一个特征,该特征的值为 0 或 1(分别表示该单词在文本中是否存在)。

如果您刚接触文本数据和 NLP,想要详细了解如何将文本转换为机器学习模型的输入,我在一段主题演讲中提供了简单的介绍。

NLTK 文档展示了一个示例,其中一个朴素贝叶斯分类器被训练来预测一段文本是主观还是客观。 在这个示例中,他们根据规则为一些术语添加了额外的否定限定词,这些规则表明该词或字符是否可能涉及否定文本其他地方表达的情感。 如果您想详细了解这个主题,Real Python 也提供了一个关于使用 NLTK 自行训练分类器的情感分析教程

Pattern 和 TextBlob

Pattern 软件包提供了另一种基于词典的情感分析方式。 它使用 SentiWordNet 词典,其中 WordNet 中的每个同义词组 (synset) 都被指定一个正面、负面和客观性的分数。 每个单词的正负分数通过一系列规则合并,得出最终的极性分数。 同样,每个单词的客观分数合并,得出最终的主观分数。

由于 WordNet 包含词性信息,规则可以考虑单词前面的形容词或副词是否会改变其情感。 规则集还考虑了否定、感叹号和表情符号,甚至包括一些处理成语和讽刺的规则。

不过,Pattern 作为独立库仅与 Python 3.6 兼容。 因此,使用 Pattern 的最常见方式是通过 TextBlobTextBlob 情感分析器默认使用自己的 Pattern 库实现来生成情感分数。

我们来看看它的实际运作:

from textblob import TextBlob

您可以看到我们在文本上运行 TextBlob 方法,然后使用 sentiment 特性提取情感。

pattern_blob = TextBlob("I love PyCharm! It's my favorite Python IDE.")
sentiment = pattern_blob.sentiment

print(f"Polarity: {sentiment.polarity}")
print(f"Subjectivity: {sentiment.subjectivity}")
Polarity: 0.625
Subjectivity: 0.6

对于我们的例句,TextBlob 中的 Pattern 给出了极性分数 0.625(相对接近 VADER 给出的分数)和主观分数 0.6。

但在 TextBlob 中还有第二种获取情感分数的方式。 这个软件包还包括一个预训练的朴素贝叶斯分类器,它会将一段文本标记为正面或负面,并给出文本为正面或负面的概率。

要使用此方式,我们首先需要从 NLTK 下载 punkt 模块和 movie-reviews 数据集,用于训练此模型。

import nltk
nltk.download('movie_reviews')
nltk.download('punkt')

from textblob import TextBlob
from textblob.sentiments import NaiveBayesAnalyzer

同样,我们需要在文本上运行 TextBlob,但这次我们添加实参 analyzer=NaiveBayesAnalyzer()。 然后,和先前一样,我们使用 sentiment 特性提取情感分数。

nb_blob = TextBlob("I love PyCharm! It's my favorite Python IDE.", analyzer=NaiveBayesAnalyzer())
sentiment = nb_blob.sentiment
print(sentiment)
Sentiment(classification='pos', p_pos=0.5851800554016624, p_neg=0.4148199445983381)

这次我们得到一个 pos(positive,正面)标签,模型预测该文本为正面的概率为 59%,为负面的概率为 41%。

spaCy

另一种选择是使用 spaCy 进行情感分析。 spaCy 是 Python 中的另一个流行 NLP 软件包,并且具有广泛的文本处理选项。

第一种方式是使用 spacytextblob 插件将 TextBlob 情感分析器作为 spaCy 管道的一部分。 在执行此操作之前,首先需要安装 spacyspacytextblob 并下载合适的语言模型。

import spacy
import spacy.cli
from spacytextblob.spacytextblob import SpacyTextBlob

spacy.cli.download("en_core_web_sm")

然后,加载此语言模型并将 spacytextblob 添加到文本处理管道中。 TextBlob 可以通过 spaCy 的 pipe 方法使用,这意味着我们可以将其作为更复杂的文本处理管道的一部分,包括词性标注、词形还原和命名实体识别等预处理步骤。 预处理可以规范和丰富文本,帮助下游模型从文本输入中获取最多信息。

nlp = spacy.load('en_core_web_sm')
nlp.add_pipe('spacytextblob')

现在,我们将只分析例句,不进行预处理:

doc = nlp("I love PyCharm! It's my favorite Python IDE.")

print('Polarity: ', doc._.polarity)
print('Subjectivity: ', doc._.subjectivity)
Polarity:  0.625
Subjectivity:  0.6

我们得到的结果与上面使用 TextBlob 时相同。

在 spaCy 中进行情感分析的第二种方式是使用 TextCategorizer 类训练自己的模型。 这样一来,您可以使用情感分析训练集训练一系列 spaCY 创建的模型。 同样,由于这可以用作 spaCy 管道的一部分,在训练模型之前,您有许多预处理文本的选择。

最后,您可以使用大语言模型通过 spacy-llm 进行情感分析。 这样一来,您可以提示来自 OpenAI、Anthropic、Cohere 和 Google 的各种专有大语言模型 (LLM) 对文本执行情感分析。

这种方式与我们讨论过的其他方式略有不同。 我们可以使用 GPT-4 这样的通用模型来预测文本的情感,而无需训练模型。 为此,您可以选择零样本学习(提示被传递到模型但没有示例)或少样本学习(提示和少许示例被传递到模型)。

Transformers

我们将讨论的用于情感分析的最后一个 Python 软件包是 Hugging FaceTransformers

Hugging Face 托管所有主要开源 LLM 供免费使用(以及其他模型,包括计算机视觉和音频模型),并提供了一个用于训练、部署和共享这些模型的平台。 它的 Transformers 软件包提供了广泛的功能(包括情感分析),可与 Hugging Face 托管的 LLM 配合使用。

理解情感分析器的结果

现在,我们已经介绍过使用 Python 进行情感分析的所有方式,您可能会想:“我怎样才能把它应用到自己的数据呢?”

为了理解这一点,我们使用 PyCharm 比较 VADER 和 TextBlob 这两个软件包。 它们的多种情感分数为我们的数据提供了一些不同的视角。 我们将使用这些软件包分析 Amazon 评价数据集。

PyCharm Professional 是一款用于数据科学的强大 Python IDE,支持高级 Python 代码补全、检查和调试、丰富的数据库JupyterGitConda 等 – 全部开箱即用。 此外,您还将获得非常有用的功能,例如我们的 DataFrame Column Statistics(列统计信息)和 Chart View(图表视图),以及 Hugging Face 集成,从而更快更轻松地使用 LLM。 在这篇博文中,我们将探索 PyCharm 处理 DataFrame 的高级功能,由此快速了解​​情感分数在两个软件包之间的分布。

如果您现在打算开始自己的情感分析项目,您可以激活 PyCharm 的三个月免费订阅。 点击下方链接,输入此促销代码:PCSA24。 然后,您将通过电子邮件收到激活码。

我们首先需要加载数据。 我们可以使用 Datasets 软件包中的 load_dataset() 方法从 Hugging Face Hub 下载这些数据

from datasets import load_dataset
amazon = load_dataset("fancyzhx/amazon_polarity")

将鼠标悬停在数据集名称上即可在 PyCharm 内查看 Hugging Face 数据集卡,这样一来,无需离开 IDE 即可轻松获取有关 Hugging Face 资产的信息。

我们在这里可以看到此数据集的内容:

amazon
DatasetDict({
    train: Dataset({
        features: ['label', 'title', 'content'],
        num_rows: 3600000
    })
    test: Dataset({
        features: ['label', 'title', 'content'],
        num_rows: 400000
    })
})

训练数据集有 360 万个观测,测试数据集包含 400,000 个。 在本教程中,我们将使用训练数据集。

现在,加载 VADER SentimentIntensityAnalyzer 和 TextBlob 方法。

from nltk.sentiment.vader import SentimentIntensityAnalyzer
import nltk

nltk.download("vader_lexicon")

analyzer = SentimentIntensityAnalyzer()
from textblob import TextBlob

训练数据集包含太多观测,难以轻松直观呈现,因此我们将随机抽取 1,000 条评价来代表所有评价者的总体情感。

from random import sample
sample_reviews = sample(amazon["train"]["content"], 1000)

现在,我们来获取每条评价的 VADER 和 TextBlob 分数。 我们将循环遍历每条评价文本,通过情感分析器运行,然后将分数附加到专用列表。

vader_neg = []
vader_neu = []
vader_pos = []
vader_compound = []
textblob_polarity = []
textblob_subjectivity = []

for review in sample_reviews:
   vader_sent = analyzer.polarity_scores(review)
   vader_neg += [vader_sent["neg"]]
   vader_neu += [vader_sent["neu"]]
   vader_pos += [vader_sent["pos"]]
   vader_compound += [vader_sent["compound"]]
  
   textblob_sent = TextBlob(review).sentiment
   textblob_polarity += [textblob_sent.polarity]
   textblob_subjectivity += [textblob_sent.subjectivity]

接下来,我们将每个列表作为单独的列填充到 pandas DataFrame 中:

import pandas as pd

sent_scores = pd.DataFrame({
   "vader_neg": vader_neg,
   "vader_neu": vader_neu,
   "vader_pos": vader_pos,
   "vader_compound": vader_compound,
   "textblob_polarity": textblob_polarity,
   "textblob_subjectivity": textblob_subjectivity
})

现在,可以开始探索结果了。

通常,这时我们会开始创建一堆用于探索性数据分析的代码。 可以使用 pandas 的 describe 方法获取我们列的汇总统计数据,并编写 Matplotlibseaborn 代码来直观呈现结果。 不过,PyCharm 有一些功能可以加快整个过程。

我们继续,打印 DataFrame。

sent_scores

我们在右上角可以看到 Show Column Statistics(显示列统计信息)按钮。 点击按钮会给出两个选项:Compact(紧凑)和 Detailed(详细)。 我们选择 Detailed(详细)。

现在,汇总统计信息已经作为列标题的一部分提供! 可以看到 VADER 复合分数的平均值是 0.4(中位数 = 0.6),TextBlob 极性分数的平均值是 0.2(中位数 = 0.2)。

结果表明,平均而言,VADER 对同一组评价的评估比 TextBlob 更为正面。 它还表明,对于这两种情感分析器来说,我们的正面评价可能多于负面评价 – 我们可以查看一些可视化效果来更详细地探讨这一点。

我们可以使用的另一个 PyCharm 功能是 DataFrame Chart View(图表视图)。 这个功能的按钮位于左上角。

点击按钮后,我们将切换到图表编辑器。 在这里,我们可以直接从 DataFrame 创建无代码可视化。

我们从 VADER 的复合分数开始。 要开始创建此图表,请转到右上角的 Show Series Settings(显示系列设置)。

移除 X Axis(X 轴)和 Y Axis(Y 轴)的默认值。 将 X Axis(X 轴)值替换为 vader_compound,将 Y Axis(Y 轴)值替换为 vader_compound。 点击 Y Axis(Y 轴)字段中变量名称旁边的箭头,然后选择 count

最后,从图表图标中选择 Histogram(直方图),就在 Series Settings(系列设置)下方。 VADER 复合分数可能呈现双峰分布,在 -0.8 左右有一个小峰值,在 0.9 左右有一个更大的峰值。 这个峰值可能代表了负面评价和正面评价的分裂。 正面评价也远多于负面评价。

我们重复相同的操作,创建一个直方图来查看 TextBlob 极性分数的分布。

相比之下,TextBlob 倾向于将大多数评价评为中立,很少有评价被评为强烈正面或负面。 为了理解为什么这两个情感分析器提供的分数存在差异,我们看一下 VADER 评为强烈正面的评价,以及 VADER 评为强烈负面但 TextBlob 评为中立的评价。

我们取第一条 VADER 评为正面但 TextBlob 评为中立的评价的索引:

sent_scores[(sent_scores["vader_compound"] >= 0.8) & (sent_scores["textblob_polarity"].between(-0.1, 0.1))].index[0]
42

接下来,我们取第一条 VADER 评为负面但 TextBlob 评为中立的评价的索引:

sent_scores[(sent_scores["vader_compound"] <= -0.8) & (sent_scores["textblob_polarity"].between(-0.1, 0.1))].index[0]
0

我们首先检索正面评价:

sample_reviews[42]
"I love carpet sweepers for a fast clean up and a way to conserve energy. The Ewbank Multi-Sweep is a solid, well built appliance. However, if you have pets, you will find that it takes more time cleaning the sweeper than it does to actually sweep the room. The Ewbank does pick up pet hair most effectively but emptying it is a bit awkward. You need to take a rag to clean out both dirt trays and then you need a small tooth comb to pull the hair out of the brushes and the wheels. To do a proper cleaning takes quite a bit of time. My old Bissell is easier to clean when it comes to pet hair and it does a great job. If you do not have pets, I would recommend this product because it is definitely well made and for small cleanups, it would suffice. For those who complain about appliances being made of plastic, unfortunately, these days, that's the norm. It's not great and plastic definitely does not hold up but, sadly, product quality is no longer a priority in business."

这条评价似乎正负参半,但总体比较正面。

现在,我们来看看负面评价:

sample_reviews[0]
'The only redeeming feature of this Cuisinart 4-cup coffee maker is the sleek black and silver design. After that, it rapidly goes downhill. It is frustratingly difficult to pour water from the carafe into the chamber unless it's done extremely slow and with accurate positioning. Even then, water still tends to dribble out and create a mess. The lid, itself, is VERY poorly designed with it's molded, round "grip" to supposedly remove the lid from the carafe. The only way I can remove it is to insert a sharp pointed object into one of the front pouring holes and pry it off! I've also occasionally had a problem with the water not filtering down through the grounds, creating a coffee ground lake in the upper chamber and a mess below. I think the designer should go back to the drawing-board for this one.'

这条评价毫无疑问是负面的。 比较两者,VADER 似乎更准确,但它确实倾向于过度优先考虑文本中的正面词语。

我们最后要考虑的是每条评价的主观和客观程度。 为此,我们创建 TextBlob 主观分数的直方图。

有趣的是,评价中的主观分布很好,大多数评价都是主观和客观书写的混合。 少数评价也非常主观(接近 1)或非常客观(接近 0)。

它们之间的分数为我们提供了一种很好的数据分割方法。 如果需要了解人们对产品的客观评价,可以查看主观分数较低的评价以及 VADER 复合分数接近 1 和 -1 的评价。

相反,如果想了解人们对产品的情绪反应,您可以选择主观分数高、VADER 复合分数高和低的评价。

需要考虑的事情

与自然语言处理中的问题一样,进行情感分析时需要注意许多事项。

最重要的考量因素之一是待分析文本的语言。 许多基于词典的方式仅适用于有限数量的语言,因此如果您使用这些词典不支持的语言,则可能需要采用另一种方式,例如使用微调的 LLM 或训练您自己的模型。

随着文本复杂度的增加,基于词典的分析器和基于词袋的模型也会很难正确检测情感。 讽刺或更微妙的上下文指标对于简单的模型来说可能很难检测到,并且这些模型可能无法准确地对此类文本的情感进行分类。 LLM 可能能够处理更复杂的文本,但您需要尝试不同的模型。

最后,在进行情感分析时,也会出现与处理任何机器学习问题时相同的问题。 您的模型的好坏取决于使用的训练数据。 如果无法获得适合问题领域的高质量训练和测试数据集,您将无法正确预测目标受众的情感。

您还应该确保目标适合业务问题。 建立模型来了解产品是否会让客户感到“伤心”、“愤怒”或“厌恶”可能看起来很有吸引力,但如果这不能帮助您决定如何改进产品,那么它就无法解决您的问题。

总结

在这篇博文中,我们深入探讨了 Python 情感分析这个有趣的领域,并展示了如何通过一系列强大的软件包让这个复杂的领域更易理解。

我们介绍了情感分析的潜在应用、评估情感的不同方式以及从文本中提取情感的主要方式。 我们还看到 PyCharm 中的一些实用功能,它们让使用模型和解释其结果变得更简单、更快捷。

虽然自然语言处理领域目前主要关注大语言模型,但使用基于词典的分析器或传统机器学习模型(如朴素贝叶斯分类器)的旧技术在情感分析中仍然占有一席之地。 在分析较简单的文本时,或者当速度、预测或易于部署是优先事项时,这些技术非常有用。 LLM 最适合更复杂或更细微的文本。

现在,您已经掌握了基础知识,可以在我们的教程中学习如何使用 LLM 进行情感分析。 分步指南可以帮助您了解如何为任务选择正确的模型、使用它进行情感分析,甚至自行微调。

阅读这篇博文后,如果您想进一步更广泛地学习自然语言处理或机器学习,可以参考以下资源:

立即开始使用 PyCharm 进行情感分析

如果您现在打算开始自己的情感分析项目,您可以激活 PyCharm 的三个月免费订阅。 点击下方链接,输入此促销代码:PCSA24。 然后,您将通过电子邮件收到激活码。

本博文英文原作者:

Jodie Burchell

Jodie Burchell

Dr. Jodie Burchell is the Developer Advocate in Data Science at JetBrains, and was previously a Lead Data Scientist at Verve Group Europe. She completed a PhD in clinical psychology and a postdoc in biostatistics, before leaving academia for a data science career. She has worked for 7 years as a data scientist in both Australia and Germany, developing a range of products including recommendation systems, analysis platforms, search engine improvements and audience profiling. She has held a broad range of responsibilities in her career, doing everything from data analytics to maintaining machine learning solutions in production. She is a long time content creator in data science, across conference and user group presentations, books, webinars, and posts on both her own and JetBrain’s blogs.

image description

Discover more