Autogoal.contrib.wrappers
from autogoal.kb import *
from autogoal.grammar import CategoricalValue, BooleanValue
from autogoal.utils import nice_repr
from autogoal.kb import AlgorithmBase
import numpy as np
@nice_repr
class VectorAggregator(AlgorithmBase):
def __init__(self, mode: CategoricalValue("mean", "max")):
self.mode = mode
def run(self, input: Seq[VectorContinuous]) -> VectorContinuous:
input = np.vstack(input)
if self.mode == "mean":
return input.mean(axis=1)
elif self.mode == "max":
return input.max(axis=1)
raise ValueError("Invalid mode: %s" % self.mode)
@nice_repr
class MatrixBuilder(AlgorithmBase):
Note
Builds a matrix from a list of vectors.
Examples¶
```python
import numpy as np x1 = np.asarray([1,2,3]) x2 = np.asarray([2,3,4]) x3 = np.asarray([3,4,5]) MatrixBuilder().run([x1, x2, x3]) array([[1, 2, 3], [2, 3, 4], [3, 4, 5]])
```
def run(self, input: Seq[VectorContinuous]) -> MatrixContinuousDense:
return np.vstack(input)
@nice_repr
class TensorBuilder(AlgorithmBase):
Note
Builds a 3D tensor from a list of matrices.
Examples¶
```python
import numpy as np x1 = np.asarray([[1,2],[3,4]]) x2 = np.asarray([[2,3],[4,5]]) x3 = np.asarray([[3,4],[5,6]]) TensorBuilder().run([x1, x2, x3]) array([[[1, 2], [3, 4]],
[[2, 3], [4, 5]], [[3, 4], [5, 6]]])
```
def run(self, input: Seq[MatrixContinuousDense]) -> Tensor3:
return np.vstack([np.expand_dims(m, axis=0) for m in input])
@nice_repr
class FlagsMerger(AlgorithmBase):
def run(self, input: Seq[FeatureSet]) -> FeatureSet:
result = {}
for d in input:
result.update(d)
return result
@nice_repr
class MultipleFeatureExtractor(AlgorithmBase):
def __init__(
self,
extractors: Distinct(
algorithm(Word, FeatureSet), exceptions=["MultipleFeatureExtractor"]
),
merger: algorithm(Seq[FeatureSet], FeatureSet),
):
self.extractors = extractors
self.merger = merger
def run(self, input: Word) -> FeatureSet:
flags = [extractor.run(input) for extractor in self.extractors]
return self.merger.run(flags)
@nice_repr
class SentenceFeatureExtractor(AlgorithmBase):
def __init__(
self,
tokenizer: algorithm(Sentence, Seq[Word]),
feature_extractor: algorithm(Word, FeatureSet),
include_text: BooleanValue(),
):
self.tokenizer = tokenizer
self.feature_extractor = feature_extractor
self.include_text = include_text
def run(self, input: Sentence) -> FeatureSet:
tokens = self.tokenizer.run(input)
flags = [self.feature_extractor(w) for w in tokens]
if self.include_text:
return {
f"{w}|{f}": v for w, flag in zip(tokens, flags) for f, v in flag.items()
}
else:
return {f: v for flag in flags for f, v in flag.items()}
@nice_repr
class DocumentFeatureExtractor(AlgorithmBase):
def __init__(
self,
tokenizer: algorithm(Document, Seq[Sentence]),
feature_extractor: algorithm(Sentence, FeatureSet),
):
self.tokenizer = tokenizer
self.feature_extractor = feature_extractor
def run(self, input: Document) -> Seq[FeatureSet]:
tokens = self.tokenizer.run(input)
flags = [self.feature_extractor(w) for w in tokens]
return
@nice_repr class TextEntityEncoder(AlgorithmBase): """ Convierte una oración en texto plano más la lista de entidades reconocidas en la oración, en una lista de tokens con sus respectivas categorias BILOUV. """
def __init__(self, tokenizer: algorithm(Sentence, Seq[Word])):
self.tokenizer = tokenizer
def run(
self, input: Tuple(Sentence, Seq[Entity])
) -> Tuple(Seq[Word], Seq[Label]:
pass
@nice_repr class TextRelationEncoder(AlgorithmBase): """ Convierte una oración en texto plano y una lista de relaciones que se cumplen entre entidades, en una lista de ejemplos por cada oración. """
def __init__(self,
tokenizer: algorithm(Sentence, Seq[Word]),
token_feature_extractor: algorithm(Word, FeatureSet),
# token_sentence_encoder: algorithm(Word, )
):
pass
def run(
self, input: Tuple(Sentence, Seq[Tupl](Entity(), Entity(), Category())))
) -> Tuple(Seq[Vect]r()), CategoricalVector()):
pass