天才幻想家 2019-11-22
与计算机视觉相比,自然语言处理 (NLP) 一直被认为是一个难以攻克的难题。本文寻找到了一种新的 NLP 处理方式,探索将 NLP 与计算机视觉处理结合,将文本绘制成图片。虽然目前的准确率还有待优化提高,但看起来很有应用前景。
长期以来,自然语言处理 (NLP) 一直被认为是一个难以攻克的难题,至少与计算机视觉相比是这样。NLP 模型需要更长的运行时间,通常更难实现,并且需要更多的计算资源。另一方面,图像识别模型的实现变得更加简单,对 GPU 的负担也更小。这让我想到,我们可以把一个文本语料库转换成一个图像吗? 我们能把文本解释成图像吗? 事实证明,答案是肯定的,并带来了令人惊讶的结果!我们用这种方法来区分假新闻和真新闻。
在本文中,我们将详细探讨这种方法、结果、结论和接下来的改进。
思路来源
将文本转换为图像的想法最初是受到 Gleb Esman 关于欺诈检测的这篇文章的启发。在这种方法中,他们将各种数据点,如鼠标移动的速度、方向、加速度等转换成彩色图像。然后在这些图像上运行一个图像识别模型,进而可以产生高度准确的结果。
数据
所有实验使用的数据是 George Mclntire 的假新闻数据集的子集。它包含大约 1000 篇假新闻和真实新闻的文章: https://github.com/cabhijith/Fake-News/blob/master/fake_or_real_news.csv.zip
Text2Image 的基本原理
让我们首先在一个较高的层次上讨论 Text2Image。其基本思想是将文本转换成我们可以绘制的热图。热图标识着每个单词的 TF-IDF 值。词频 - 逆文档频率 (TF-IDF) 是一种统计方法,用于确定一个单词相对于文档中其他单词的重要性。在基本的预处理和计算 TF-IDF 值之后,我们使用一些平滑的高斯滤波将它们绘制成对数尺度的热图。一旦热图绘制完成,我们使用 fast.ai 实现了一个 CNN,并尝试区分真实和虚假的热图。我们最终获得了大约 71% 的稳定准确率,这对于这种新方法来说是一个很好的开始。这里有一个关于我们的方法的小流程图:
还不太清楚?继续往下看。
预处理
数据采用小写形式,删除所有特殊字符,并将文本和标题连接起来。文件中 85% 以上的文字也被删除。此外,要明确避免使用单词列表 (stopwords)。使用的是一份标准的停顿词列表,大部分是没有信息的重复词。特别是要对假新闻的断句进行修改,这是未来值得探索的一个领域,特别是可以为假新闻带来独特的写作风格。
计算 TF-IDF
为了对关键字进行评分和提取,Text2Image 使用了 tf-idf 的 scikit-learn 实现。对于假新闻语料库和真实新闻语料库,IDF 分别计算。与整个语料库的单个 IDF 分数相比,计算单独的 IDF 分数会导致准确性大幅提高。然后迭代计算每个文档的 tf-idf 分数。在这里,标题和文本不是分开评分的,而是一起评分的。
计算 Term 频率
计算 IDF
把它们相乘,就得到 tf-idf。我们对每个文档分别进行迭代。
处理 TF-IDF 值
对于每个文档,将提取具有最高 TF-IDF 值的 121 个单词。这些单词然后用于创建一个 11x11 数组。在这里,选择的单词数量就像一个超参数。对于更短、更简单的文本,可以使用更少的单词,而使用更多的单词来表示更长的、更复杂的文本。根据经验,11x11 是这个数据集的理想大小。将 TF-IDF 值按大小降序排列,而不是按其在文本中的位置映射。TF-IDF 值以这种方式映射,因为它看起来更能代表文本,并且为模型提供了更丰富的特性来进行训练。因为一个单词可以在一篇文章中出现多次,所以要考虑第一次出现的单词。
不按原样绘制 TF-IDF 值,而是按对数刻度绘制所有值。这样做是为了减少顶部和底部值之间的巨大差异。
在绘制时,由于这种差异,大多数热图不会显示任何颜色的变化。因此,它们被绘制在一个对数刻度上,以便更好地找出差异。
图 1(左) 显示了按原样绘制的 TF-IDF 值。图 2(右) 显示了在对数刻度上绘制的相同值
缺点之一是在训练模型时大量的过度拟合。这可以归因于缺乏任何数据扩充,目前,似乎没有数据扩充的方法可以用于这个用例。因此,在整个数据集上使用高斯滤波来平滑这些图。虽然它确实降低了一点点准确性,但在过度拟合方面有显著的下降,尤其是在训练的初始阶段。
最终的热图
最终的热图尺寸为 11x11,用 seaborn 绘制。因为 x 轴和 y 轴以及颜色条在训练时都没有传达任何信息,所以我们删除了它们。使用的热图类型是“等离子体”,因为它显示了理想的颜色变化。尝试不同的颜色组合可能是未来探索的一个领域。下面是最终情节的一个例子。
热图最终形态
训练我们的模型
该模型使用 fast.ai 在 resnet34 上进行训练。识别出假新闻 489 篇,真新闻 511 篇。在不增加数据的情况下,在训练集和测试集之间采用标准的 80:20 分割。所有使用的代码都可以在这里找到: https://github.com/cabhijith/Text2Image/blob/master/Code.html
结果
经过 9 轮迭代后,模型的准确率达到了 70% 以上。尽管对这个数据集来说还远远不够先进,但这种新方法似乎很有前景。以下是在训练过程中所做的一些观察结果:
这个模型超差了很多。增加数据对过拟合没有任何影响,这与我们的预期相反。进一步的训练或改变学习率没有任何效果。
增加绘图大小有助于准确性提升直到大小为 11x11,之后增加绘图大小会导致准确性下降。