我为一些政治学家编写/改进研究项目Web应用程序的辅助工作。该应用程序收集了与美国最高法院有关的文章,并对它们进行分析,并且在将近一年半的时间里,我们拥有约10,000篇文章(并且还在不断增加)以供处理。
该项目的主要挑战之一是能够确定文章的“相关性”,即主要关注的是美国联邦最高法院(和/或其司法人员),而不是本地或外国最高法院。自成立以来,我们解决的方法是主要分析标题以明确引用联邦法院,并验证“最高”和“法院”是从文章文本中收集的关键字。基本但草率,但实际上效果很好。话虽如此,无关紧要的文章可以在数据库中找到它们的踪迹-通常是那些标题没有明确提及州或外国的文章(印度最高法院是通常的罪犯)。
我已经到达开发阶段,可以更加专注于项目的这一方面,但是我不确定从哪里开始。我所知道的是,我正在寻找一种分析文章文字的方法,以确定其与联邦法院的相关性,仅此而已。我想这需要进行一些机器学习,但是我基本上没有该领域的经验。我已经对tf-idf权重,向量空间建模和word2vec(+ CBOW和Skip-Gram模型)进行了一些阅读,但是我不太看“大图”,但向我展示了如何适用这些概念可以解决我的问题。谁能指出我正确的方向?
答案 0 :(得分:1)
执行此操作的方法有很多,最好的方法取决于项目。可能最简单的方法是在文章中进行关键字搜索,然后凭经验选择截止分数。尽管很简单,但实际上效果很好,尤其是在像这样的主题中,您可以想到一小部分单词,这些单词很可能出现在相关文章的某处。
当某个话题涉及诸如“业务”或“体育”之类的话题时,关键词搜索可能会被禁止且缺乏。这是机器学习方法可能开始成为更好的主意的时候。如果机器学习是您要走的路,那么有两个步骤:
步骤1可以很简单,例如TFIDF向量。但是,嵌入文档本身也可以是深度学习。这就是CBOW和Skip-Gram发挥作用的地方。 Doc2Vec(PV-DM)是一种流行的方法。 Python Gensim库中有一个很好的实现。首先,现代,更复杂的字符,单词和文档嵌入是一个很大的挑战,但是却很有收获。这些示例是ELMo嵌入或BERT。
步骤2可以是典型模型,因为它现在只是二进制分类。您可以尝试完全连接或卷积的多层神经网络,也可以尝试更简单的方法,例如逻辑回归或朴素贝叶斯。
我个人的建议是坚持使用TFIDF载体和朴素贝叶斯。从经验来看,我可以说这非常有效,是迄今为止最容易实现的,甚至可以根据您的数据而胜过CBOW或Doc2Vec之类的方法。
答案 1 :(得分:1)
如果您有足够的标记数据-不仅针对“是本文相关”,还是“没有本文无关”(您基本上是在“是/否”之间建立一个二元模型-因此,我将进行研究垃圾邮件过滤器),则可以训练公平的模型。我不知道您是否真的有大量的无数据。如果这样做,则可以通过执行以下操作(伪代码)来训练相对简单的监督模型:
Corpus = preprocess(Corpus) #(remove stop words, etc.)
Vectors = BOW(Corpus) #Or TFIDF or Whatever model you want to use
SomeModel.train(Vectors[~3/4 of them], Labels[corresponding 3/4]) #Labels = 1 if relevant, 0 if not
SomeModel.evaluate(Vectors[remainder], Labels[remainder]) #Make sure the model doesn't overfit
SomeModel.Predict(new_document)
确切的模型将取决于您的数据。如果您可以获得大量无证件,那么简单的Naive-Bayes可能(可能会)正常工作。一张便条-意味着您有两种无证件-相当接近的证件(印度最高法院)或完全不相关的证件(例如税收)。您应该像现在那样过滤掉“远”错误案例与“近”错误案例和“远”错误案例的测试,以测试“关闭”错误案例的训练,看看哪个结果更好。
答案 2 :(得分:1)
框架问题
在启动像这样的新颖机器学习项目时,需要考虑一些基本问题,这些问题可以帮助您更有效地解决问题并有效地进行复习和实验。
您是否拥有建立模型的正确数据?您有大约10,000篇文章将作为模型输入,但是,要使用监督学习方法,您将需要在模型训练中使用的所有文章都具有可信赖的标签。听起来您已经这样做了。
用于量化成功的度量标准。您如何衡量您的模型是否正在执行您想要的工作?在您的特定情况下,这听起来像是二进制分类问题-您希望能够将文章标记为相关或不相关。您可以使用诸如area under the ROC之类的标准二进制分类指标来衡量您的成功。或者,由于您对误报有特定的疑问,因此可以选择类似Precision的指标。
使用随机或幼稚的方法效果如何。建立数据集和指标后,您就可以使用基本方法量化完成任务的能力。这很容易,因为您可以为随机选择的模型计算指标,但是在您的情况下,您可以使用关键字解析器模型,这是设置基准的理想方法。量化关键字解析方法对数据集的性能,以便您确定何时机器学习模型运行良好。
很抱歉,这对您来说很明显且很基础,但我想确保它在答案中。在像这样的创新开放式项目中,直接跳入机器学习实验而没有考虑这些基础知识可能是低效率的。
机器学习方法
正如Evan Mata和Stefan G所建议的那样,最好的方法是首先将文章简化为功能。这可以在没有机器学习(例如向量空间模型)或机器学习(word2vec和您引用的其他示例)的情况下完成。对于您的问题,我认为可以尝试使用BOW之类的东西作为起点。
一旦您具有文章的功能表示,您就快完成了,并且有许多二进制分类模型可以很好地完成。从这里进行实验以找到最佳解决方案。
维基百科拥有a nice example的简单方法,可以在垃圾邮件过滤中使用此两步方法,这是一个类似的问题(请参见本文的示例用法部分)。
祝你好运,听起来像是一个有趣的项目!