我正在试图弄清楚我的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点的顺序列出相应结果的值,类似于此处所做的:{{3} }
2 - 使用Pang和Lee使用的方法(http://help.sentiment140.com/for-students)并根据结果将我的每个.txt输入文件放入七个文件夹中的一个,因为结果(采取了什么样的行动)是根据历史数据得知。
第一种选择的缺点是它会非常主观 - 我会确定哪些关键词/短语我认为最重要的是包括在内,而我可能不一定是最好的仲裁者。第二种选择的缺点是它可能具有较少的预测能力,因为文本很长,包含许多无关的单词/短语,并且通常在风格上相似(政策演讲倾向于使用政策词)。不过,我查看了Pang和Lee的数据,看起来这可能不是一个大问题,因为他们使用的评论在风格方面也没有太大差异。我倾向于Pang和Lee的方法,但我不确定它是否能用于两种以上的结果。
问题2。我认为这是构建语料库的两个一般选项吗?我错过了其他(更好)的选择吗?
问题3。鉴于上述所有问题,我应该使用哪种分类器?我认为最大熵最有效;我也研究了随机的森林,但我对后者并没有经验,而且当谈到它们时我真的不知道我在做什么。
非常感谢您提前:))
答案 0 :(得分:2)
问题1 - 最简单的思考方式是作为文本分类任务(情感分析是一种文本分类任务,但绝不是唯一的一种)。
或者,正如您所指出的,您可以认为您的数据存在于连续统一体中,范围从-3(取消最强的先前行动)到+3(采取最强行动),中间为0(不采取行动) 。在这种情况下,您可以将结果视为具有自然排序的连续变量。如果是这样,那么您可以将其视为回归问题而不是分类问题。在不了解更多数据的情况下,很难知道这是否是明智之举。如果你怀疑你会有很多单词/短语在比例的一端非常可能(-3)而在另一端非常不可能(+3),反之亦然,那么回归可能是有意义的。另一方面,如果相关的单词/短语与强烈的情感相关并且可能出现在比例的任何一端而不是中间,那么您可能最好将其视为分类。这还取决于您希望如何评估结果。如果你的算法预测文档是-2并且它实际上是-3,那么它会比它预测的+3更低吗?如果是这样,最好将其视为回归任务。
问题2."我是否认为这是构建语料库的两个一般选项?我错过了其他(更好)的选择吗?"
请注意,文档集(会议纪要的.txt文件和相应的结果)是您的语料库 - 典型的事情是随机选择20%左右作为测试数据并使用剩余的80 %作为训练数据。您在上面考虑的两个常规选项是用于选择分类或回归算法应该遵循的功能集的选项。
你正确地确定了两种最明显的方法的优点和缺点(用手挑选你自己与Pang& Lee的方法,只使用unigrams(单词)作为短语)。
我个人也倾向于采用后一种方法,因为人类很难预测哪些短语对分类有用 - 尽管没有理由为什么你不能#&# 39;结合两者,让你的初始特征包括所有单词加上你认为可能特别相关的任何短语。正如你所指出的那样,会有很多无关的词,所以它可能有助于抛弃那些非常罕见的词,或者在课堂之间的频率不足以提供任何辨别能力。减少初始特征集的方法被称为"特征选择"技术 - 提到了一种常见方法here。或者查看this paper以获取更全面的列表。
您还可以使用数据集here(点击补充材料并下载zip)来考虑高价词,高唤醒词或高优势词的百分比等功能。
根据您希望在此项目中投入多少精力,另一个常见的事情是尝试一大堆方法,看看哪种方法效果最好。当然,您无法使用测试集中的数据来测试哪种方法最有效 - 这将是作弊,并且可能存在过度拟合测试数据的风险。但是您可以将训练集的一小部分留作“验证数据”。 (即用于测试不同方法的迷你测试集)。鉴于您没有那么多的培训数据(80个左右的文档),您可以考虑使用cross validation。
问题3 - 最好的方法可能是尝试不同的方法并选择最适合交叉验证的方法。但如果我不得不选择一两个,我个人已经发现k-nearest neighbor classification (with low k) or SVMs经常适用于这种事情。合理的方法可能是
http://nlp.stanford.edu/IR-book/pdf/13bayes.pdf中讨论了其他可能性。通常,特定算法比进入它的功能更重要。坦率地说,这听起来像是一项非常困难的分类任务,所以没有什么能够很好地发挥作用。
如果您决定将其视为回归而不是分类任务,则可以使用k近邻回归(http://www.saedsayad.com/k_nearest_neighbors_reg.htm)或岭回归。
随机森林通常不能很好地处理大量的依赖特征(单词),但如果最终决定使用较少数量的特征(例如,手动设置一组单词/短语),它们可能会很好用选择,加上高价词的百分比和高觉醒词的百分比。)