使用机器学习技术进行文本分析

数据挖掘 机器学习 神经网络 数据挖掘 机器学习模型
2022-03-11 08:28:51

我正在分析一堆推文,我想了解作者支持哪个政党。

我正在使用 Mathematica,但我正在考虑用 Python 重新编写我的代码。如果你有任何建议,不要esitate。

比如说,我有五个用数字标记的当事人:Party1, Party2,...,Party5我提供了一个肯定与当事人相关的推文列表。这份清单大致是trainingList = {tweet1-> "Party1",tweet2->"Party2",...,tweet5->"Party5",tweetK->"Neutral"}. 此外,我添加了一个类"Neutral",因为有些推文是不可分类的。实际上,我提供了不止一个推特标准派对。事实上,trainingList时间要长得多。

请注意,我从推文中删除了停用词,并应用了词干算法来简化表达式。然后,每条推文都是一个潜在重要单词的列表。

我创建了分类器函数,提供了一个prior(先验的显式 for 并不重要)

c = Classify[trainingList, ClassPriors-> prior]

然后,我想做一些检查。我拿了一堆属于其他政党支持者的推文并尝试

c[{word1,word2,word3,word4,word5,word7},"Probabilities"]

这给了我一个概率列表例如,pi

<| 'Party1' -> p1, 'Party2' -> p2, 'Party3' -> p3, 'Party4' -> p4, 'Party5' -> p5, 'Neutral' -> p6 |>

Question1有没有办法理解算法如何关联这些概率?更具体地说,每个单词如何与一方相关联

问题2 有没有办法查看与给定方(类)相关联的最频繁的 n-gram 单词?

3个回答

我想你是在问,对于一个任意训练的分类器,你如何找到它在推文词和聚会概率之间的映射?有几种与模型无关的方法可以做到这一点,相当于检查哪些功能产生了最大的差异。以下两个 Python 库实现了这些算法中的一个或多个,从 LIME 作者写的一篇论文开始:

  1. LIME显示哪些词对给定分类很重要。你可以给它发送单个单词的文本来获得它们的平均重要性,但当然在更好的文本模型中,上下文很重要。 在此处输入图像描述

  2. ELI5包括一个替代的 LIME 实现,以及一些用于一些常见 scikit-learn 分类器的特殊功能。

在此处输入图像描述

@CarlRynegardh 还建议了一种通用方法,给定一个可以从许多分类器中提取的(单词 x 潜在特征)矩阵,但鉴于您似乎不熟悉这种方法,我认为您将从探索这些库中获得更多价值。此外,如果您想考虑的不仅仅是单个单词,我认为它们会更好地考虑上下文影响,并且至少 ELI5 会利用一些特定的模型功能。

对于开始在 Python 中执行此操作,您可能会得到很多意见。我想大多数人会推荐anaconda python 发行版和 SciPy 生态系统,包括 NumPy、matplotlib 和 pandas。对于一般机器学习,我的首选包是scikit-learn对于深度网络,两个主要竞争对手似乎是 Keras/TensorFlow 和 FastAI/PyTorch。第二个更Pythonic。(我相信它目前在分类器性能方面也有优势,但对在生产中部署的支持并不多。两者都在快速发展。)

来自 Mathematica,我希望您希望在jupyter notebook环境中工作。LIME 和 ELI5 都有几个示例笔记本,GitHub 有一个内置的笔记本查看器,所以你可以在浏览器中按照上面的链接阅读它们。

最快的开始方式可能是使用云服务,该服务提供对预先配置了所有库的 jupyter notebook 的即时访问。大大小小的云有很多选择。我正在使用 Paperspace,但我听说 Google Collab 是免费的,而且 Just Works (TM)。

说几句你知道与共和党和民主党有关的词。提取他们的词嵌入。那就是单词的向量表示,它将是高维的。这将假设您已经对词嵌入进行了训练,无论是预训练的,还是自己对数据进行更好的训练。词嵌入可以通过例如 LSTM 训练或矩阵分解来训练/提取。

在词嵌入上,对 2d 进行降维(以 PCA 为例)。阴谋!那些靠得很近的人在他们接受培训的目标上会“相似”。

预训练的词嵌入可供下载。但是,它们可能不是您目标的最佳嵌入,但总比没有好。

我相信“使用 LSTM RNN 的序列分类”是您问题的确切答案。

查看本教程,它是最好的教程之一:

https://machinelearningmastery.com/sequence-classification-lstm-recurrent-neural-networks-python-keras/