情感分析是自然语言处理的一部分,用于确定所观察的数据的情感是积极的、消极的还是中性的。通常情况下,情感分析是在文本数据上进行的,以帮助专业人士监测和了解他们的品牌和产品在整个行业和客户中的情感,通过采取反馈。此外,企业经常用它来检查社交媒体数据的情感,以了解品牌的声誉和客户的类型。
由于社交媒体的使用前所未有的增加,客户倾向于表达他们的想法,情感分析在监控和发展企业方面发挥着重要作用。 自动分析客户的反馈,如调查回复和社交媒体对话中的意见,使品牌能够了解什么使客户高兴或沮丧,以提高其产品和服务,满足客户的需求。
例如,使用情感分析来自动分析关于你的产品的数千条评论,将帮助你发现客户是否对你的产品价格和服务感到满意。有时,你想实时和长期地衡量社交媒体上的品牌情绪,这样你就可以立即发现不满的客户,并尽快作出回应。这样一来,情感分析的应用是无穷无尽的。所涉及的主要挑战是,人们以复杂的方式表达意见,这使得理解人类意见的主体变得困难。讽刺、反语和隐含意义等修辞手段可能会误导情感分析,这就是为什么余弦和重点意见,如产品、书籍、电影和音乐评论更容易分析。
情感分析是非常重要的,因为它允许你的企业了解你的客户对品牌的情感。通过利用社交媒体对话中的情感分析的力量,评论企业可以做出更好和有洞察力的决策。一个好的情感分析引擎可以自动将原始的、非结构化的数据转化为结构化的内容,提供对产品、服务和品牌的情感概述。
因此,在这篇文章中,我们将使用Tensorflow-Hub(TF-HUB)文本嵌入模块实现一个简单的情感分类器,并具有合理的基线准确性。估算器来自tf.estimator.Estimator类 TensorFlow提供了许多类,如LinearRegressor,以实现常见的和基本的机器学习算法。
使用TF-HUB实现情感分析
导入所有的依赖项。
import tensorflow as tf
import tensorflow_hub as hub
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
import re
import os
获取数据。
我们正在使用一个大型的电影评论数据集,数据集的内容是IMDB电影评论,由1到10的积极性标记,我们的任务是将数据标记为积极和消极情绪。
从目录中加载所有的文件到数据集。
def load_directory_and_data(directory):
data = {}
data['sentence'] = []
data['sentiment'] = []
for file_path in os.listdir(directory):
with tf.io.gfile.GFile(os.path.join(directory, file_path),'r') as f:
data['sentence'].append(f.read())
data['sentiment'].append(re.match('\d+_(\d+)\.txt',file_path).group(1))
return pd.DataFrame.from_dict(data)
合并正面和负面的例子,增加一个极性列,并进行洗牌。
def load_dataset(directory):
pos_df = load_directory_and_data(os.path.join(directory,'pos'))
neg_df = load_directory_and_data(os.path.join(directory,'neg'))
pos_df['polarity'] = 1
neg_df['polarity'] = 0
return pd.concat([pos_df,neg_df]).sample(frac=1).reset_index(drop=True)
下载并处理这些文件。
def download_load_dataset(force_download=False):
dataset = tf.keras.utils.get_file(fname='aclImdb.tar.gz',
origin='http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz',
extract=True)
train_df = load_dataset(os.path.join(os.path.dirname(dataset),
'aclImdb','train'))
test_df = load_dataset(os.path.join(os.path.dirname(dataset),
'aclImdb','test'))
return train_df,test_df
加载训练和测试数据。
train_df,test_df = download_load_dataset()
train_df.head(10)
加载模块。
在加载模块之前,我们需要创建一个输入函数,从该函数中返回pandas数据框;然后它将用于反馈给模型;下面,我们将创建训练输入函数和预测输入函数。
train_input_fn = tf.compat.v1.estimator.inputs.pandas_input_fn(
train_df, train_df['polarity'], num_epochs=None, shuffle=True)
predict_train_input_fn = tf.compat.v1.estimator.inputs.pandas_input_fn(
train_df, train_df['polarity'], shuffle=False)
predict_test_input_fn = tf.compat.v1.estimator.inputs.pandas_input_fn(
test_df, test_df['polarity'], shuffle=False)
TF-Hub提供了来自hub.text_embbeding_column()类的特征列,将给定的模块应用于文本。该模型负责处理原始文本,如删除标点符号和分割成空格。
embedded_text_feature_column = hub.text_embedding_column(key='sentence',
module_spec='https://tfhub.dev/google/nnlm-en-dim128/1')
为了对情感进行分类,我们使用估算器类的DNNClassifier。
estimator = tf.estimator.DNNClassifier(
hidden_units=[500,100],
feature_columns=[embedded_text_feature_column],
n_classes=2,
optimizer=tf.keras.optimizers.Adagrad(learning_rate=0.0003))
现在用5000步来训练估计器。
estimator.train(input_fn=train_input_fn, steps=5000)
在最后阶段的损失。
对模型进行评估。
train_eval_result = estimator.evaluate(input_fn=predict_train_input_fn)
test_eval_result = estimator.evaluate(input_fn=predict_test_input_fn)
print('Training set accuracy:{accuracy}'.format(**train_eval_result))
print('Test set accuracy {accuracy}'.format(**test_eval_result))
我们也可以使用下面的混淆矩阵来可视化预测结果。
def get_predictions(estimator, input_fn):
return [x['class_ids'][0] for x in estimator.predict(input_fn=input_fn)]
LABELS = ['negative', 'positive']
# create a confusion matrix on training data
cm = tf.math.confusion_matrix(train_df['polarity'],
get_predictions(estimator, predict_train_input_fn))
# normalize confusion matrix
cm = tf.cast(cm, dtype=tf.float32)
cm = cm/tf.math.reduce_sum(cm,axis=1)[:,np.newaxis]
sns.heatmap(cm, annot=True, xticklabels=LABELS, yticklabels=LABELS)
plt.xlabel('predicted')
plt.ylabel('True')
结语
在这篇文章中,我们已经看到了什么是情感分析,以及它对改善业务和产品的重要性。情感分析的主要优势在于它能以一种有组织的格式为你提供大量的非结构化数据。随着文章的深入,我们看到了情感分析的一个实际例子。我们使用了TF-hub中的词嵌入模块,并从Estimator类中建立了一个分类器,结果相当令人印象深刻。
参考文献
The postGuide To Build A Simple Sentiment Analyzer Using TensorFlow-Hubappeared first onAnalytics India Magazine.