Ik ben bezig met sentiment analysis uit word2vec, en gebruik daarvoor Linan Qiu's code (Github).
In het kort: Deze code maakt vectors van woorden uit een trainbestand die je kan trainen tot een classifier. Die classifier laat je dan los op een stel reviews (hier van IMDB) die zegt of ze positief of negatief zijn.
Ik heb dit allemaal werkend, en uiteindelijk rolt uit het stukje code (test.py, hieronder toegevoegd) simpelweg een percentage van hoeveel er correct is voorspeld. Ik neem aan dat de code dus een prediction per review maakt, en dit checkt tegen de bekende waarde. Die bekende waarde lijkt in dit geval gewoon een complete .txt met alleen negatieve of positieve reviews. Ik wil echter graag weten hoeveel documenten (hier reviews) nu eigenlijk als positief of negatief zijn voorspeld, om daar vervolgens een percentage uit te kunnen destilleren.
Iemand idee hoe dat te tellen? (Uiteindelijk wil ik uiteindelijk gewoon een positief en een negatief percentage qua documenten per bestand)
Thanks!
Hier het stuk code, in Python 2.7.10. Dit is dus post-vectorisatie (wat gebeurt met run.py in die Github)
In het kort: Deze code maakt vectors van woorden uit een trainbestand die je kan trainen tot een classifier. Die classifier laat je dan los op een stel reviews (hier van IMDB) die zegt of ze positief of negatief zijn.
Ik heb dit allemaal werkend, en uiteindelijk rolt uit het stukje code (test.py, hieronder toegevoegd) simpelweg een percentage van hoeveel er correct is voorspeld. Ik neem aan dat de code dus een prediction per review maakt, en dit checkt tegen de bekende waarde. Die bekende waarde lijkt in dit geval gewoon een complete .txt met alleen negatieve of positieve reviews. Ik wil echter graag weten hoeveel documenten (hier reviews) nu eigenlijk als positief of negatief zijn voorspeld, om daar vervolgens een percentage uit te kunnen destilleren.
Iemand idee hoe dat te tellen? (Uiteindelijk wil ik uiteindelijk gewoon een positief en een negatief percentage qua documenten per bestand)
Thanks!
Hier het stuk code, in Python 2.7.10. Dit is dus post-vectorisatie (wat gebeurt met run.py in die Github)
code: test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| # gensim modules from gensim import utils from gensim.models.doc2vec import LabeledSentence from gensim.models import Doc2Vec # numpy import numpy # shuffle from random import shuffle # logging import logging import os.path import sys import cPickle as pickle # logres from sklearn.linear_model import LogisticRegression #commit model = Doc2Vec.load('./imdb.d2v') train_arrays = numpy.zeros((25000, 100)) train_labels = numpy.zeros(25000) for i in range(12500): prefix_train_pos = 'TRAIN_POS_' + str(i) prefix_train_neg = 'TRAIN_NEG_' + str(i) train_arrays[i] = model.docvecs[prefix_train_pos] train_arrays[12500 + i] = model.docvecs[prefix_train_neg] train_labels[i] = 1 train_labels[12500 + i] = 0 test_arrays = numpy.zeros((25000, 100)) test_labels = numpy.zeros(25000) for i in range(12500): prefix_test_pos = 'TEST_POS_' + str(i) prefix_test_neg = 'TEST_NEG_' + str(i) test_arrays[i] = model.docvecs[prefix_test_pos] test_arrays[12500 + i] = model.docvecs[prefix_test_neg] test_labels[i] = 1 test_labels[12500 + i] = 0 classifier = LogisticRegression() classifier.fit(train_arrays, train_labels) print classifier.score(test_arrays, test_labels) |
So now, less than five years later, you can go up on a steep hill in Las Vegas and look West, and with the right kind of eyes you can almost see the high-water mark — that place where the wave finally broke and rolled back.