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

时间:2014-03-23 03:21:11

标签: java nlp stanford-nlp sentiment-analysis

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

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

Link to Stanford Sentiment Analysis page

“可以使用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很新,所以如果我缺少任何必要的信息或任何内容,请批评!谢谢!

3 个答案:

答案 0 :(得分:10)

  

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

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

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

  

我如何用原始的,未经过解析的文本文件训练我自己的模型   鸣叫?

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

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

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

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

你有没有给你的推文贴上标签?所有100万人?如果你这样做了,我想为你支付很多钱:)

答案 1 :(得分:1)

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

答案 2 :(得分:1)

如果有帮助的话,我从Arachnode那里得到了很容易的C#代码 - 一两次调整以获得模型的正确路径,等等,但它的效果很好。缺少的是关于输入文件的正确格式。它位于Javadoc中,但作为参考,对于BuildBinarizedDataset,它类似于:

2 line of text here

0 another line of text 

1 yet another line of text

etc

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