如何训练斯坦福NLP情绪分析工具

大家好! 我正在使用Stanford Core NLP软件包,我的目标是在实时推文上进行情绪分析。

使用情绪分析工具返回对文本“态度”的非常差的分析。许多正面被标记为中性,许多负面评价为正面。 我已经在一个文本文件中获得了超过一百万条推文,但我不知道如何实际训练该工具并创建我自己的模型。

链接到斯坦福情绪分析页面

“可以使用以下命令使用PTB格式数据集重新训练模型:”

java -mx8g edu.stanford.nlp.sentiment.SentimentTraining -numHid 25 -trainPath train.txt -devPath dev.txt -train -model model.ser.gz 

来自dev.txt的样本(前4位表示5 … 4/5正极性)

 (4 (4 (2 A) (4 (3 (3 warm) (2 ,)) (3 funny))) (3 (2 ,) (3 (4 (4 engaging) (2 film)) (2 .)))) 

来自test.txt的示例

 (3 (3 (2 If) (3 (2 you) (3 (2 sometimes) (2 (2 like) (3 (2 to) (3 (3 (2 go) (2 (2 to) (2 (2 the) (2 movies)))) (3 (2 to) (3 (2 have) (4 fun))))))))) (2 (2 ,) (2 (2 Wasabi) (3 (3 (2 is) (2 (2 a) (2 (3 good) (2 (2 place) (2 (2 to) (2 start)))))) (2 .))))) 

来自train.txt的样本

 (3 (2 (2 The) (2 Rock)) (4 (3 (2 is) (4 (2 destined) (2 (2 (2 (2 (2 to) (2 (2 be) (2 (2 the) (2 (2 21st) (2 (2 (2 Century) (2 's)) (2 (3 new) (2 (2 ``) (2 Conan)))))))) (2 '')) (2 and)) (3 (2 that) (3 (2 he) (3 (2 's) (3 (2 going) (3 (2 to) (4 (3 (2 make) (3 (3 (2 a) (3 splash)) (2 (2 even) (3 greater)))) (2 (2 than) (2 (2 (2 (2 (1 (2 Arnold) (2 Schwarzenegger)) (2 ,)) (2 (2 Jean-Claud) (2 (2 Van) (2 Damme)))) (2 or)) (2 (2 Steven) (2 Segal))))))))))))) (2 .))) 

我有两个问题要提出来。

每个文件之间的意义和区别是什么? Train.txt / Dev.txt / Test.txt?

如何用一个充满推文的原始未解析文本文件训练我自己的模型?

我对NLP很新,所以如果我缺少任何必要的信息或任何事情请批评! 谢谢!

每个文件之间的意义和区别是什么? Train.txt / Dev.txt / Test.txt?

这是标准的机器学习术语。 火车组用于(惊喜)训练模型。 开发集用于调整模型可能具有的任何参数。 您通常要做的是选择参数值,在训练集上训练模型,然后检查训练模型在开发集上的表现。 然后,您选择另一个参数值并重复。 此过程可帮助您为模型找到合理的参数值。

完成此操作后,您将继续测试模型在测试集上的表现。 这是看不见的 – 您的模型之前从未遇到过任何数据。 重要的是测试集与训练和开发集分开,否则您将有效地评估之前看到的数据模型。 这是错误的,因为它不会让你知道模型的真正效果。

如何用一个充满推文的原始未解析文本文件训练我自己的模型?

您不能,也不应该使用未解析的文档进行训练。 递归深度模型的整个点(以及它执行得如此好的原因)是它可以从解析树的每个级别的情感注释中学习。 您在上面给出的句子可以这样格式化:

 (4 
     (4 
         (2 A) 
         (4 
             (3(3暖)(2,))(3搞笑)
         )
     ) 
     (3 
         (2,) 
         (3 
             (4(4个参与)(2个电影))(2。)
         )
     )
 )

通常,情绪分析器使用文档级注释进行训练。 您只有一个分数,此分数适用于整个文档,忽略了文档中的短语可能表达不同情绪的事实。 斯坦福大学的团队花了很多精力来注释文档中的每个短语以表达情感。 例如,单词film本身就是中立的情绪:( (2 film) 。 然而,短语engaging film非常积极: (4 (4 engaging) (2 film)) (2 .)

如果您标记了推文,则可以使用任何其他文档级情绪分类器。 stackoverflow上的情感分析标签已经有了一些非常好的答案,我不打算在这里重复它们。

PS你有标签你的推文吗? 所有100万人? 如果你这样做了,我愿意为你支付很多钱:)

Java代码:

BuildBinarizedDataset – > [ http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/sentiment/BuildBinarizedDataset.html

SentimentTraining – > http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/sentiment/SentimentTraining.html

对于那些使用C#编写代码的人,我将Java源代码转换为两个代码文件,这使得理解这个过程变得更加简单。

https://arachnode.net/blogs/arachnode_net/archive/2015/09/03/buildbinarizeddataset-and-sentimenttraining-stanford-nlp.aspx

如果它有所帮助,我从Arachnode获得的C#代码非常容易 – 一两个调整以获得模型的正确路径,等等,但它的工作原理很棒。 缺少的是关于输入文件的正确格式。 它位于Javadoc中,但作为参考,对于BuildBinarizedDataset,它类似于:

 2 line of text here 0 another line of text 1 yet another line of text etc 

构建非常简单,具体取决于您的开始(数据库,Excel文件,等等)