【问题标题】:NLP with Python - how to build a corpus, which classifier to use?NLP with Python - 如何构建语料库,使用哪个分类器?
【发布时间】:2015-09-13 15:43:56
【问题描述】:

我正在尝试确定我的 Python NLP 项目的方向,我非常感谢 SO 社区的任何建议。

问题:

假设我有 100 个 .txt 文件,其中包含决策机构举行的 100 次会议的记录。我还有 100 个相应会议结果的 .txt 文件,其中包含本机构通过的决议。结果分为七类之一 - 1 - 不采取行动,2 - 采取软行动,3 - 采取更强的行动,4 - 采取最强的行动,5 - 取消之前采取的软行动,6 - 取消之前采取的更强有力的行动,7 – 取消之前采取的最强行动。或者,这可以在 -3 到 +3 的范围内呈现,0 表示无动作,+1 表示软动作,-1 表示取消先前采取的软动作,依此类推。

根据输入的文本,我有兴趣预测这七种结果中的哪一种会发生。

我正在考虑将此视为一种情绪分析形式,因为采取某种行动的决定基本上是一种情绪。然而,我发现的所有情绪分析示例都集中在正面/负面二分法上,有时将中性情绪作为一个类别添加。我没有找到任何超过 3 种可能的结果分类的例子——不确定这是否是因为我没有找到正确的地方,因为无论出于何种原因,它都不是真正感兴趣的方法,还是因为这出于某种原因,我还不太确定这种方法是一个愚蠢的想法。

问题 1。 我应该将其作为情绪分析的一种形式,还是有其他更好的方法?我是否应该将其视为一种分类问题,类似于按主题对新闻文章进行分类并训练模型识别“主题”(结果)?

语料库:

我知道我需要为训练/测试数据建立一个语料库,看起来我有两个显而易见的选择:

1 – 为训练数据手动编码一个 CSV 文件,该文件将包含来自每个输入文本的一些关键短语,并以 7 分制列出相应结果的值,类似于此处所做的:http://help.sentiment140.com/for-students

2 – 使用 Pang 和 Lee 使用的方法 (http://www.cs.cornell.edu/people/pabo/movie-review-data/) 并根据结果将我的每个 .txt 输入文件放入七个文件夹之一,因为结果(采取了何种行动)是基于已知的历史数据。

第一个选项的缺点是它非常主观 - 我会确定我认为最重要的关键字/短语,我可能不一定是最好的仲裁者。第二种选择的缺点是它的预测能力可能较低,因为文本很长,包含许多无关的词/短语,并且通常在风格上相似(政策演讲倾向于使用政策词)。不过,我查看了 Pang 和 Lee 的数据,这似乎不是一个大问题,因为他们使用的评论在风格方面也没有太大差异。我倾向于 Pang 和 Lee 方法,但我不确定它是否适用于两种以上的结果。

问题 2。 我是否正确假设这是我构建语料库的两个一般选项?我错过了其他(更好的)选择吗?

问题 3。 鉴于以上所有情况,我应该使用哪个分类器?我认为最大熵效果最好。我也研究过随机森林,但我对后者没有经验,而且真的不知道我在做什么(至今)。

提前非常感谢你:)

【问题讨论】:

  • 许多这样的答案将取决于任何 ML 解决方案的数据类型。您可以发布一些示例数据吗?您可能希望浏览实际文本一次,然后根据您可以手动编写功能代码。例如,我觉得会议讨论的长度可能是一个特点,没有任何行动可能比其他强有力的决定有更小的讨论。您绝对可以删除高频词并使用词袋功能。手动选择短语对我来说似乎不是一个好选择。此外,您可能想提及您拥有的数据量。

标签: python nlp scikit-learn


【解决方案1】:

问题 1 - 将其视为文本分类任务最直接的方式(情感分析是一种文本分类任务,但绝不是唯一的一种)。

