- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试确定将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 and Lee的方法,但不确定是否可以使用两种以上的结果。
问题2.我是否正确以为这是我建立语料库的两个一般选择?我是否还有其他(更好)的选择?
问题3.鉴于以上所有,我应该使用哪个分类器?我认为最大熵效果最好;我也研究了随机森林,但是我对后者没有任何经验,并且真的不知道我在做什么。
提前非常感谢您:)
最佳答案
问题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)或岭回归。
随机森林通常不适用于大量依赖特征(单词),但是如果最终决定使用较少数量的特征(例如,您手动选择的一组单词/短语,加上%的高价单词和%的高流行单词)。
关于python - 带Python的NLP-如何建立语料库,使用哪个分类器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31077378/
我正在处理一组标记为 160 个组的 173k 点。我想通过合并最接近的(到 9 或 10 个组)来减少组/集群的数量。我搜索过 sklearn 或类似的库,但没有成功。 我猜它只是通过 knn 聚类
我有一个扁平数字列表,这些数字逻辑上以 3 为一组,其中每个三元组是 (number, __ignored, flag[0 or 1]),例如: [7,56,1, 8,0,0, 2,0,0, 6,1,
我正在使用 pipenv 来管理我的包。我想编写一个 python 脚本来调用另一个使用不同虚拟环境(VE)的 python 脚本。 如何运行使用 VE1 的 python 脚本 1 并调用另一个 p
假设我有一个文件 script.py 位于 path = "foo/bar/script.py"。我正在寻找一种在 Python 中通过函数 execute_script() 从我的主要 Python
这听起来像是谜语或笑话,但实际上我还没有找到这个问题的答案。 问题到底是什么? 我想运行 2 个脚本。在第一个脚本中,我调用另一个脚本,但我希望它们继续并行,而不是在两个单独的线程中。主要是我不希望第
我有一个带有 python 2.5.5 的软件。我想发送一个命令,该命令将在 python 2.7.5 中启动一个脚本,然后继续执行该脚本。 我试过用 #!python2.7.5 和http://re
我在 python 命令行(使用 python 2.7)中,并尝试运行 Python 脚本。我的操作系统是 Windows 7。我已将我的目录设置为包含我所有脚本的文件夹,使用: os.chdir("
剧透:部分解决(见最后)。 以下是使用 Python 嵌入的代码示例: #include int main(int argc, char** argv) { Py_SetPythonHome
假设我有以下列表,对应于及时的股票价格: prices = [1, 3, 7, 10, 9, 8, 5, 3, 6, 8, 12, 9, 6, 10, 13, 8, 4, 11] 我想确定以下总体上最
所以我试图在选择某个单选按钮时更改此框架的背景。 我的框架位于一个类中,并且单选按钮的功能位于该类之外。 (这样我就可以在所有其他框架上调用它们。) 问题是每当我选择单选按钮时都会出现以下错误: co
我正在尝试将字符串与 python 中的正则表达式进行比较,如下所示, #!/usr/bin/env python3 import re str1 = "Expecting property name
考虑以下原型(prototype) Boost.Python 模块,该模块从单独的 C++ 头文件中引入类“D”。 /* file: a/b.cpp */ BOOST_PYTHON_MODULE(c)
如何编写一个程序来“识别函数调用的行号?” python 检查模块提供了定位行号的选项,但是, def di(): return inspect.currentframe().f_back.f_l
我已经使用 macports 安装了 Python 2.7,并且由于我的 $PATH 变量,这就是我输入 $ python 时得到的变量。然而,virtualenv 默认使用 Python 2.6,除
我只想问如何加快 python 上的 re.search 速度。 我有一个很长的字符串行,长度为 176861(即带有一些符号的字母数字字符),我使用此函数测试了该行以进行研究: def getExe
list1= [u'%app%%General%%Council%', u'%people%', u'%people%%Regional%%Council%%Mandate%', u'%ppp%%Ge
这个问题在这里已经有了答案: Is it Pythonic to use list comprehensions for just side effects? (7 个答案) 关闭 4 个月前。 告
我想用 Python 将两个列表组合成一个列表,方法如下: a = [1,1,1,2,2,2,3,3,3,3] b= ["Sun", "is", "bright", "June","and" ,"Ju
我正在运行带有最新 Boost 发行版 (1.55.0) 的 Mac OS X 10.8.4 (Darwin 12.4.0)。我正在按照说明 here构建包含在我的发行版中的教程 Boost-Pyth
学习 Python,我正在尝试制作一个没有任何第 3 方库的网络抓取工具,这样过程对我来说并没有简化,而且我知道我在做什么。我浏览了一些在线资源,但所有这些都让我对某些事情感到困惑。 html 看起来
我是一名优秀的程序员,十分优秀!