精华内容
下载资源
问答
  • nlp情感分析经典书籍推荐A simple tutorial to analyse the sentiment of a book in Python 一个简单的教程,用Python分析一本书的情感 入门 (Getting Started) In this tutorial, I will show you how to apply ...

    nlp情感分析经典书籍推荐

    A simple tutorial to analyse the sentiment of a book in Python

    一个简单的教程,用Python分析一本书的情感

    入门 (Getting Started)

    In this tutorial, I will show you how to apply sentiment analysis to the text contained into a book through an Unsupervised Learning (UL) technique, based on the AFINN lexicon. This tutorial exploits the afinn Python package, which is available only for English and Danish. If your text is written into a different language, you could translate it before in English and use the afinn package.

    在本教程中,我将向您展示如何基于AFINN词典通过无监督学习(UL)技术将情感分析应用于书中包含的文本。 本教程利用afinn Python软件包,该软件包仅适用于英语和丹麦语。 如果您的文字是用其他语言书写的,则可以先使用英语将其翻译,然后使用afinn软件包。

    This notebook applies sentiment analysis the Saint Augustine Confessions, which can be downloaded from the Gutemberg Project Page. The masterpiece is split in 13 books (or chapters). We have stored each book into a different file, named number.text (e.g. 1.txt and 2.txt). Each line of every file contains just one sentence.

    本笔记本对圣奥古斯丁自白进行了情感分析,可从Gutemberg Project Page下载。 杰作分为13本书(或章节)。 我们已经将每本书存储到一个名为number.text的不同文件中(例如1.txt和2.txt)。 每个文件的每一行仅包含一个句子。

    You can download the code from my Github repository: https://github.com/alod83/papers/tree/master/aiucd2021

    您可以从我的Github存储库下载代码: https//github.com/alod83/papers/tree/master/aiucd2021

    First of all import the Afinn class from the afinn package.

    首先,从afinn包中导入Afinn类。

    from afinn import Afinn

    Then create a new Afinn object, by specifying the used language.

    然后通过指定使用的语言来创建一个新的Afinn对象。

    afinn = Afinn(language=’en’)

    计算情绪 (Calculate the Sentiment)

    使用Afinn给出的分数来计算情感 (Use the score give by Afinn to calculate the sentiment)

    The afinn object contains a method, called score(), which receives a sentence as input and returns a score as output. The score may be either positive, negative or neutral. We calculate the score of a book, simply by summing all the scores of all the sentence of that book. We define three variables> pos, neg and neutral, which store respectively the sum of all the positive, negative and neutral scores of all the sentences of a book.

    afinn对象包含一个名为score()的方法,该方法接收一个句子作为输入并返回一个分数作为输出。 分数可以是正面,负面或中性。 我们只需将一本书所有句子的所有分数相加即可计算出一本书的分数。 我们定义三个变量:pos,neg和neutral,它们分别存储一本书所有句子的所有正,负和中性分数的总和。

    Firstly, we define three indexes, which will be used after.

    首先,我们定义三个索引,之后将使用它们。

    pos_index = []
    neg_index = []
    neutral_index = []

    We open the file corresponding to each book through the open() function, we read all the lines through the function file.readlines() and for each line, we calculate the score.

    我们通过open()函数open()与每本书对应的文件,通过函数file.readlines()读取所有行,并为每一行计算分数。

    Then, we can define three indexes to calculate the sentiment of a book: the positive sentiment index (pi), the negative sentiment index (ni) and the neutral sentiment index (nui). The pi of a book corresponds to the number of positive sentences in a book divided per the total number of sentences of the book. Similarly, we can calculate the ni and nui of a book.

    然后,我们可以定义三个指数来计算一本书的情绪:正情绪指数(pi),负情绪指数(ni)和中性情绪指数(nui)。 一本书的pi对应于一本书中肯定的句子数除以该书的句子总数。 同样,我们可以计算一本书的ni和nui。

    for book in range(1,14):
    file = open('sources/' + str(book) + '.txt')
    lines = file.readlines()
    pos = 0
    neg = 0
    neutral = 0
    for line in lines:
    score = int(afinn.score(line))
    if score > 0:
    pos += 1
    elif score < 0:
    neg += 1
    else:
    neutral += 1
    n = len(lines)
    pos_index.append(pos / n)
    neg_index.append(neg / n)
    neutral_index.append(neutral / n)

    绘制结果 (Plot results)

    用图形表示结果 (Give a graphical representation to results)

    Finally, we can plot results, by using the matplotlib package.

    最后,我们可以使用matplotlib软件包来绘制结果。

    import matplotlib.pyplot as plt
    import numpy as npX = np.arange(1,14)
    plt.plot(X,pos_index,'-.',label='pos')
    plt.plot(X,neg_index, '--',label='neg')
    plt.plot(X,neutral_index,'-',label='neu')
    plt.legend()
    plt.xticks(X)
    plt.xlabel('Libri')
    plt.ylabel('Indici')
    plt.grid()
    plt.savefig('plots/afinn-bsi.png')
    plt.show()
    Image for post

    经验教训 (Learned Lessons)

    In this tutorial, I have shown you a simple strategy to calculate the sentiment of the text contained into a book. This can be achieved through the afinn package provided by Python. You can follow the following steps:

    在本教程中,我向您展示了一种简单的策略来计算书中包含的文本的情感。 这可以通过Python提供的afinn包来实现。 您可以按照以下步骤操作:

    • organise the text of the book in chapters and store each chapter into a separate file

      将本书的文本按章组织,并将每章存储在单独的文件中
    • split all the sentences of each chapter in different lines

      将每一章的所有句子分成不同的行
    • calculate the score of each sentence separately through the score() method provided by the Afinn class

      通过Afinn类提供的score()方法分别计算每个句子的score()

    • calculate the positive sentiment index, the negative sentiment index and the neutral sentiment index of each chapter

      计算每章的正面情绪指数,负面情绪指数和中立情绪指数
    • plot results.

      绘制结果。

    If you want to apply Supervised Learning techniques to perform sentiment analysis, you can stay tuned :).

    如果您想应用监督学习技术来进行情绪分析,请继续保持::。

    翻译自: https://towardsdatascience.com/sentiment-analysis-of-a-book-through-unsupervised-learning-df876563dd1b

    nlp情感分析经典书籍推荐

    展开全文
  • nlp情感分析经典书籍推荐In this tutorial, I will explain how to calculate the sentiment of a book through a Supervised Learning technique, based on Support Vector Machines (SVM). 在本教程中,我将解释...

    nlp情感分析经典书籍推荐

    In this tutorial, I will explain how to calculate the sentiment of a book through a Supervised Learning technique, based on Support Vector Machines (SVM).

    在本教程中,我将解释如何基于支持向量机(SVM)通过监督学习技术来计算书籍的情感。

    This tutorial calculates the sentiment analysis of the Saint Augustine Confessions, which can be downloaded from the Gutenberg Project Page. The masterpiece is split in 13 books (chapters). We have stored each book into a different file, named number.text (e.g. 1.txt and 2.txt). Each line of every file contains just one sentence.

    本教程计算了圣奥古斯丁自白的情感分析,可以从古腾堡项目页面下载。 杰作分为13本书(每章)。 我们已经将每本书存储到一个名为number.text的不同文件中(例如1.txt和2.txt)。 每个文件的每一行仅包含一个句子。

    The jupyter notebook can be download from my Github repository: https://github.com/alod83/papers/tree/master/aiucd2021

    可以从我的Github存储库下载jupyter笔记本: https : //github.com/alod83/papers/tree/master/aiucd2021

    A similar experiment of sentiment analysis of a book can be found at the following link: https://towardsdatascience.com/sentiment-analysis-of-a-book-through-unsupervised-learning-df876563dd1b. In this case I explain how to exploit unsupervised learning techniques to perform sentiment analysis.

    可以在以下链接中找到类似的书籍情感分析实验: https : //towardsdatascience.com/sentiment-analysis-of-a-book-through-unsupervised-learning-df876563dd1b 。 在这种情况下,我解释了如何利用无监督学习技术进行情感分析。

    入门 (Getting Started)

    Supervised Learning needs some annotated text to train the model. Thus, the first step consists in reading the annotations file and store it into a dataframe. The annotation file contains for each sentence, the associated score, which is a positive, negative or null number.

    监督学习需要一些带注释的文本来训练模型。 因此,第一步是读取注释文件并将其存储到数据框中。 注释文件包含每个句子的相关分数,分数是正数,负数或空数。

    import pandas as pddf = pd.read_csv('sources/annotations.csv')
    df
    Image for post

    We can calculate some statistics regarding the annotations, such as the number of positive, negative and neutral scores, as well as the total number of annotations. We can use the count() method applied to the dataframe.

    我们可以计算一些有关注释的统计信息,例如正,负和中性分数的数量,以及注释的总数。 我们可以使用应用于数据框的count()方法。

    df.count()
    df[df['score'] > 0].count()
    df[df['score'] < 0].count()
    df[df['score'] == 0].count()

    准备训练和测试集 (Prepare the training and test sets)

    In order to calculate the sentiment of each sentence, we will exploit a Supervised Learning technique, which exploits a binary classification model. This model takes a sentence as input and returns 1 or 0, depending whether the sentence is positively rated or not. Since our model is binary, we must remove all the annotations with a neutral score.

    为了计算每个句子的情感,我们将利用一种监督学习技术,该技术利用二进制分类模型。 该模型将一个句子作为输入并返回1或0,这取决于该句子是否被正面评价。 由于我们的模型是二进制的,因此我们必须删除所有带有中性分数的注释。

    import numpy as np
    # Remove any 'neutral' ratings equal to 0
    df = df[df['score'] != 0]

    Now we can add a column to the dataframe, called Positively Rated, containing 1 or 0, depending on a positive or negative score. We use the where() method to assign the appropriate value to this new column of the dataframe.

    现在,我们可以在数据框中添加一列,称为Positively Rated ,该列包含1或0,具体取决于正分数或负分数。 我们使用where()方法为数据框的这一新列分配适当的值。

    df['Positively Rated'] = np.where(df['score'] > 0, 1, 0)

    计算情绪 (Calculate the sentiment)

    We define an auxiliary function, called calculate_indexes(), which receives as input the supervised learning model (which will be described later) and the CountVectorizer vector, as described later.

    我们定义了一个辅助函数,称为calculate_indexes() ,该函数接收监督学习模型(将在后面描述)和CountVectorizer向量作为输入,如稍后所述。

    Within the function, we open the file corresponding to each book through the open() function, we read all the lines through the function file.readlines() and for each line, we calculate the score, by applying the predict() function to the model.

    在该函数中,我们通过open()函数open()与每本书对应的文件,然后通过函数file.readlines()读取所有行,并通过将predict()函数应用于该模型。

    Then, we can define three indexes to calculate the sentiment of a book: the positive sentiment index (pi), the negative sentiment index (ni) and the neutral sentiment index (nui). The pi of a book corresponds to the number of positive sentences in a book divided per the total number of sentences of the book. Similarly, we can calculate the ni and nui of a book.

    然后,我们可以定义三个指数来计算一本书的情绪:正情绪指数(pi),负情绪指数(ni)和中性情绪指数(nui)。 一本书的pi对应于一本书中肯定的句子数除以该书的句子总数。 同样,我们可以计算一本书的ni和nui。

    def calculte_indexes(model,vect):
    pos_index = []
    neg_index = []
    neutral_index = []
    all_text = ""
    for book in range(1,14):
    file = open('sources/' + str(book) + '.txt')
    lines = file.readlines()
    pos = 0
    neg = 0
    for line in lines:
    score = model.predict(vect.transform([line]))
    if score == 1:
    pos += 1
    else:
    neg += 1
    all_text += ' ' + line.lower()
    n = len(lines)
    pos_index.append(pos / n)
    neg_index.append(neg / n)
    return pos_index,neg_index

    Now we can train the algorithm. We define two different cases: in the first case we do not consider ngrams, in the second we do. We define a function called train_algorithm(), which can be invoked by specifying the usage of ngrams.

    现在我们可以训练算法了。 我们定义了两种不同的情况:在第一种情况下,我们不考虑ngram;在第二种情况下,我们考虑。 我们定义了一个名为train_algorithm()的函数,可以通过指定ngram的用法来调用它。

    In the function, firstly we split the dataset in two parts, training and test set through the scikit-learn function called train_test_split(). The training set will be used to train the algorithm, the test set will be used to test the performance of the algorithm.

    在函数中,首先,我们通过称为train_test_split()scikit-learn函数将数据集分为训练集和测试集两部分。 训练集将用于训练算法,测试集将用于测试算法的性能。

    X_train, X_test, y_train, y_test = train_test_split(df['sentence'], 
    df['Positively Rated'], random_state=0)

    Then we build the matrix of tokens count, i.e. the matrix which contains for each sentence which tokens are available. This can be done through the class CountVectorizer, which receives as input the number of ngrams to consider. In this tutorial, only two ngrams are considered. We consider only tokens with a minimum document frequency equal to 5.

    然后,我们建立记号计数矩阵,即每个句子包含可用记号的矩阵。 这可以通过CountVectorizer类完成,该类将输入要考虑的ngram数量作为输入。 在本教程中,仅考虑两个ngram。 我们仅考虑最小文档频率等于5的令牌。

    vect = CountVectorizer(min_df=5).fit(X_train)

    Then we can build the model: we use the LinearSVC() class contained in scikit-learn and we train it with the training set model.fit(X_train_vectorized, y_train).

    然后,我们可以构建模型:我们使用scikit-learn包含的LinearSVC()类,并使用训练集model.fit(X_train_vectorized, y_train)对其进行训练。

    model = LinearSVC()
    model.fit(X_train_vectorized, y_train)

    Finally, we test the performance of the algorithm by predicting the output for the test set and comparing results with real output contained in the test set. As metrics, we measure the AUC, but we could calculate also other metrics.

    最后,我们通过预测测试集的输出并将结果与​​测试集中包含的实际输出进行比较来测试算法的性能。 作为度量,我们可以测量AUC,但也可以计算其他度量。

    predictions = model.predict(vect.transform(X_test))
    print('AUC: ', roc_auc_score(y_test, predictions))

    Once trained the model, we can calculate the indexes, through the calculte_indexes() function. Finally, we plot results.

    训练好模型后,我们可以通过calculte_indexes()函数计算索引。 最后,我们绘制结果。

    Here the full the code of the function train_algorithm().

    这里是函数train_algorithm()的完整代码。

    from sklearn.model_selection import train_test_split
    from sklearn.feature_extraction.text import CountVectorizer
    from sklearn.svm import LinearSVC
    from sklearn.metrics import roc_auc_score
    import matplotlib.pyplot as pltdef train_algorithm(df, ngrams=False):
    # Split data into training and test sets
    X_train, X_test, y_train, y_test = train_test_split(df['sentence'],
    df['Positively Rated'],
    random_state=0)
    # Fit the CountVectorizer to the training data
    vect = CountVectorizer(min_df=5).fit(X_train)
    if ngrams:
    # Fit the CountVectorizer to the training data specifiying a minimum
    # document frequency of 5 and extracting 1-grams and 2-grams
    vect = CountVectorizer(min_df=5, ngram_range=(1,2)).fit(X_train)
    print('NGRAMS')
    else:
    print('WITHOUT N-GRAMS')
    # transform the documents in the training data to a document-term matrix
    X_train_vectorized = vect.transform(X_train)
    # Train the model
    model = LinearSVC()
    model.fit(X_train_vectorized, y_train)
    # Predict the transformed test documents
    predictions = model.predict(vect.transform(X_test))print('AUC: ', roc_auc_score(y_test, predictions))
    pos_index, neg_index = calculte_indexes(model,vect)
    X = np.arange(1,14)
    plt.plot(X,pos_index,'-.',label='pos')
    plt.plot(X,neg_index, '--',label='neg')
    #plt.plot(X,neutral_index,'-',label='neu')
    plt.legend()
    plt.xticks(X)
    plt.xlabel('Libri')
    plt.ylabel('Indici')
    plt.grid()
    if ngrams:
    plt.savefig('plots/svm-ngram-bsi.png')
    else:
    plt.savefig('plots/svm-1gram-bsi.png')
    plt.show()

    进行实验 (Run experiments)

    Now we can run experiments with ngrams enabled and disabled.

    现在,我们可以运行启用和禁用ngram的实验。

    train_algorithm(df, ngrams=False)
    train_algorithm(df, ngrams=True)
    Image for post
    Experiment without n-grams
    没有n-gram的实验
    Image for post
    Experiment with n-grams
    用n-gram进行实验

    学过的知识 (Lesson learned)

    In this tutorial I have shown you how to calculate the sentiment of every chapter of a book through a Supervised Learning technique:

    在本教程中,我向您展示了如何通过“监督学习”技术来计算一本书每一章的情感:

    • Supervised Learning needs some training sets, i.e. some data annotated manually. So before starting to play with models, you should do the boring task of annotating a (small) part of your data. The bigger the training set the better the performance of the algorithm;

      监督学习需要一些训练集,即一些手动注释的数据。 因此,在开始使用模型之前,您应该完成无聊的任务,即对数据的一小部分进行注释。 训练集越大,算法的性能越好;
    • To calculate the sentiment of a sentence, you should use a (binary) classification algorithm, such as the Support Vector Machines (SVM). The scikit-learn library provides many algorithms for classification;

      要计算句子的情感,应使用(二进制)分类算法,例如支持向量机(SVM)。 scikit-learn库提供了许多分类算法。
    • Once you have chosen the model, you can train it with the training set;

      选择模型后,即可使用训练集进行训练。
    • Don’t forget to test the performance of the model :)

      不要忘记测试模型的性能:)

    翻译自: https://towardsdatascience.com/sentiment-analysis-of-a-book-through-supervised-learning-d56ba8946c64

    nlp情感分析经典书籍推荐

    展开全文
  • NLP情感分析之情感分类

    万次阅读 2018-09-26 15:38:35
    情感分析与情感分类 情感分析(sentiment analysis)是近年来国内外研究的热点,其任务是帮助用户快速获取、整理和分析相关评价信息,对带有情感色彩的主观性文本进行分析、处理、归纳和推理。 情感分析包含较多的...

    情感分析与情感分类

    情感分析(sentiment analysis)是近年来国内外研究的热点,其任务是帮助用户快速获取、整理和分析相关评价信息,对带有情感色彩的主观性文本进行分析、处理、归纳和推理。

    情感分析包含较多的任务,如情感分类(sentiment classification)、观点抽取(opinion extraction)、观点问答观点摘要等。因此很难简单地将其划归为某一个领域,往往从不同的角度将其划归到不同的方向。如果单纯地判别文本的倾向性,可以将其看作是一个分类任务;如果要从观点句中抽取相关的要素(观点持有者、观点评价对象等),则是一个信息抽取任务;而如果要从海量文本中找到对某一事物的观点,则可以看作是一个检索任务。

    随着互联网技术的迅速发展和普及,对网络内容管理、监控和有害(或垃圾)信息过滤的需求越来越大,网络信息的主观倾向性分类受到越来越多的关注。这种分类与传统的文本分类不同,传统的文本分类所关注的是文本的客观内容(objective),而倾向性分类所研究的对象是文本的“主观因素”,即作者所表达出来的主观倾向性,分类的结果是对于一个特定的文本要得到它是否支持某种观点的信息。这种独特的文本分类任务又称为情感分类

    情感分类

    情感分类是指根据文本所表达的含义和情感信息将文本划分成褒扬的或贬义的两种或几种类型,是对文本作者倾向性和观点、态度的划分,因此有时也称倾向性分析(opinion analysis)。

    情感分类作为一种特殊的分类问题,既有一般模式分类的共性问题,也有其特殊性,如情感信息表达的隐蔽性、多义性和极性不明显等。

    针对这些问题人们做了大量研究,提出了很多分类方法。这些方法可以按机器学习方法归类,也可以按情感文本的特点划分。

    1.按机器学习方法分类

    根据机器学习方法所使用训练样本的标注情况,情感文本分类可以大致分为有监督学习方法、半监督学习方法和无监督学习方法三类。

    有监督学习方法:基于有监督学习的情感分类方法使用机器学习方法用于训练大量标注样本。
    2002首次将有监督的学习方法应用到情感分类中,文献中分别比较了多种分类算法以及各种特征和特征权值选择策略在基于监督学习的情感分类中的效果。2004将主观句摘要引入情感分类中;2010分析了极性转移对情感分类的影响;2011使用基于特征空间及分类算法的集成学习方法有效地提高了情感分类的性能。

    半监督学习方法:基于半监督学习的情感分类方法是通过在少量标注样本上训练,并在大量未标注样本上进行学习的方式构建分类模型。
    2009将多种机器学习方法(例如:聚类方法、集成学习等)融入基于半监督学习的情感分类中;面对情感分类中汉语标注语料匮乏的问题,2009采用协同学习方法使用标注的英文语料和无标注的中文语料实现了高性能的中文情感分类。2010将情感文本的表达分为个人的和非个人的两种视图,应用协同学习进行情感分类的半监督学习。

    无监督学习方法:基于无监督学习的情感分类方法是指仅使用非标注样本进行情感分类建模。
    以往的大部分研究工作都是通过情感分类标注的种子词集来实现无监督分类,2002通过计算文本中候选单词与种子情感词之间的点互信息来计算文本的情感倾向性,选择“excellent”和“poor”作为种子词,在得到每个单词与种子词之间的点互信息后,根据SO-PMI计算每个词的情感倾向性,并通过词语计数的方式计算文本的整体情感倾向性。2006通过基于HowNet的语义分析抽取单词的情感信息。2009根据样本空间中文档与单词的共现关系,基于潜在狄利克雷分布(latent Dirichlet allocation,LDA)的浅层语义分析方法获取未标注样本的标签。

    2.按研究问题分类

    根据情感文本分类中侧重关注的问题,可以将情感分类研究划分为领域相关性研究和数据不平衡问题研究两类。

    领域相关性研究:情感分类是一个领域相关(domain-specific)的问题,当训练集和测试集属于不同的领域时,基于监督学习的情感分类方法通常会表现出较差的效果。因此,领域适应性(domain adaptation)研究成为一个重要课题,其目的就是尽量使情感分类器在跨领域学习时保持一定的分类性能。

    2005针对领域适应中的特征选择、分类器融合和训练集的组合等问题做了详细分析。2007提出了一种基于结构共现学习(structural correspondence learning,SCL)的情感分类领域适应方法,在跨领域情感分类中取得了较好的性能。2010利用基于图模型的Graph-Ranking算法处理中文情感分类中的领域适应问题。2011将集成学习方法应用于“多领域”情感分类,让多个领域的资源互相帮助,从而使整体的情感分类性能获得提升。

    数据不平衡问题研究:情感分类往往牵涉样本的正负类别分布不平衡的问题。

    Li et al.(2011b)对实际情况中的样本不平衡问题做了深入分析。假设在情感分类中有N个样本的训练数据,其中包含N+个正类样本和N-个负类样本。目前大多数研究总是假设正类样本数和负类样本数是平衡的,即N+=N-,但实际情况并非如此,更一般的情况是训练数据中一类样本要远远多于另一类样本。

    针对不平衡数据的有监督情感分类问题,Li et al.(2011c)提出了一种基于中心向量的不平衡情感分类方法。
    该方法包括以下几个步骤对不平衡数据的标注样本进行训练:
    ①将“多类”里面的所有训练样本进行聚类;
    ②在各个聚类里面进行内部层次采样,获得同“少类”相同规模的样本;
    ③使用这些采样样本并结合整个类的中心向量构建的新向量进行训练学习。该方法借鉴中心向量充分利用“多类”里面所有样本的分类信息,获得了比其他传统采样方法或者代价敏感方法更优的分类性能。

    针对不平衡数据的半监督情感分类问题,Li et al.(2011b)提出了一种基于协同学习的半监督学习方法。
    该方法有如下两个特点:
    ①使用欠采样技术对训练样本进行平衡采样,用于构建多个欠采样分类器,利用多个分类器对非标注样本进行标注;
    ②采用动态特征子空间的方式,即每次迭代重新生产特征子空间,增加多分类器之间的差异性,进一步提升协同学习的性能。
    实验结果表明,该方法在处理情感分类的数据不平衡问题上,能够利用非标注样本提高分类性能。另外,该工作的一个贡献是首次提出了一种针对不平衡数据分类的半监督学习方法。

    针对不平衡数据的情感分类中的主动学习问题,Li et al.(2012b)提出了一种集成确定性和不确定性样本选择策略的方法,用于主动选择不平衡数据中信息量大的样本以提高分类性能。其中,确定性和不确定性分布由两个分开的特征子空间进行控制,不确定性用于选择信息量大的样本,确定性用于选择尽量平衡的数据。此外,对于确定性判断出来的“多类”非标注样本进行自动标注,进一步降低样本的标注规模。实验证明,在同样的标注情况下该方法能够大幅度提高不平衡数据的分类性能。

     

    展开全文
  • 主要参考文献CSDN:基于机器学习的NLP情感分析(一)---- 数据采集与词向量构造方法(京东商品评论情感分析)0 情感分析(Sentiment Analysis)情感分析(Sentiment analysis),又称倾向性分析,意见抽取(Opinion ...

    主要参考文献

    CSDN:基于机器学习的NLP情感分析(一)---- 数据采集与词向量构造方法(京东商品评论情感分析)

    0 情感分析(Sentiment Analysis)

    情感分析(Sentiment analysis),又称倾向性分析,意见抽取(Opinion extraction),意见挖掘(Opinion mining),情感挖掘(Sentiment mining),主观分析(Subjectivity analysis),它是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。

    通常情感分析任务包括如下几类(我爱公开课:斯坦福大学自然语言处理第七课“情感分析(Sentiment Analysis)”):

    1. 简单分类Simplest task: Is the attitude of this text positive or negative?
    2. 复杂分类More complex: Rank the attitude of this text from 1 to 5
    3. 高级Advanced: Detect the target, source, or complex attitude types

    主流思想:

    基于情感词典:是指根据已构建的情感词典,对待分析文本进行文本处理抽取情感词,计算该文本的情感倾向,即根据语义和依存关系来量化文本的情感色彩。最终分类效果取决于情感词库的完善性,另外需要很好的语言学基础,也就是说需要知道一个句子通常在什么情况为表现为Positive和Negative。

    基于机器学习:是指选取情感词作为特征词,将文本矩阵化,利用logistic Regression, 朴素贝叶斯(Naive Bayes),支持向量机(SVM)等方法进行分类。最终分类效果取决于训练文本的选择以及正确的情感标注。

    例子:知乎:NLP情感分析|流程概述(一)

    现状:主流的是第一种方法,原因是不是所有的文本都是标注好的,机器学习的方法大多数情况都是需要对数据进行人工标注的,人工标注非常耗时耗力。另外对于特定领域,判断情感需要很多的专业知识,例如要判断一条金融新闻是利好还是利空。

    1 数据采集

    使用python3.5比较好,因为3.5对中文更友好;需要额外下载request库。

    1.1 python3.5+anaconda+TensorFlow 安装

    anaconda和TensorFlow快速安装参考下列步骤:

    • 安装之前需要注意:Windows只有python3.5才能调用tensorflow,所以要下载对应python3.5版本的anaconda3-4.2.0

    在官网下载时,注意不要盲目选择版本,留意下图中的3.5版本

    anaconda官网:https://www.anaconda.com/download/

    下载目录:https://repo.continuum.io/archive/.winzip/ 

    (参考CSDN:Tensorflow学习笔记(一)Win7+python3.5+Tensorflow+pycharm

    • python3.5版本的anaconda4.2.0安装选择正确的安装包(如图)下载安装即可。
    (参考CSDN:win7安装Anaconda+TensorFlow+配置PyCharm 安装python3.5版本的anaconda4.2.0)
    • TensorFlow安装:安装前先为tensorflow新建一个干净的环境:conda create -n tensorflow python=3.5 然后pip install tensorflow等待安装成功即可。
    (参考CSDN:Tensorflow学习笔记(一)Win7+python3.5+Tensorflow+pycharm 或者CSDN:【深度学习】windows下安装TensorFlow )
    • 配置pycharm:在【file】->【project:...】->【project interpreter】中配置即可。

    (参考CSDN:win7安装Anaconda+TensorFlow+配置PyCharm )


    另外,anaconda和TensorFlow详细安装解释见:TensorFlow在windows上安装与简单示例 ,生动细致,常见雷区,以及小例子。

    1.2 爬取数据

    爬虫入门:使用python抓取并分析京东商品评论数据

    京东爬虫,可抓取京东商品信息和评论

    分布式爬虫:从京东"窃取"150+万条数据

    2 分词

    中文分词可利用jieba, THULAC,ICTCLAS

    jieba:易用,可以添加自定义词库或者删除“无效词”(stopwords)。自定义词库按需求添加,可以不适用;但是“无效词”表达情感时没有明确的情感指向但却很常用(词频很高),因此这些词的TF-IDF仍然可能非常高,所以需要主动删除,以避免引入噪声。

    3 向量词构造

    TF-IDFbigram等。

    TF-IDF用于计算词库中最具代表性的词 。

    TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜寻引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,因特网上的搜寻引擎还会使用基于连结分析的评级方法,以确定文件在搜寻结果中出现的顺序。博客园:TF-IDF及其算法

    4 分类

    4.1 特征相关性

    PMI CSDN:点互信息(PMI,Pointwise Mutual Information)

    4.2 模型选择


    展开全文
  • python nlp情感分析之极性分析

    千次阅读 2019-12-30 21:36:02
    最近与某高校新闻媒体学院合作进行大数据情感分析,学院老师要求采用情感字典进行情感极性分析,之前做项目情感分析都是采用深度模型做的,这次打算使用情感字典进行情感极性分析,并且以后可以用来收集数据。...
  • 基于机器学习的NLP情感分析(一)—- 数据采集与词向量构造方法 最近实习期间在做一个对新闻文本情感分析的项目。在此,用京东的商品评论练手,从数据采集到模型实现完整地写一遍,以备未来回顾所需。事实上,我...
  • NLP情感分析——KNN算法

    千次阅读 2018-05-07 17:13:02
    一、 基本概念文本情感分析是对文本中的某段已知文字的两极性进行分类,判断出此文字中表述的观点是积极的、消极的、还是中性的情绪。目前的研究方法主要有两类:一种是基于情感词典的方法,另一种是基于机器学习的...
  • 2020美赛C题我使用的情感分析方法 目前,一种快速的文本情感分析程序支持英语和中文。 实现原理如下: 加载情感词典(分为正词/负词/度词/负词)和切分。 正负词的情感价值是通过关键词匹配来积累的。正负词的默认...
  • 基于机器学习的NLP情感分析(二)—- 分类问题 前文提到了如何把一个文本转换为相应的词向量,本文讨论的是如何进行分类。 feature相关性首先,需要看看我之前选出来的feature,是否能够满足需求。这里其实有很多...
  • 情感分类又称情感倾向性分析,是指对给定的文本,识别其中主观性文本的倾向是肯定还是否定的,或者说是正面还是负面的,是情感分析领域研究最多的。 分析目的:对优酷电视剧《回答明朝当王爷之杨凌传》的评论进行...
  • 一、文本分类 任务目标:在给定的分类体系中,将文本分到指定的某个或者几个类别当中。 分类体系:一般由人工构造 产品应用:如意图识别,根据query,确认query所属的类别,如娱乐、新闻、体育等。...
  • NLP作为AI当前最热门的子领域,目前重点是在使计算机能够理解和处理人类语言。百度、阿里、腾讯等大厂对于这方面相关专业人才需求很高。随着近年来UCG内容的增加,NLP在很大程度上需要解决...
  • https://zh.d2l.ai/chapter_natural-language-processing/sentiment-analysis-rnn.html
  • 情感分析是自然语言处理中常见的场景,比如淘宝商品评价,饿了么外卖评价等,对于指导产品更新迭代具有关键性作用。通过情感分析,可以挖掘产品在各个维度的优劣,从而明确如何改进产品。比如对外卖评...
  • 此前,百度大脑正式推出“EasyDL 深度学习实战营”系列课程,旨在帮助更多开发者快速 Get AI 模型训练与应用的技能。 第一节课程上线当天,开发者破千,小伙伴们纷纷上线打卡听课,我们希望和更多开发者一起“让科技...
  • 情感分析是自然语言处理中常见的场景,比如淘宝商品评价,饿了么外卖评价等,对于指导产品更新迭代具有关键性作用。通过情感分析,可以挖掘产品在各个维度的优劣,从而明确如何改进产品。比如对外卖评...
  • 目前,情感分析在中文自然语言处理(Natural Language Processing)中比较火热,很多场景下,我们都需要用到情感分析。比如,做金融产品量化交易,需要根据爬取的舆论数据...
  • 1 赛题描述 ...本练习赛所用数据,是名为「Roman Urdu DataSet」的公开数据集。 这些数据,均为文本数据。原始数据的文本,对应三类情感标签:Positive, Negative, Netural。 本练习赛,移除了标签为Netu...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,198
精华内容 479
关键字:

nlp情感分析