mirror of
https://github.com/explosion/spaCy.git
synced 2025-06-29 17:33:10 +03:00
* Use openmp in parser
This commit is contained in:
parent
9c34ca9e5d
commit
490ba65398
4
setup.py
4
setup.py
|
@ -71,9 +71,9 @@ if sys.version_info[:2] < (2, 7) or (3, 0) <= sys.version_info[0:2] < (3, 4):
|
||||||
# By subclassing build_extensions we have the actual compiler that will be used which is really known only after finalize_options
|
# By subclassing build_extensions we have the actual compiler that will be used which is really known only after finalize_options
|
||||||
# http://stackoverflow.com/questions/724664/python-distutils-how-to-get-a-compiler-that-is-going-to-be-used
|
# http://stackoverflow.com/questions/724664/python-distutils-how-to-get-a-compiler-that-is-going-to-be-used
|
||||||
compile_options = {'msvc' : ['/Ox', '/EHsc'],
|
compile_options = {'msvc' : ['/Ox', '/EHsc'],
|
||||||
'other' : ['-O3', '-Wno-strict-prototypes', '-Wno-unused-function']}
|
'other' : ['-O3', '-Wno-strict-prototypes', '-Wno-unused-function', '-fopenmp']}
|
||||||
link_options = {'msvc' : [],
|
link_options = {'msvc' : [],
|
||||||
'other' : []}
|
'other' : ['-fopenmp']}
|
||||||
|
|
||||||
if sys.platform.startswith('darwin'):
|
if sys.platform.startswith('darwin'):
|
||||||
compile_options['other'].append('-mmacosx-version-min=10.8')
|
compile_options['other'].append('-mmacosx-version-min=10.8')
|
||||||
|
|
|
@ -21,6 +21,10 @@ from murmurhash.mrmr cimport hash64
|
||||||
from thinc.typedefs cimport weight_t, class_t, feat_t, atom_t, hash_t
|
from thinc.typedefs cimport weight_t, class_t, feat_t, atom_t, hash_t
|
||||||
from thinc.linear.avgtron cimport AveragedPerceptron
|
from thinc.linear.avgtron cimport AveragedPerceptron
|
||||||
from thinc.linalg cimport VecVec
|
from thinc.linalg cimport VecVec
|
||||||
|
from thinc.structs cimport SparseArrayC
|
||||||
|
from thinc.structs cimport FeatureC
|
||||||
|
from preshed.maps cimport MapStruct
|
||||||
|
from preshed.maps cimport map_get
|
||||||
|
|
||||||
from util import Config
|
from util import Config
|
||||||
|
|
||||||
|
@ -101,7 +105,6 @@ cdef class Parser:
|
||||||
def __call__(self, Doc tokens):
|
def __call__(self, Doc tokens):
|
||||||
cdef StateClass stcls = StateClass.init(tokens.c, tokens.length)
|
cdef StateClass stcls = StateClass.init(tokens.c, tokens.length)
|
||||||
self.moves.initialize_state(stcls)
|
self.moves.initialize_state(stcls)
|
||||||
|
|
||||||
cdef Example eg = Example(
|
cdef Example eg = Example(
|
||||||
nr_class=self.moves.n_moves,
|
nr_class=self.moves.n_moves,
|
||||||
nr_atom=CONTEXT_SIZE,
|
nr_atom=CONTEXT_SIZE,
|
||||||
|
@ -112,13 +115,22 @@ cdef class Parser:
|
||||||
PyErr_CheckSignals()
|
PyErr_CheckSignals()
|
||||||
|
|
||||||
cdef void parseC(self, Doc tokens, StateClass stcls, Example eg) nogil:
|
cdef void parseC(self, Doc tokens, StateClass stcls, Example eg) nogil:
|
||||||
|
cdef const MapStruct* weights_table = self.model.weights.c_map
|
||||||
|
cdef int i, j
|
||||||
|
cdef FeatureC feat
|
||||||
while not stcls.is_final():
|
while not stcls.is_final():
|
||||||
self.model.set_featuresC(&eg.c, stcls)
|
self.model.set_featuresC(&eg.c, stcls)
|
||||||
self.moves.set_valid(eg.c.is_valid, stcls.c)
|
self.moves.set_valid(eg.c.is_valid, stcls.c)
|
||||||
self.model.set_scoresC(eg.c.scores, eg.c.features, eg.c.nr_feat)
|
self.model.set_scoresC(eg.c.scores, eg.c.features, eg.c.nr_feat)
|
||||||
|
for i in range(eg.c.nr_feat):
|
||||||
|
feat = eg.c.features[i]
|
||||||
|
class_weights = <const SparseArrayC*>map_get(weights_table, feat.key)
|
||||||
|
if class_weights != NULL:
|
||||||
|
j = 0
|
||||||
|
while class_weights[j].key >= 0:
|
||||||
|
eg.c.scores[class_weights[j].key] += class_weights[j].val * feat.value
|
||||||
|
j += 1
|
||||||
guess = VecVec.arg_max_if_true(eg.c.scores, eg.c.is_valid, eg.c.nr_class)
|
guess = VecVec.arg_max_if_true(eg.c.scores, eg.c.is_valid, eg.c.nr_class)
|
||||||
|
|
||||||
action = self.moves.c[guess]
|
action = self.moves.c[guess]
|
||||||
if not eg.c.is_valid[guess]:
|
if not eg.c.is_valid[guess]:
|
||||||
with gil:
|
with gil:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user