【问题标题】:How to train the Stanford NLP Sentiment Analysis tool如何训练斯坦福 NLP 情绪分析工具
【发布时间】:2014-04-30 11:12:44
【问题描述】:

大家见鬼!我正在使用 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 很陌生,所以如果我缺少任何必需的信息或任何内容,请批评!谢谢!

【问题讨论】:

  • 我能看到train.txt的格式吗?谢谢

标签: java nlp stanford-nlp sentiment-analysis


【解决方案1】:

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

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

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

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

您不能也不应该使用一组未解析的文档进行训练。递归深度模型的全部意义(以及它表现如此出色的原因)是它可以从解析树的每一层的情感注释中学习。你上面给出的句子可以这样格式化:

(4 (4 (2) (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 代码可用于创建格式化(解析)的句子?例如我有推文并想训练
  • 您是否找到任何代码来格式化(解析)如图所示的句子? @SameerThigale
  • train/dev/test 数据集也称为train/test/validate
  • 那么您是否能够为您的推文训练模型?我有类似的目标
【解决方案2】:

【讨论】:

  • 这在理论上可以回答这个问题,但最好将答案的基本部分包含在此处以供将来的用户使用,并提供链接以供参考。 Link-dominated answers 可以通过link rot 失效。
  • 好的,我看看能不能后天展开答案。
  • @arachnode.net 第二天从未到来。你的链接是指向 javadoc 的,它解释了实际进行情感训练的类,而不是从不使用 java 编码的人的角度来看如何使用它?
【解决方案3】:

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

2 line of text here

0 another line of text 

1 yet another line of text

etc

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    相关资源
    最近更新 更多