java - 如何训练 Stanford NLP 情感分析工具

标签 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 的新手,所以如果我缺少任何必需的信息或任何东西,请批评!谢谢!

最佳答案

What is the significance and difference between each file? Train.txt/Dev.txt/Test.txt ?

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

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

How would I train my own model with a raw, unparsed text file full of tweets?

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

(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 上的标签已经有一些很好的答案,我不打算在这里重复。

PS 你给你的推文贴上标签了吗?全部一百万?如果你这样做了,我愿意为那个文件付给你很多钱:)

关于java - 如何训练 Stanford NLP 情感分析工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22586658/

相关文章:

基于 Java 密码的加密在 Linux 上失败

java - 在 SBT 构建中添加托管 libraryDependencies(任意长度)列表

stanford-nlp - 为什么斯坦福 CoreNLP NER-annotator 默认加载 3 个模型?

c# - 尝试从 URL 读取标记器文件时斯坦福 POS 标记器出现错误

python - 斯坦福解析器和 nltk 产生(正则表达式匹配?)错误

java - 在 Java 中实现 GridBagLayout 的问题

java - 将java源代码保存到文件中

java - 在 Android 应用程序中使用谷歌翻译

python - 如何在 Python 中使用 pl196x 从 nltk for Polish 中提取引理?

nlp - 为什么 Penn Treebank POS 标签集对 'to' 一词有单独的标签?