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.