或者,正如您所指出的,您可以将您的数据视为存在于从 -3(取消先前采取的最强行动)到 +3(采取最强行动)的连续统一体中,中间为 0(不采取行动) .在这种情况下,您可以将结果视为具有自然顺序的连续变量。如果是这样,那么您可以将其视为回归问题而不是分类问题。在不了解更多数据的情况下,很难知道这是否是明智之举。如果您怀疑您将有许多单词/短语在量表的一端非常可能(-3)而在另一端非常不可能(+3),反之亦然,那么回归可能是有意义的。另一方面,如果相关单词/短语与强烈的情感相关联,并且可能出现在量表的两端而不是中间,那么您最好将其视为分类。它还取决于您希望如何评估结果。如果您的算法预测文档是 -2 而实际上是 -3,它会受到比预测 +3 更少的惩罚吗?如果是这样,最好将其视为回归任务。

问题 2。“假设这是我构建语料库的两个通用选项,我是否正确?我是否缺少其他(更好的)选项?”

请注意,这组文档(会议记录和相应结果的 .txt 文件)是您的语料库——典型的做法是随机选择 20% 左右作为测试数据并使用剩余的 80 % 作为训练数据。您在上面考虑的两个常规选项是用于选择分类或回归算法应该关注的特征集的选项。

您正确地确定了提出特征的两种最明显方法的优缺点(亲自挑选与 Pang & Lee 仅使用一元(单词)作为短语的方法)。

就我个人而言,我也倾向于后一种方法,因为众所周知,人类很难预测哪些短语对分类有用——尽管你没有理由不能将两者结合起来,但你的初始集合功能包括所有单词以及您认为可能特别相关的任何短语。正如您所指出的,会有很多无关的单词,因此丢弃非常不常见的单词,或者类之间的频率差异不足以提供任何区分能力的单词可能会有所帮助。减少初始特征集的方法被称为“特征选择”技术 - 提到了一种常用方法here。或查看this paper 以获得更全面的列表。

您还可以使用数据集 here 考虑高价词、高唤醒词或高主导词的百分比等特征(点击补充材料并下载 zip)。

根据您想在这个项目中投入多少精力,另一个常见的做法是尝试各种方法,看看哪种方法效果最好。当然,您无法使用测试集中的数据来测试哪种方法最有效——这会作弊,并且会冒过拟合测试数据的风险。但是您可以将一小部分训练集留作“验证数据”(即用于测试不同方法的迷你测试集)。鉴于您没有那么多的训练数据(大约 80 个文档),您可以考虑使用cross validation

问题 3 - 最好的方法可能是尝试不同的方法并选择最适合交叉验证的方法。但如果我必须选择一两个,我个人发现k-nearest neighbor classification (with low k) or SVMs 通常适用于这种事情。一个合理的方法可能是

  • 让你的初始特征都是单字(单词)+短语 您在查看一些训练数据后认为可能具有预测性;
  • 应用特征选择技术来缩减您的特征集;
  • 应用任何 可以处理高维/文本特征的算法,例如 http://www.csc.kth.se/utbildning/kth/kurser/DD2475/ir10/forelasningar/Lecture9_4.pdf 中的那些(该 pdf 中有很多好的提示!),或者在 Pang & Lee 论文中取得了不错的性能的那些。

http://nlp.stanford.edu/IR-book/pdf/13bayes.pdf 中讨论了其他可能性。通常,特定算法的重要性不如其中的功能。坦率地说,这听起来像是一项非常困难的分类任务,所以可能没有什么能很好地工作。

如果您决定将其视为回归而不是分类任务,则可以使用 k 最近邻回归 (http://www.saedsayad.com/k_nearest_neighbors_reg.htm) 或岭回归。

随机森林通常不适用于大量相关特征(单词),但如果您最终决定使用较少数量的特征(例如,您手动设置的一组单词/短语),它们可能会很好地工作选择,加上高价词的百分比和高唤醒词的百分比)。

【讨论】:

  • 哦,是的,忘了提到当每个类的训练样本数量大致相等时,SVM 和其他一些方法的性能最好。如果不是这种情况,您可以考虑对较小类别的数据进行过采样,或者使用对这些不平衡不敏感的方法。
猜你喜欢
  • 2011-10-30
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 2014-07-25
  • 2017-03-09
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
相关资源
最近更新 更多