Better Way to model Geometric Brownian Motion

In my last article, I introduced Geometric Brownian Motion and modeled the stochastic differential equation using the famous Monte Carlo Method. As I was not satisfied with the model and was looking at other approaches I finally stumbled upon Approximate Dynamic Programming.

We will use Approximate dynamic programming (also known as reinforcement learning) to model stochastic differential equation in these article( To learn dynamic programming you can go to MIT-OpenCourseWare, https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-231-dynamic-programming-and-stochastic-control-fall-2015/index.htm ). Our approach will be as follows:

This infinite dimensional stochastic optimization problem is temporally discretized by means of suitable discretizations of the underlying SDE and it is spatially discretized by means of fully connected deep artifcial neural network approximations. The resulting infinite dimensional stochastic optimization problem is then solved by means of stochastic gradient descent type optimization algorithms( Adam Optimizer). ( To understand the complete mathematics, https://arxiv.org/abs/1806.00421 )

We model on Python using tensorflow. First we build the base functions namely the neural network and the kolmogorov train and test algorithm. we employ a fully-connected feedforward neural network with one input layer, two hidden layers, and one one-dimensional output layer in our implementations in the case of each of these examples. We also use batch normalization just before the first linear transformation, just before each of the two nonlinear activation functions in front of the hidden layers as well as just after the last linear transformation.

#tensorflow #quantitative-finance #stochastic-gradient #python #finance

What is GEEK

Buddha Community

Better Way to model Geometric Brownian Motion
Vaughn  Sauer

Vaughn Sauer

1625927340

How To Build Smaller, Faster, Better Deep Learning Models

Deep learning has broad applications in sentiment analysis, natural language understanding, computer vision, etc. The technology is growing at a breakneck speed on the back of rapid innovation. However, such innovations call for a higher number of parameters and resources. In other words, the model is as good as the metrics.

To that end, Google researcher Gaurav Menghani has published a paper on model efficiency. The survey covers the landscape of model efficiency from modelling techniques to hardware support. He proposed a method to make ‘deep learning models smaller, faster, and better’.

Challenges

Menghani argues that while larger and more complicated models perform well on the tasks they are trained on, they may not show the same performance when applied to real-life situations.

Following are the challenges practitioners face while training and deploying models:

  • The cost of training and deploying large deep learning models is high. The large models are memory-intensive and leave a bigger carbon footprint.
  • A few deep learning applications need to run in real-time on IoT and smart devices. This calls for optimisation of models for specific devices.
  • Building training models with as little data as possible when the user data might be sensitive.
  • Off the shelf models may not always be able to address the constraints of new applications.
  • Training and deployment of multiple models on the same infrastructure for different applications may exhaust available resources.

#opinions #deep learning models #gaurav menghani #google research #google researcher #mental model #smaller and better models

Better Way to model Geometric Brownian Motion

In my last article, I introduced Geometric Brownian Motion and modeled the stochastic differential equation using the famous Monte Carlo Method. As I was not satisfied with the model and was looking at other approaches I finally stumbled upon Approximate Dynamic Programming.

We will use Approximate dynamic programming (also known as reinforcement learning) to model stochastic differential equation in these article( To learn dynamic programming you can go to MIT-OpenCourseWare, https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-231-dynamic-programming-and-stochastic-control-fall-2015/index.htm ). Our approach will be as follows:

This infinite dimensional stochastic optimization problem is temporally discretized by means of suitable discretizations of the underlying SDE and it is spatially discretized by means of fully connected deep artifcial neural network approximations. The resulting infinite dimensional stochastic optimization problem is then solved by means of stochastic gradient descent type optimization algorithms( Adam Optimizer). ( To understand the complete mathematics, https://arxiv.org/abs/1806.00421 )

We model on Python using tensorflow. First we build the base functions namely the neural network and the kolmogorov train and test algorithm. we employ a fully-connected feedforward neural network with one input layer, two hidden layers, and one one-dimensional output layer in our implementations in the case of each of these examples. We also use batch normalization just before the first linear transformation, just before each of the two nonlinear activation functions in front of the hidden layers as well as just after the last linear transformation.

#tensorflow #quantitative-finance #stochastic-gradient #python #finance

郝 玉华

郝 玉华

1657276560

在 Python 中执行情感分析的 5 种方法

无论您说的是 Twitter、Goodreads 还是亚马逊——几乎没有一个数字空间不充满人们的意见。在当今世界,组织挖掘这些意见并获得有关其产品或服务的见解至关重要。然而,这些数据以如此惊人的数量存在,以至于手动测量它几乎是不可能的追求。这就是数据科学的另一个好处 ——情绪分析。在本文中,我们将探讨情感分析包含的内容以及在 Python 中实现它的各种方法。

什么是情绪分析?

情感分析自然语言处理 (NLP)的一个用例,属于文本分类的范畴。简而言之,情感分析涉及将文本分类为各种情感,如正面或负面、快乐、悲伤或中性等。因此,情感分析的最终目标是破译一个潜在的情绪、情绪或情绪。文本。这也称为意见挖掘

让我们看看快速谷歌搜索如何定义情绪分析:

情绪分析定义

通过情绪分析获得洞察力并做出决策

好吧,现在我想我们已经有点习惯了情绪分析是什么。但它的意义是什么?组织如何从中受益?让我们尝试用一个例子来探索一下。假设您创办了一家在在线平台上销售香水的公司。你推出了种类繁多的香水,很快顾客就蜂拥而至。一段时间后,你决定改变香水的定价策略——你计划提高流行香水的价格,同时为不受欢迎的香水提供折扣. 现在,为了确定哪些香水受欢迎,您开始查看所有香水的客户评论。但是你被困住了!它们是如此之多,以至于您无法在一生中将它们全部看完。这就是情绪分析可以让你摆脱困境的地方。

您只需将所有评论收集在一个地方并对其应用情绪分析。以下是对三种香水——薰衣草、玫瑰和柠檬的评论的情感分析示意图。(请注意,这些评论可能有不正确的拼写、语法和标点符号,就像在现实世界中一样)

情绪分析

从这些结果中,我们可以清楚地看到:

Fragrance-1(薰衣草)得到了客户的高度好评,这表明贵公司可以根据其受欢迎程度提高其价格。

Fragrance-2 (Rose)恰好在客户中持中立态度,这意味着贵公司不应改变其定价

Fragrance-3(柠檬)具有与之相关的整体负面情绪 - 因此,您的公司应考虑为其提供折扣以平衡规模。

这只是一个简单的示例,说明情绪分析如何帮助您深入了解您的产品/服务并帮助您的组织做出决策。

情绪分析用例

我们刚刚看到了情绪分析如何为组织提供洞察力,帮助他们做出数据驱动的决策。现在,让我们来看看更多情感分析的用例。

  1. 品牌管理的社交媒体监控:品牌可以使用情绪分析来衡量其品牌的公众形象。例如,公司可以收集所有带有公司提及或标签的推文,并执行情绪分析以了解公司的公众前景。
  2. 产品/服务分析:品牌/组织可以对客户评论进行情绪分析,以了解产品或服务在市场上的表现,并据此做出未来决策。
  3. 股价预测:预测一家公司的股票是涨还是跌,对投资者来说至关重要。可以通过对包含公司名称的文章的新闻标题进行情绪分析来确定相同的结果。如果与特定组织有关的新闻头条恰好具有积极情绪——其股价应该会上涨,反之亦然。

在 Python 中执行情感分析的方法

在执行数据科学任务时,Python 是最强大的工具之一——它提供了多种执行 情感分析的方法。这里列出了最受欢迎的:

  1. 使用文本 Blob
  2. 使用维达
  3. 使用基于词向量化的模型
  4. 使用基于 LSTM 的模型
  5. 使用基于 Transformer 的模型

让我们一一深入了解它们。

注意:为了演示方法 3 和 4(使用基于词向量化的模型和使用基于 LSTM 的模型)的情感分析。它包含 5000 多个标记为正面、负面或中性的文本摘录。该数据集位于知识共享许可下。

使用文本 Blob

Text Blob 是一个用于自然语言处理的 Python 库。使用 Text Blob 进行情绪分析非常简单。它将文本作为输入,并可以返回极性主观性作为输出。

极性决定了文本的情绪。它的值位于 [-1,1] 中,其中 -1 表示高度负面的情绪,1 表示高度正面的情绪。

主观性决定了文本输入是事实信息还是个人观点。它的值介于 [0,1] 之间,其中接近 0 的值表示一条事实信息,接近 1 的值表示个人意见。

安装

pip install textblob

导入文本块:

from textblob import TextBlob

使用文本 Blob 进行情感分析的代码实现:

使用 TextBlob 编写情绪分析代码相当简单。只需导入 TextBlob 对象并使用适当的属性传递要分析的文本,如下所示:

from textblob import TextBlob
text_1 = "The movie was so awesome."
text_2 = "The food here tastes terrible."#Determining the Polarity 
p_1 = TextBlob(text_1).sentiment.polarity
p_2 = TextBlob(text_2).sentiment.polarity#Determining the Subjectivity
s_1 = TextBlob(text_1).sentiment.subjectivity
s_2 = TextBlob(text_2).sentiment.subjectivityprint("Polarity of Text 1 is", p_1)
print("Polarity of Text 2 is", p_2)
print("Subjectivity of Text 1 is", s_1)
print("Subjectivity of Text 2 is", s_2)

输出:

Polarity of Text 1 is 1.0 
Polarity of Text 2 is -1.0 
Subjectivity of Text 1 is 1.0 
Subjectivity of Text 2 is 1.0

使用 VADER

VADER(Valence Aware Dictionary and sEntiment Reasoner)是一个基于规则的情感分析器,已经在社交媒体文本上进行了训练。就像 Text Blob 一样,它在 Python 中的使用非常简单。稍后我们将通过一个示例来了解它在代码实现中的用法。

安装:

pip install vaderSentiment

从 Vader 导入 SentimentIntensityAnalyzer 类:

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer

使用 Vader 进行情绪分析的代码:

首先,我们需要创建一个 SentimentIntensityAnalyzer 类的对象;然后我们需要将文本传递给对象的 polar_scores() 函数,如下所示:

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
sentiment = SentimentIntensityAnalyzer()
text_1 = "The book was a perfect balance between wrtiting style and plot."
text_2 =  "The pizza tastes terrible."
sent_1 = sentiment.polarity_scores(text_1)
sent_2 = sentiment.polarity_scores(text_2)
print("Sentiment of text 1:", sent_1)
print("Sentiment of text 2:", sent_2)

输出

Sentiment of text 1: {'neg': 0.0, 'neu': 0.73, 'pos': 0.27, 'compound': 0.5719} 
Sentiment of text 2: {'neg': 0.508, 'neu': 0.492, 'pos': 0.0, 'compound': -0.4767}

正如我们所见,VaderSentiment 对象返回要分析的文本的情绪分数字典。

使用基于词向量化的模型

在目前讨论的两种方法中,即 Text Blob 和 Vader,我们只是使用 Python 库来执行情绪分析。现在我们将讨论一种方法,在该方法中,我们将为该任务训练我们自己的模型。使用词袋向量化方法执行情感分析的步骤如下:

  1. 预处理训练数据的文本(文本预处理包括规范化、标记化、停用词去除和词干/词形还原。)
  2. 使用计数向量化或 TF-IDF 向量化方法为预处理的文本数据创建词袋。
  3. 在处理后的数据上训练合适的分类模型以进行情感分类。

使用词袋向量化方法进行情感分析的代码:

要使用 BOW 矢量化方法构建情绪分析模型,我们需要一个标记数据集。如前所述,用于此演示的数据集是从 Kaggle 获得的。我们简单地使用了 sklearn 的计数向量器来创建 BOW。之后,我们训练了一个多项朴素贝叶斯分类器,其准确度得分为 0.84。

数据集可以从这里获得。

#Loading the Dataset
import pandas as pd
data = pd.read_csv('Finance_data.csv')
#Pre-Prcoessing and Bag of Word Vectorization using Count Vectorizer
from sklearn.feature_extraction.text import CountVectorizer
from nltk.tokenize import RegexpTokenizer
token = RegexpTokenizer(r'[a-zA-Z0-9]+')
cv = CountVectorizer(stop_words='english',ngram_range = (1,1),tokenizer = token.tokenize)
text_counts = cv.fit_transform(data['sentences'])
#Splitting the data into trainig and testing
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(text_counts, data['feedback'], test_size=0.25, random_state=5)
#Training the model
from sklearn.naive_bayes import MultinomialNB
MNB = MultinomialNB()
MNB.fit(X_train, Y_train)
#Caluclating the accuracy score of the model
from sklearn import metrics
predicted = MNB.predict(X_test)
accuracy_score = metrics.accuracy_score(predicted, Y_test)
print("Accuracuy Score: ",accuracy_score)

输出

Accuracuy Score:  0.9111675126903553

经过训练的分类器可用于预测任何给定文本输入的情绪。

使用基于 LSTM 的模型

虽然我们能够使用词袋矢量化方法获得不错的准确度分数,但在处理更大的数据集时可能无法产生相同的结果。这就需要使用基于深度学习的模型来训练情感分析模型。

对于 NLP 任务,我们通常使用基于 RNN 的模型,因为它们旨在处理顺序数据。在这里,我们将使用TensorFlowKeras训练一个 LSTM(长短期记忆)模型。使用基于 LSTM 的模型执行情感分析的步骤如下:

  1. 预处理训练数据的文本(文本预处理包括规范化、标记化、停用词去除和词干/词形还原。)
  2. 从 Keras.preprocessing.text导入Tokenizer并创建它的对象。在整个训练文本上拟合标记器(以便标记器在训练数据词汇表上得到训练)。使用 Tokenizer 的 texts_to_sequence() 方法生成文本嵌入,并在将它们填充到相等长度后存储它们。(嵌入是文本的数字/矢量化表示。由于我们不能直接为模型提供文本数据,我们首先需要将它们转换为嵌入)
  3. 生成嵌入后,我们就可以构建模型了。我们使用 TensorFlow 构建模型——向其中添加输入、LSTM 和密集层。添加 dropout 并调整超参数以获得不错的准确度分数。通常,我们倾向于在 LSTM 模型的内层使用ReLULeakyReLU激活函数,因为它避免了梯度消失问题。在输出层,我们使用 Softmax 或 Sigmoid 激活函数。

使用基于 LSTM 的模型方法进行情感分析的代码:

在这里,我们使用了与 BOW 方法相同的数据集。获得了 0.90 的训练准确度。

#Importing necessary libraries
import nltk
import pandas as pd
from textblob import Word
from nltk.corpus import stopwords
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import classification_report,confusion_matrix,accuracy_score
from keras.models import Sequential
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.layers import Dense, Embedding, LSTM, SpatialDropout1D
from sklearn.model_selection import train_test_split 
#Loading the dataset
data = pd.read_csv('Finance_data.csv')
#Pre-Processing the text 
def cleaning(df, stop_words):
    df['sentences'] = df['sentences'].apply(lambda x: ' '.join(x.lower() for x in x.split()))
    # Replacing the digits/numbers
    df['sentences'] = df['sentences'].str.replace('d', '')
    # Removing stop words
    df['sentences'] = df['sentences'].apply(lambda x: ' '.join(x for x in x.split() if x not in stop_words))
    # Lemmatization
    df['sentences'] = df['sentences'].apply(lambda x: ' '.join([Word(x).lemmatize() for x in x.split()]))
    return df
stop_words = stopwords.words('english')
data_cleaned = cleaning(data, stop_words)
#Generating Embeddings using tokenizer
tokenizer = Tokenizer(num_words=500, split=' ') 
tokenizer.fit_on_texts(data_cleaned['verified_reviews'].values)
X = tokenizer.texts_to_sequences(data_cleaned['verified_reviews'].values)
X = pad_sequences(X)
#Model Building
model = Sequential()
model.add(Embedding(500, 120, input_length = X.shape[1]))
model.add(SpatialDropout1D(0.4))
model.add(LSTM(704, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(352, activation='LeakyReLU'))
model.add(Dense(3, activation='softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer='adam', metrics = ['accuracy'])
print(model.summary())
#Model Training
model.fit(X_train, y_train, epochs = 20, batch_size=32, verbose =1)
#Model Testing
model.evaluate(X_test,y_test)

使用基于 Transformer 的模型

基于 Transformer 的模型是最先进的自然语言处理技术之一。它们遵循基于编码器-解码器的架构,并采用自我注意的概念来产生令人印象深刻的结果。虽然总是可以从头开始构建变压器模型,但这是一项相当乏味的任务。因此,我们可以使用Hugging Face上可用的预训练变压器模型。Hugging Face 是一个开源 AI 社区,为 NLP 应用程序提供大量预训练模型。这些模型可以原样使用,也可以针对特定任务进行微调。

安装:

pip install transformers

从 Vader 导入 SentimentIntensityAnalyzer 类:

import transformers

使用基于 Transformer 的模型进行情绪分析的代码:

要使用转换器执行任何任务,我们首先需要从转换器导入管道功能。然后,创建管道函数的对象并将要执行的任务作为参数传递(即在我们的案例中进行情感分析)。我们还可以指定我们需要用来执行任务的模型。这里,由于我们没有提到要使用的模型,所以默认使用 distillery-base-uncased-finetuned-sst-2-English 模式进行情感分析。您可以在此处查看可用任务和模型的列表。

from transformers import pipeline
sentiment_pipeline = pipeline("sentiment-analysis")
data = ["It was the best of times.", "t was the worst of times."]
sentiment_pipeline(data)Output:[{'label': 'POSITIVE', 'score': 0.999457061290741},  {'label': 'NEGATIVE', 'score': 0.9987301230430603}]

结论

在这个用户可以毫不费力地表达他们的观点并且在几分之一秒内生成多余的数据的时代——从这些数据中获得洞察力对于组织做出有效决策至关重要——而情绪分析被证明是拼图中缺失的部分!

到目前为止,我们已经非常详细地介绍了情感分析的确切含义以及可以用来在 Python 中执行它的各种方法。但这些只是一些基本的演示——你一定要继续摆弄模型,并在你自己的数据上进行尝试。

资料来源:https ://www.analyticsvidhya.com/blog/2022/07/sentiment-analysis-using-python/

#python 

Pythonで感情分析を実行する5つの方法

Twitter、Goodreads、Amazonのいずれについて話しても、人々の意見で飽和していないデジタル空間はほとんどありません。今日の世界では、組織がこれらの意見を掘り下げて、自社の製品やサービスに関する洞察を得ることが重要です。ただし、このデータは、手動で測定することは不可能に近いほどの量で存在します。ここで、データサイエンスのもう1つの恩恵がもたらされます 感情分析。この記事では、感情分析に含まれるものと、Pythonでそれを実装するためのさまざまな方法について説明します。

感情分析とは何ですか?

感情分析自然言語処理(NLP)のユースケースであり、テキスト分類のカテゴリに分類されます。簡単に言うと、感情分析では、テキストをポジティブまたはネガティブ、ハッピー、悲しい、ニュートラルなどのさまざまな感情に分類します。したがって、感情分析の最終的な目標は、感情、感情、または感情の根底にある感情を解読することです。文章。これは、オピニオンマイニングとも呼ばれます。

クイックグーグル検索が感情分析をどのように定義するかを見てみましょう:

感情分析の定義

感情分析による洞察の獲得と意思決定

さて、今では、感情分析とは何かにある程度慣れていると思います。しかし、その重要性と、組織はそれからどのように利益を得るのでしょうか。例を挙げて同じことを試してみましょう。オンラインプラットフォームで香水を販売する会社を立ち上げたとします。さまざまなフレグランスを販売し、すぐに顧客が殺到し始めます。しばらくして、香水の価格戦略を変更することにしました。人気のあるフレグランスの価格を上げると同時に、人気のないフレグランスの割引を提供する予定です。 。ここで、人気のあるフレグランスを特定するために、すべてのフレグランスのカスタマーレビューを開始します。しかし、あなたは立ち往生しています!それらは非常に多いので、一生のうちにすべてを通過することはできません。これは、感情分析があなたをピットから追い出すことができる場所です。

すべてのレビューを1つの場所に集めて、感情分析を適用するだけです。以下は、香水の3つのフレグランス(ラベンダー、ローズ、レモン)のレビューに関する感情分析の概略図です。(これらのレビューには、実際のシナリオとは異なり、スペル、文法、句読点が正しくない可能性があることに注意してください)

感情分析

これらの結果から、次のことがはっきりとわかります。

Fragrance-1(Lavender)は顧客から非常に好意的なレビューを受けており、あなたの会社が人気を考えれば価格を上げることができることを示しています。

Fragrance-2(Rose)は、たまたま顧客の間で中立的な見通しを持っています。つまり、あなたの会社は価格を変更すべきではありません

Fragrance-3(Lemon)には、全体的にネガティブな感情があります。したがって、企業は、スケールのバランスをとるために、 Fragrance-3に割引を提供することを検討する必要があります。

これは、感情分析が製品/サービスへの洞察を得るのに役立ち、組織が意思決定を行うのにどのように役立つかを示す簡単な例にすぎません。

感情分析のユースケース

感情分析が、データ主導の意思決定に役立つ洞察を組織に与える方法を見てきました。それでは、感情分析のいくつかのユースケースを覗いてみましょう。

  1. ブランド管理のためのソーシャルメディアモニタリング:ブランドは、感情分析を使用して、ブランドの一般的な見通しを評価できます。たとえば、会社は、会社の言及またはタグを付けてすべてのツイートを収集し、感情分析を実行して、会社の一般的な見通しを知ることができます。
  2. 製品/サービス分析:ブランド/組織は、顧客レビューに対して感情分析を実行して、製品またはサービスが市場でどの程度うまく機能しているかを確認し、それに応じて将来の決定を下すことができます。
  3. 株価予測:企業の株価が上がるか下がるかを予測することは、投資家にとって非常に重要です。会社名を含む記事のニュースヘッドラインで感情分析を実行することで、同じことを判断できます。特定の組織に関連するニュースの見出しがたまたま前向きな感情を持っている場合、その株価は上昇するはずであり、その逆も同様です。

Pythonで感情分析を実行する方法

Pythonは、データサイエンスタスクの実行に関して最も強力なツールの1つであり、 感情分析を実行するためのさまざまな方法を提供します。最も人気のあるものはここに参加しています:

  1. テキストブロブの使用
  2. Vaderの使用
  3. BagofWordsのベクトル化ベースのモデルの使用
  4. LSTMベースのモデルの使用
  5. Transformerベースのモデルの使用

それらを1つずつ深く掘り下げていきましょう。

注:方法3および4(Bag of Wordsのベクトル化ベースのモデルの使用およびLSTMベースのモデルの使用)のデモンストレーションの目的で、感情分析が使用されています。これは、ポジティブ、ネガティブ、またはニュートラルとラベル付けされた5000を超えるテキストの抜粋で構成されています。データセットはクリエイティブコモンズライセンスの下にあります。

テキストブロブの使用

Text Blobは、自然言語処理用のPythonライブラリです。感情分析にTextBlobを使用するのは非常に簡単です。入力としてテキストを受け取り、出力として極性主観性を返すことができます。

極性はテキストの感情を決定します。その値は[-1,1]にあり、-1は非常に否定的な感情を示し、1は非常に肯定的な感情を示します。

主観性は、テキスト入力が事実情報であるか個人的な意見であるかを決定します。その値は[0,1]の間にあり、0に近い値は事実情報を示し、1に近い値は個人的な意見を示します。

インストール

pip install textblob

テキストブロブのインポート:

from textblob import TextBlob

テキストブロブを使用した感情分析のコード実装:

TextBlobを使用して感情分析用のコードを書くのはかなり簡単です。TextBlobオブジェクトをインポートし、分析するテキストを次のように適切な属性で渡すだけです。

from textblob import TextBlob
text_1 = "The movie was so awesome."
text_2 = "The food here tastes terrible."#Determining the Polarity 
p_1 = TextBlob(text_1).sentiment.polarity
p_2 = TextBlob(text_2).sentiment.polarity#Determining the Subjectivity
s_1 = TextBlob(text_1).sentiment.subjectivity
s_2 = TextBlob(text_2).sentiment.subjectivityprint("Polarity of Text 1 is", p_1)
print("Polarity of Text 2 is", p_2)
print("Subjectivity of Text 1 is", s_1)
print("Subjectivity of Text 2 is", s_2)

出力:

Polarity of Text 1 is 1.0 
Polarity of Text 2 is -1.0 
Subjectivity of Text 1 is 1.0 
Subjectivity of Text 2 is 1.0

VADERの使用

VADER(Valence Aware Dictionary and sEntiment Reasoner)は、ソーシャルメディアテキストでトレーニングされたルールベースの感情アナライザーです。Text Blobと同様に、Pythonでの使用法は非常に簡単です。しばらくの間、例を挙げてコード実装での使用法を見ていきます。

インストール:

pip install vaderSentiment

VaderからのSentimentIntensityAnalyzerクラスのインポート:

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer

Vaderを使用した感情分析のコード:

まず、SentimentIntensityAnalyzerクラスのオブジェクトを作成する必要があります。次に、次のようにテキストをオブジェクトのpolarity_scores()関数に渡す必要があります。

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
sentiment = SentimentIntensityAnalyzer()
text_1 = "The book was a perfect balance between wrtiting style and plot."
text_2 =  "The pizza tastes terrible."
sent_1 = sentiment.polarity_scores(text_1)
sent_2 = sentiment.polarity_scores(text_2)
print("Sentiment of text 1:", sent_1)
print("Sentiment of text 2:", sent_2)

出力

Sentiment of text 1: {'neg': 0.0, 'neu': 0.73, 'pos': 0.27, 'compound': 0.5719} 
Sentiment of text 2: {'neg': 0.508, 'neu': 0.492, 'pos': 0.0, 'compound': -0.4767}

ご覧のとおり、VaderSentimentオブジェクトは、分析するテキストの感情スコアの辞書を返します。

BagofWordsのベクトル化ベースのモデルの使用

まだ説明されている2つのアプローチ、つまりText BlobとVaderでは、Pythonライブラリを使用して感情分析を実行しました。次に、タスク用に独自のモデルをトレーニングするアプローチについて説明します。Bag ofWordsVectorizationメソッドを使用して感情分析を実行する手順は次のとおりです。

  1. トレーニングデータのテキストを前処理します(テキストの前処理には、正規化、トークン化、ストップワードの削除、およびステミング/レマタイズが含まれます)。
  2. カウントベクトル化またはTF-IDFベクトル化アプローチを使用して、前処理されたテキストデータ用の単語のバッグを作成します。
  3. 感情分類のために処理されたデータで適切な分類モデルをトレーニングします。

Bag of Wordsベクトル化アプローチを使用した感情分析のコード:

BOWベクトル化アプローチを使用して感情分析モデルを構築するには、ラベル付きデータセットが必要です。前述のように、このデモンストレーションに使用されるデータセットはKaggleから取得されています。sklearnのカウントベクトライザーを使用してBOWを作成しました。その後、0.84の精度スコアが得られた多項単純ベイズ分類器をトレーニングしました。

データセットはここから取得できます。

#Loading the Dataset
import pandas as pd
data = pd.read_csv('Finance_data.csv')
#Pre-Prcoessing and Bag of Word Vectorization using Count Vectorizer
from sklearn.feature_extraction.text import CountVectorizer
from nltk.tokenize import RegexpTokenizer
token = RegexpTokenizer(r'[a-zA-Z0-9]+')
cv = CountVectorizer(stop_words='english',ngram_range = (1,1),tokenizer = token.tokenize)
text_counts = cv.fit_transform(data['sentences'])
#Splitting the data into trainig and testing
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(text_counts, data['feedback'], test_size=0.25, random_state=5)
#Training the model
from sklearn.naive_bayes import MultinomialNB
MNB = MultinomialNB()
MNB.fit(X_train, Y_train)
#Caluclating the accuracy score of the model
from sklearn import metrics
predicted = MNB.predict(X_test)
accuracy_score = metrics.accuracy_score(predicted, Y_test)
print("Accuracuy Score: ",accuracy_score)

出力

Accuracuy Score:  0.9111675126903553

訓練された分類器は、任意のテキスト入力の感情を予測するために使用できます。

LSTMベースのモデルの使用

Bag of Words Vectorizationメソッドを使用して適切な精度スコアを取得することはできましたが、より大きなデータセットを処理する場合、同じ結果が得られない可能性があります。これにより、感情分析モデルのトレーニングにディープラーニングベースのモデルを採用する必要が生じます。

NLPタスクでは、シーケンシャルデータを処理するように設計されているため、通常はRNNベースのモデルを使用します。ここでは、KerasでTensorFlowを使用してLSTM(Long Short Term Memory)モデルをトレーニングします。LSTMベースのモデルを使用して感情分析を実行する手順は次のとおりです。

  1. トレーニングデータのテキストを前処理します(テキストの前処理には、正規化、トークン化、ストップワードの削除、およびステミング/レマタイズが含まれます)。
  2. Keras.preprocessing.textからTokenizerをインポートし、そのオブジェクトを作成します。トークナイザーをトレーニングテキスト全体に適合させます(トークナイザーがトレーニングデータの語彙でトレーニングされるようにします)。Tokenizerのtexts_to_sequence()メソッドを使用して生成されたテキスト埋め込みは、同じ長さにパディングした後に保存します。(埋め込みはテキストの数値/ベクトル化された表現です。モデルにテキストデータを直接フィードすることはできないため、最初にそれらを埋め込みに変換する必要があります)
  3. 埋め込みを生成したら、モデルを作成する準備が整います。TensorFlowを使用してモデルを構築します—入力、LSTM、および高密度レイヤーをモデルに追加します。ドロップアウトを追加し、ハイパーパラメータを調整して、適切な精度スコアを取得します。一般に、勾配消失問題を回避するため、LSTMモデルの内層でReLUまたはLeakyReLU活性化関数を使用する傾向があります。出力層では、SoftmaxまたはSigmoid活性化関数を使用します。

LSTMベースのモデルアプローチを使用した感情分析のコード:

ここでは、BOWアプローチの場合に使用したものと同じデータセットを使用しました。0.90のトレーニング精度が得られました。

#Importing necessary libraries
import nltk
import pandas as pd
from textblob import Word
from nltk.corpus import stopwords
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import classification_report,confusion_matrix,accuracy_score
from keras.models import Sequential
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.layers import Dense, Embedding, LSTM, SpatialDropout1D
from sklearn.model_selection import train_test_split 
#Loading the dataset
data = pd.read_csv('Finance_data.csv')
#Pre-Processing the text 
def cleaning(df, stop_words):
    df['sentences'] = df['sentences'].apply(lambda x: ' '.join(x.lower() for x in x.split()))
    # Replacing the digits/numbers
    df['sentences'] = df['sentences'].str.replace('d', '')
    # Removing stop words
    df['sentences'] = df['sentences'].apply(lambda x: ' '.join(x for x in x.split() if x not in stop_words))
    # Lemmatization
    df['sentences'] = df['sentences'].apply(lambda x: ' '.join([Word(x).lemmatize() for x in x.split()]))
    return df
stop_words = stopwords.words('english')
data_cleaned = cleaning(data, stop_words)
#Generating Embeddings using tokenizer
tokenizer = Tokenizer(num_words=500, split=' ') 
tokenizer.fit_on_texts(data_cleaned['verified_reviews'].values)
X = tokenizer.texts_to_sequences(data_cleaned['verified_reviews'].values)
X = pad_sequences(X)
#Model Building
model = Sequential()
model.add(Embedding(500, 120, input_length = X.shape[1]))
model.add(SpatialDropout1D(0.4))
model.add(LSTM(704, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(352, activation='LeakyReLU'))
model.add(Dense(3, activation='softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer='adam', metrics = ['accuracy'])
print(model.summary())
#Model Training
model.fit(X_train, y_train, epochs = 20, batch_size=32, verbose =1)
#Model Testing
model.evaluate(X_test,y_test)

Transformerベースのモデルの使用

Transformerベースのモデルは、最も高度な自然言語処理技術の1つです。それらはエンコーダー-デコーダーベースのアーキテクチャーに従い、印象的な結果を生み出すために自己注意の概念を採用しています。トランスフォーマーモデルはいつでも最初から作成できますが、非常に面倒な作業です。したがって、 HuggingFaceで利用可能な事前トレーニング済みのトランスフォーマーモデルを使用できます。Hugging FaceはオープンソースのAIコミュニティであり、NLPアプリケーション用に事前にトレーニングされた多数のモデルを提供しています。これらのモデルは、そのまま使用することも、特定のタスクに合わせて微調整することもできます。

インストール:

pip install transformers

VaderからのSentimentIntensityAnalyzerクラスのインポート:

import transformers

Transformerベースのモデルを使用した感情分析のコード:

トランスフォーマーを使用してタスクを実行するには、最初にトランスフォーマーからパイプライン関数をインポートする必要があります。次に、パイプライン関数のオブジェクトが作成され、実行されるタスクが引数として渡されます(つまり、この場合は感情分析)。タスクを実行するために使用する必要のあるモデルを指定することもできます。ここでは、使用するモデルについて言及していないため、感情分析にはデフォルトでdistillery-base-uncased-finetuned-sst-2-Englishモードが使用されます。利用可能なタスクとモデルのリストは、こちらで確認できます。

from transformers import pipeline
sentiment_pipeline = pipeline("sentiment-analysis")
data = ["It was the best of times.", "t was the worst of times."]
sentiment_pipeline(data)Output:[{'label': 'POSITIVE', 'score': 0.999457061290741},  {'label': 'NEGATIVE', 'score': 0.9987301230430603}]

結論

ユーザーが自分の視点を簡単に表現でき、データがほんの数秒で過剰に生成されるこの時代では、そのようなデータから洞察を引き出すことは、組織が効率的な意思決定を行うために不可欠です。感情分析は、パズルの欠片であることがわかります。

これまでに、感情分析に必要なものと、Pythonでそれを実行するために使用できるさまざまな方法について詳しく説明してきました。しかし、これらはほんの一部の基本的なデモンストレーションでした。必ず先に進んでモデルをいじって、自分のデータで試してみる必要があります。

ソース:https ://www.analyticsvidhya.com/blog/2022/07/sentiment-analysis-using-python/

#python 

Hoang  Kim

Hoang Kim

1657276440

5 Cách để Thực Hiện Phân Tích Cảm Xúc Bằng Python

Cho dù bạn nói về Twitter, Goodreads hay Amazon - hầu như không có một không gian kỹ thuật số nào không bão hòa với ý kiến ​​của mọi người. Trong thế giới ngày nay, điều quan trọng là các tổ chức phải tìm hiểu kỹ những ý kiến ​​này và có được những hiểu biết sâu sắc về sản phẩm hoặc dịch vụ của họ. Tuy nhiên, dữ liệu này tồn tại với số lượng đáng kinh ngạc đến mức việc đánh giá nó theo cách thủ công là một mục tiêu không thể theo đuổi tiếp theo. Đây là nơi mà một lợi ích khác của Khoa học dữ liệu đến  - Phân tích cảm xúc . Trong bài viết này, chúng ta sẽ khám phá phân tích cảm xúc bao gồm những gì và các cách khác nhau để triển khai nó trong Python.

Phân tích cảm xúc là gì?

Phân tích cảm xúc là một trường hợp sử dụng của Xử lý ngôn ngữ tự nhiên (NLP) và thuộc phạm trù phân loại văn bản . Nói một cách đơn giản, Phân tích cảm xúc bao gồm việc phân loại một văn bản thành nhiều cảm xúc khác nhau, chẳng hạn như tích cực hoặc tiêu cực, Vui vẻ, Buồn bã hoặc Trung lập, v.v. Vì vậy, mục tiêu cuối cùng của phân tích tình cảm là giải mã tâm trạng, cảm xúc hoặc tình cảm tiềm ẩn của một chữ. Đây còn được gọi là Khai thác ý kiến .

Hãy cùng chúng tôi xem xét cách tìm kiếm nhanh trên google xác định Phân tích cảm xúc:

định nghĩa phân tích tình cảm

Thu thập thông tin chi tiết và đưa ra quyết định với phân tích cảm xúc

Chà, bây giờ tôi đoán chúng ta đã phần nào quen với việc phân tích tình cảm là gì. Nhưng ý nghĩa của nó là gì và các tổ chức thu lợi từ nó như thế nào? Hãy để chúng tôi thử và khám phá điều tương tự với một ví dụ. Giả sử bạn thành lập một công ty bán nước hoa trên nền tảng trực tuyến. Bạn bày bán một loạt các loại nước hoa và chẳng bao lâu sau, khách hàng bắt đầu tràn vào. Sau một thời gian, bạn quyết định thay đổi chiến lược định giá nước hoa - bạn dự định tăng giá các loại nước hoa phổ biến và đồng thời giảm giá cho những loại nước hoa không phổ biến . Bây giờ, để xác định loại nước hoa nào được ưa chuộng, bạn bắt đầu xem xét đánh giá của khách hàng về tất cả các loại nước hoa. Nhưng bạn đang mắc kẹt! Chúng rất nhiều mà bạn không thể trải qua tất cả chúng trong một đời. Đây là nơi mà phân tích tình cảm có thể đưa bạn thoát khỏi hố sâu.

Bạn chỉ cần tập hợp tất cả các đánh giá vào một nơi và áp dụng phân tích cảm tính cho nó. Sau đây là sơ đồ phân tích tình cảm trên các bài đánh giá về ba loại nước hoa - Oải hương, Hoa hồng và Chanh. (Xin lưu ý rằng các bài đánh giá này có thể có lỗi chính tả, ngữ pháp và dấu chấm câu không chính xác như trong các tình huống thực tế)

phân tích tình cảm

Từ những kết quả này, chúng ta có thể thấy rõ rằng:

Fragrance-1 (Oải hương) được khách hàng đánh giá rất tích cực , điều này cho thấy công ty của bạn có thể tăng giá do mức độ phổ biến của nó.

Fragrance-2 (Hoa hồng) tình cờ có quan điểm trung lập với khách hàng, điều đó có nghĩa là công ty của bạn không nên thay đổi giá cả .

Fragrance-3 (Lemon) có cảm xúc tiêu cực liên quan đến nó - do đó, công ty của bạn nên xem xét giảm giá cho nó để cân bằng quy mô.

Đây chỉ là một ví dụ đơn giản về cách phân tích tình cảm có thể giúp bạn hiểu rõ hơn về sản phẩm / dịch vụ của mình và giúp tổ chức của bạn đưa ra quyết định.

Các trường hợp sử dụng phân tích cảm xúc

Chúng ta vừa thấy cách phân tích tình cảm có thể trao quyền cho các tổ chức với những hiểu biết sâu sắc có thể giúp họ đưa ra quyết định dựa trên dữ liệu. Bây giờ, chúng ta hãy đi sâu vào một số trường hợp sử dụng khác của phân tích tình cảm.

  1. Giám sát truyền thông xã hội để quản lý thương hiệu: Các thương hiệu có thể sử dụng phân tích tình cảm để đánh giá triển vọng của công chúng về Thương hiệu của họ. Ví dụ: một công ty có thể thu thập tất cả các Tweet có đề cập hoặc gắn thẻ của công ty và thực hiện phân tích tình cảm để tìm hiểu triển vọng công khai của công ty.
  2. Phân tích Sản phẩm / Dịch vụ: Các Thương hiệu / Tổ chức có thể thực hiện phân tích tình cảm trên các đánh giá của khách hàng để xem sản phẩm hoặc dịch vụ đang hoạt động tốt như thế nào trên thị trường và đưa ra các quyết định trong tương lai cho phù hợp.
  3. Dự đoán giá cổ phiếu: Dự đoán liệu cổ phiếu của một công ty sẽ tăng hay giảm là rất quan trọng đối với các nhà đầu tư. Người ta có thể xác định điều tương tự bằng cách thực hiện phân tích tình cảm trên Tiêu đề tin tức của các bài báo có chứa tên công ty. Nếu các tiêu đề tin tức liên quan đến một tổ chức cụ thể xảy ra có tâm lý tích cực - giá cổ phiếu của tổ chức đó sẽ tăng và ngược lại.

Các cách thực hiện phân tích cảm xúc bằng Python

Python là một trong những công cụ mạnh mẽ nhất khi thực hiện các nhiệm vụ khoa học dữ liệu - nó cung cấp vô số cách để thực hiện  phân tích cảm tính . Những người phổ biến nhất được tranh thủ ở đây:

  1. Sử dụng Text Blob
  2. Sử dụng Vader
  3. Sử dụng các mô hình dựa trên biểu tượng hóa Bag of Words
  4. Sử dụng Mô hình dựa trên LSTM
  5. Sử dụng mô hình dựa trên máy biến áp

Hãy đi sâu vào từng cái một.

Lưu ý: Với mục đích chứng minh phương pháp 3 & 4 (Sử dụng mô hình dựa trên hình ảnh hóa từ ngữ và sử dụng hình dựa trên LSTM) đã được sử dụng. Nó bao gồm hơn 5000 đoạn văn bản được gắn nhãn là tích cực, tiêu cực hoặc trung tính. Tập dữ liệu nằm trong giấy phép Creative Commons.

Sử dụng Text Blob

Text Blob là một thư viện Python để xử lý ngôn ngữ tự nhiên. Sử dụng Text Blob để phân tích tình cảm khá đơn giản. Nó lấy văn bản làm đầu vào và có thể trả về tính phân cựctính chủ thể làm đầu ra.

Tính phân cực quyết định tình cảm của văn bản. Giá trị của nó nằm ở [-1,1] trong đó -1 biểu thị tình cảm tiêu cực cao và 1 biểu thị cảm xúc tích cực cao.

Tính chủ quan xác định xem đầu vào văn bản là thông tin thực tế hay là ý kiến ​​cá nhân. Giá trị của nó nằm giữa [0,1] trong đó giá trị gần 0 biểu thị một phần thông tin thực tế và giá trị gần 1 biểu thị ý kiến ​​cá nhân.

Cài đặt :

pip install textblob

Nhập khối văn bản:

from textblob import TextBlob

Triển khai mã để phân tích tình cảm bằng cách sử dụng khối văn bản:

Viết mã để phân tích tình cảm bằng TextBlob khá đơn giản. Chỉ cần nhập đối tượng TextBlob và chuyển văn bản cần phân tích với các thuộc tính thích hợp như sau:

from textblob import TextBlob
text_1 = "The movie was so awesome."
text_2 = "The food here tastes terrible."#Determining the Polarity 
p_1 = TextBlob(text_1).sentiment.polarity
p_2 = TextBlob(text_2).sentiment.polarity#Determining the Subjectivity
s_1 = TextBlob(text_1).sentiment.subjectivity
s_2 = TextBlob(text_2).sentiment.subjectivityprint("Polarity of Text 1 is", p_1)
print("Polarity of Text 2 is", p_2)
print("Subjectivity of Text 1 is", s_1)
print("Subjectivity of Text 2 is", s_2)

Đầu ra:

Polarity of Text 1 is 1.0 
Polarity of Text 2 is -1.0 
Subjectivity of Text 1 is 1.0 
Subjectivity of Text 2 is 1.0

Sử dụng VADER

VADER (Valence Aware Dictionary và sEntiment Reasoner) là một công cụ phân tích tình cảm dựa trên quy tắc đã được đào tạo về văn bản trên mạng xã hội. Cũng giống như Text Blob, cách sử dụng nó trong Python khá đơn giản. Chúng ta sẽ thấy cách sử dụng của nó trong triển khai mã với một ví dụ sau.

Cài đặt:

pip install vaderSentiment

Nhập lớp SentimentIntensityAnalyzer từ Vader:

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer

Mã phân tích tình cảm bằng Vader:

Đầu tiên, chúng ta cần tạo một đối tượng của lớp SentimentIntensityAnalyzer; thì chúng ta cần truyền văn bản vào hàm polarity_scores () của đối tượng như sau:

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
sentiment = SentimentIntensityAnalyzer()
text_1 = "The book was a perfect balance between wrtiting style and plot."
text_2 =  "The pizza tastes terrible."
sent_1 = sentiment.polarity_scores(text_1)
sent_2 = sentiment.polarity_scores(text_2)
print("Sentiment of text 1:", sent_1)
print("Sentiment of text 2:", sent_2)

Đầu ra :

Sentiment of text 1: {'neg': 0.0, 'neu': 0.73, 'pos': 0.27, 'compound': 0.5719} 
Sentiment of text 2: {'neg': 0.508, 'neu': 0.492, 'pos': 0.0, 'compound': -0.4767}

Như chúng ta có thể thấy, một đối tượng VaderSentiment trả về một từ điển về điểm tình cảm cho văn bản được phân tích.

Sử dụng mô hình dựa trên hình ảnh hóa dựa trên Bag of Words

Trong hai cách tiếp cận đã thảo luận, tức là Text Blob và Vader, chúng tôi chỉ đơn giản sử dụng các thư viện Python để thực hiện phân tích tình cảm. Bây giờ chúng ta sẽ thảo luận về một cách tiếp cận, trong đó chúng ta sẽ đào tạo mô hình của riêng mình cho nhiệm vụ. Các bước liên quan đến việc thực hiện phân tích tình cảm bằng phương pháp Vectơ hóa Bag of Words như sau:

  1. Xử lý trước văn bản của dữ liệu đào tạo (Xử lý trước văn bản bao gồm Chuẩn hóa, Mã hóa, Xóa từ dừng và Tạo gốc / Bổ sung.)
  2. Tạo một Túi từ cho dữ liệu văn bản được xử lý trước bằng cách sử dụng phương pháp Vectơ hóa số lượng hoặc TF-IDF Vectơ hóa.
  3. Đào tạo một mô hình phân loại phù hợp trên dữ liệu đã xử lý để phân loại tình cảm.

Mã phân tích tình cảm sử dụng Phương pháp vector hóa Bag of Words:

Để xây dựng một mô hình phân tích tình cảm bằng cách sử dụng Phương pháp Vectơ hóa BOW, chúng ta cần một tập dữ liệu được gắn nhãn. Như đã nêu trước đó, tập dữ liệu được sử dụng cho cuộc trình diễn này đã được lấy từ Kaggle. Chúng tôi chỉ đơn giản sử dụng vectơ đếm của sklearn để tạo BOW. Sau đó, chúng tôi đã đào tạo một bộ phân loại Naive Bayes đa thức, cho điểm chính xác là 0,84.

Tập dữ liệu có thể được lấy từ đây .

#Loading the Dataset
import pandas as pd
data = pd.read_csv('Finance_data.csv')
#Pre-Prcoessing and Bag of Word Vectorization using Count Vectorizer
from sklearn.feature_extraction.text import CountVectorizer
from nltk.tokenize import RegexpTokenizer
token = RegexpTokenizer(r'[a-zA-Z0-9]+')
cv = CountVectorizer(stop_words='english',ngram_range = (1,1),tokenizer = token.tokenize)
text_counts = cv.fit_transform(data['sentences'])
#Splitting the data into trainig and testing
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(text_counts, data['feedback'], test_size=0.25, random_state=5)
#Training the model
from sklearn.naive_bayes import MultinomialNB
MNB = MultinomialNB()
MNB.fit(X_train, Y_train)
#Caluclating the accuracy score of the model
from sklearn import metrics
predicted = MNB.predict(X_test)
accuracy_score = metrics.accuracy_score(predicted, Y_test)
print("Accuracuy Score: ",accuracy_score)

Đầu ra :

Accuracuy Score:  0.9111675126903553

Bộ phân loại được đào tạo có thể được sử dụng để dự đoán cảm xúc của bất kỳ đầu vào văn bản nhất định nào.

Sử dụng mô hình dựa trên LSTM

Mặc dù chúng tôi có thể đạt được điểm chính xác khá với phương pháp Vectơ hóa Bag of Words, nhưng nó có thể không mang lại kết quả tương tự khi xử lý các bộ dữ liệu lớn hơn. Điều này làm phát sinh nhu cầu sử dụng các mô hình dựa trên học tập sâu để đào tạo mô hình phân tích tình cảm.

Đối với các tác vụ NLP, chúng tôi thường sử dụng các mô hình dựa trên RNN vì chúng được thiết kế để xử lý dữ liệu tuần tự. Ở đây, chúng tôi sẽ đào tạo mô hình LSTM (Bộ nhớ ngắn hạn dài hạn) bằng cách sử dụng TensorFlow với Keras . Các bước để thực hiện phân tích tình cảm bằng cách sử dụng các mô hình dựa trên LSTM như sau:

  1. Xử lý trước văn bản của dữ liệu đào tạo (Xử lý trước văn bản bao gồm Chuẩn hóa, Mã hóa, Xóa từ dừng và Tạo gốc / Bổ sung.)
  2. Nhập Tokenizer từ Keras.preprocessing.text và tạo đối tượng của nó. Đặt Tokenizer trên toàn bộ văn bản đào tạo (để Tokenizer được đào tạo về từ vựng dữ liệu đào tạo). Nhúng văn bản đã tạo bằng cách sử dụng phương thức text_to_sequence () của Tokenizer và lưu trữ chúng sau khi đệm chúng có độ dài bằng nhau. (Nhúng là các đại diện bằng số / vectơ của văn bản. Vì chúng tôi không thể cung cấp mô hình của mình trực tiếp với dữ liệu văn bản, trước tiên chúng tôi cần chuyển đổi chúng thành nhúng)
  3. Sau khi tạo các nhúng, chúng tôi đã sẵn sàng để xây dựng mô hình. Chúng tôi xây dựng mô hình bằng cách sử dụng TensorFlow - thêm Đầu vào, LSTM và các lớp dày đặc vào nó. Thêm người bỏ học và điều chỉnh các siêu tham số để có được điểm số chính xác khá. Nói chung, chúng tôi có xu hướng sử dụng các chức năng kích hoạt ReLU hoặc LeakyReLU trong các lớp bên trong của các mô hình LSTM vì nó tránh được vấn đề gradient biến mất. Ở lớp đầu ra, chúng tôi sử dụng chức năng kích hoạt Softmax hoặc Sigmoid.

Mã phân tích tình cảm sử dụng phương pháp tiếp cận mô hình dựa trên LSTM:

Ở đây, chúng tôi đã sử dụng cùng một tập dữ liệu như chúng tôi đã sử dụng trong trường hợp của phương pháp BOW. Độ chính xác huấn luyện là 0,90.

#Importing necessary libraries
import nltk
import pandas as pd
from textblob import Word
from nltk.corpus import stopwords
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import classification_report,confusion_matrix,accuracy_score
from keras.models import Sequential
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.layers import Dense, Embedding, LSTM, SpatialDropout1D
from sklearn.model_selection import train_test_split 
#Loading the dataset
data = pd.read_csv('Finance_data.csv')
#Pre-Processing the text 
def cleaning(df, stop_words):
    df['sentences'] = df['sentences'].apply(lambda x: ' '.join(x.lower() for x in x.split()))
    # Replacing the digits/numbers
    df['sentences'] = df['sentences'].str.replace('d', '')
    # Removing stop words
    df['sentences'] = df['sentences'].apply(lambda x: ' '.join(x for x in x.split() if x not in stop_words))
    # Lemmatization
    df['sentences'] = df['sentences'].apply(lambda x: ' '.join([Word(x).lemmatize() for x in x.split()]))
    return df
stop_words = stopwords.words('english')
data_cleaned = cleaning(data, stop_words)
#Generating Embeddings using tokenizer
tokenizer = Tokenizer(num_words=500, split=' ') 
tokenizer.fit_on_texts(data_cleaned['verified_reviews'].values)
X = tokenizer.texts_to_sequences(data_cleaned['verified_reviews'].values)
X = pad_sequences(X)
#Model Building
model = Sequential()
model.add(Embedding(500, 120, input_length = X.shape[1]))
model.add(SpatialDropout1D(0.4))
model.add(LSTM(704, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(352, activation='LeakyReLU'))
model.add(Dense(3, activation='softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer='adam', metrics = ['accuracy'])
print(model.summary())
#Model Training
model.fit(X_train, y_train, epochs = 20, batch_size=32, verbose =1)
#Model Testing
model.evaluate(X_test,y_test)

Sử dụng mô hình dựa trên máy biến áp

Các mô hình dựa trên máy biến áp là một trong những Kỹ thuật Xử lý Ngôn ngữ Tự nhiên tiên tiến nhất. Họ tuân theo kiến ​​trúc dựa trên Bộ mã hóa-Bộ giải mã và sử dụng các khái niệm về sự chú ý của bản thân để mang lại kết quả ấn tượng. Mặc dù người ta luôn có thể xây dựng một mô hình máy biến áp từ đầu, nhưng đó là một công việc khá tẻ nhạt. Do đó, chúng ta có thể sử dụng các mẫu máy biến áp đã được đào tạo trước có sẵn trên Mặt ôm . Hugging Face là một cộng đồng AI mã nguồn mở cung cấp vô số mô hình được đào tạo trước cho các ứng dụng NLP. Các mô hình này có thể được sử dụng như vậy hoặc có thể được tinh chỉnh cho các nhiệm vụ cụ thể.

Cài đặt:

pip install transformers

Nhập lớp SentimentIntensityAnalyzer từ Vader:

import transformers

Mã phân tích tình cảm bằng cách sử dụng các mô hình dựa trên Máy biến áp:

Để thực hiện bất kỳ tác vụ nào sử dụng máy biến áp, trước tiên chúng ta cần nhập chức năng đường ống từ máy biến áp. Sau đó, một đối tượng của hàm đường ống được tạo và nhiệm vụ cần thực hiện được chuyển như một đối số (tức là phân tích cảm tính trong trường hợp của chúng ta). Chúng tôi cũng có thể chỉ định mô hình mà chúng tôi cần sử dụng để thực hiện tác vụ. Ở đây, vì chúng tôi chưa đề cập đến mô hình sẽ được sử dụng, chế độ chưng cất-cơ sở-không phân biệt-finetuned-sst-2-English được sử dụng theo mặc định để phân tích cảm tính. Bạn có thể xem danh sách các nhiệm vụ và mô hình có sẵn tại đây .

from transformers import pipeline
sentiment_pipeline = pipeline("sentiment-analysis")
data = ["It was the best of times.", "t was the worst of times."]
sentiment_pipeline(data)Output:[{'label': 'POSITIVE', 'score': 0.999457061290741},  {'label': 'NEGATIVE', 'score': 0.9987301230430603}]

Sự kết luận

Trong thời đại này khi người dùng có thể bày tỏ quan điểm của mình một cách dễ dàng và dữ liệu được tạo ra một cách siêu tốc chỉ trong vài giây - việc rút ra thông tin chi tiết từ những dữ liệu đó là điều quan trọng để các tổ chức đưa ra quyết định hiệu quả - và Phân tích cảm xúc chứng tỏ là một mảnh ghép còn thiếu!

Bây giờ chúng ta đã trình bày rất chi tiết về những gì chính xác yêu cầu phân tích cảm xúc và các phương pháp khác nhau mà người ta có thể sử dụng để thực hiện nó trong Python. Nhưng đây chỉ là một số minh chứng thô sơ - bạn chắc chắn phải tiếp tục tìm hiểu các mô hình và thử chúng trên dữ liệu của riêng bạn.

Nguồn: https://www.analyticsvidhya.com/blog/2022/07/sentiment-analysis-using-python/

#python