使用 TF-IDF 向量大小的 NLP 情感分析
NLP Sentiment Analysis using TF-IDF Vector Size
我对 NLP 和情绪分析比较陌生,但我参加了机器学习 class 并且正在创建一个情绪分析 NLP,它将阅读一篇金融文章并确定整体情绪是否正确是好是坏。
目前,我有大约 2000 篇文章的数据集。我知道我需要实现 TF-IDF 向量方法以将数据集中的所有实例转换为相同的向量 space。另外,我知道 TF-IDF 需要一个 "Vocabulary" 并且这个 "Vocabulary" 的大小是向量的长度,每个向量代表一篇文章。
我的问题是,如何确定这个词汇表?我发现的一种方法是实施预处理(去除停用词、嘈杂词、标点符号等),然后使用训练集中每篇文章中的所有词。从这里您可以删除实例很少的单词(不重要的单词)并删除实例太多的单词(非可区分的单词)。但是,在我看来,"Vocabulary" 仍然会很大,因此向量大小会非常大。
总的来说,这种做法看似合乎逻辑,但处理量大。我觉得最初创建一个包含每篇文章中所有单词的 "Vocabulary" 将是巨大的。然后遍历每篇文章以查看 "Vocabulary" 中的单词出现了多少次将需要大量的处理能力。如果我正在使用 NLTK 和 scikit-learn,我有什么需要担心的吗?如果是这样,是否有更好的创建词汇表的方法?
首先,我认为你没有什么可担心的。这些库是用来处理这样的(实际上甚至更大的)数据集的。一些方法阅读了英文维基百科的所有页面,所以2000篇文章似乎很容易。
有一些方法可以创建更小、更有效的词汇表来描述每个单词。例如,您可以检查 "word to vec",这是 NLP 中非常重要的一部分。我什至建议在你的情况下使用它,因为它往往在情感分析等任务中取得更好的结果(但是,如果该课程专门教授 TF-IDF,那么我显然撤回了这个建议)。
如果你的词汇量对你来说太大了,你也可以选择不同的词干分析器(你用来在预处理阶段从单词中删除标点符号的东西)。虽然最常用的词干提取器是 "Snowball",但 "Lancaster" 更具侵略性(因此会导致单词之间的差异更小)。你可以在这里阅读:What are the major differences and benefits of Porter and Lancaster Stemming algorithms?
享受了解 NLP 的乐趣,这是一个了不起的学科:)
情绪分析的一种基本方法,涉及从训练语料库中制作词汇表,并将其用于为您的数据制作特征向量。几十万个单词的词汇量是很常见的,不用担心。这种方法的主要挑战实际上与您的想法相反。您应该找到增加而不是减少词汇量的方法。
您也可以尝试使用其他情感分析词典来增强词汇量,例如 SentiWordNet。
就您的方法的实施而言,您可以构建一个 scikit 管道,其中包含 CountVectorize to build vocabulary and feature vector. One advantage of using CountVectorize() for building vocabulary is that it uses a sparse matrix for building the vector which handles your concern of large size. Then using TfIdf Vectorizer 用于计算词频和逆词频,最后是训练模型。
除了纯粹的词袋之外,考虑向您的向量添加更多特征。如果您想对我的实施有所了解,请务必执行 GridSearch on your model and preprocessing stages to fine-tune the parameters for best accuracy. I recently did a similar project for sentiment analysis of stocktwits data. I used a Naive Bayes classifier and got an accuracy of 72%. Naive Bayes proved to be better than even some deep learning models like RNN/DNN classifiers. The model selection, though independent of your question, is an integral part of building your project so keep tweaking it till you get good results. Check out my project。
做项目时请注意以下几点:
- 一些研究人员认为停用词实际上增加了情绪的意义,所以我建议不要在预处理阶段删除它们。参见 this paper
- 在进行情感分析时始终使用领域知识。在“可预测 电影”等一个领域中的负面情绪在“可预测 股票市场”等其他领域可能是积极的。
- 不要自行从词汇表中删除单词(根据您在问题中提到的频率)。 TfIdf 规范化仅用于此目的。
情感分析领域充满了无数的研究和激动人心的新技术。我建议您阅读该领域先驱的一些论文,例如 this。
我对 NLP 和情绪分析比较陌生,但我参加了机器学习 class 并且正在创建一个情绪分析 NLP,它将阅读一篇金融文章并确定整体情绪是否正确是好是坏。
目前,我有大约 2000 篇文章的数据集。我知道我需要实现 TF-IDF 向量方法以将数据集中的所有实例转换为相同的向量 space。另外,我知道 TF-IDF 需要一个 "Vocabulary" 并且这个 "Vocabulary" 的大小是向量的长度,每个向量代表一篇文章。
我的问题是,如何确定这个词汇表?我发现的一种方法是实施预处理(去除停用词、嘈杂词、标点符号等),然后使用训练集中每篇文章中的所有词。从这里您可以删除实例很少的单词(不重要的单词)并删除实例太多的单词(非可区分的单词)。但是,在我看来,"Vocabulary" 仍然会很大,因此向量大小会非常大。
总的来说,这种做法看似合乎逻辑,但处理量大。我觉得最初创建一个包含每篇文章中所有单词的 "Vocabulary" 将是巨大的。然后遍历每篇文章以查看 "Vocabulary" 中的单词出现了多少次将需要大量的处理能力。如果我正在使用 NLTK 和 scikit-learn,我有什么需要担心的吗?如果是这样,是否有更好的创建词汇表的方法?
首先,我认为你没有什么可担心的。这些库是用来处理这样的(实际上甚至更大的)数据集的。一些方法阅读了英文维基百科的所有页面,所以2000篇文章似乎很容易。
有一些方法可以创建更小、更有效的词汇表来描述每个单词。例如,您可以检查 "word to vec",这是 NLP 中非常重要的一部分。我什至建议在你的情况下使用它,因为它往往在情感分析等任务中取得更好的结果(但是,如果该课程专门教授 TF-IDF,那么我显然撤回了这个建议)。
如果你的词汇量对你来说太大了,你也可以选择不同的词干分析器(你用来在预处理阶段从单词中删除标点符号的东西)。虽然最常用的词干提取器是 "Snowball",但 "Lancaster" 更具侵略性(因此会导致单词之间的差异更小)。你可以在这里阅读:What are the major differences and benefits of Porter and Lancaster Stemming algorithms?
享受了解 NLP 的乐趣,这是一个了不起的学科:)
情绪分析的一种基本方法,涉及从训练语料库中制作词汇表,并将其用于为您的数据制作特征向量。几十万个单词的词汇量是很常见的,不用担心。这种方法的主要挑战实际上与您的想法相反。您应该找到增加而不是减少词汇量的方法。
您也可以尝试使用其他情感分析词典来增强词汇量,例如 SentiWordNet。
就您的方法的实施而言,您可以构建一个 scikit 管道,其中包含 CountVectorize to build vocabulary and feature vector. One advantage of using CountVectorize() for building vocabulary is that it uses a sparse matrix for building the vector which handles your concern of large size. Then using TfIdf Vectorizer 用于计算词频和逆词频,最后是训练模型。
除了纯粹的词袋之外,考虑向您的向量添加更多特征。如果您想对我的实施有所了解,请务必执行 GridSearch on your model and preprocessing stages to fine-tune the parameters for best accuracy. I recently did a similar project for sentiment analysis of stocktwits data. I used a Naive Bayes classifier and got an accuracy of 72%. Naive Bayes proved to be better than even some deep learning models like RNN/DNN classifiers. The model selection, though independent of your question, is an integral part of building your project so keep tweaking it till you get good results. Check out my project。
做项目时请注意以下几点:
- 一些研究人员认为停用词实际上增加了情绪的意义,所以我建议不要在预处理阶段删除它们。参见 this paper
- 在进行情感分析时始终使用领域知识。在“可预测 电影”等一个领域中的负面情绪在“可预测 股票市场”等其他领域可能是积极的。
- 不要自行从词汇表中删除单词(根据您在问题中提到的频率)。 TfIdf 规范化仅用于此目的。
情感分析领域充满了无数的研究和激动人心的新技术。我建议您阅读该领域先驱的一些论文,例如 this。