wuenlp_tools.models.scenes.embedding

 1from typing import Type
 2
 3from wuenlp import UIMADocument
 4from wuenlp.impl.uima import UIMASystemScene, UIMASpan
 5
 6from wuenlp_tools.pipeline import PipelineStep, PipelineProcessor, PipelineCapability
 7from wuenlp_tools.utils.embedding import TextEmbedder, OpenAIEmbeddingSmall
 8
 9
10class SceneEmbedProcessor(PipelineProcessor):
11    def __init__(self, embedder: TextEmbedder):
12        self.embedder = embedder
13
14    def __call__(self, doc: UIMADocument, unit_type: Type[UIMASpan] = UIMASystemScene, overwrite: bool = False,
15                 **kwargs) -> UIMADocument:
16        for scene in doc.system_scenes:
17            embedding = self.embedder(scene.text)
18
19            scene.additional_features["text_embedding"] = embedding
20
21        return doc
22
23
24SceneEmbedder = PipelineStep("Scene Embedder", SceneEmbedProcessor(TextEmbedder(OpenAIEmbeddingSmall)),
25                             unit_type=UIMASystemScene, added_additional_features=["text_embedding"],
26                             provides=[PipelineCapability.SCENE_EMBEDDINGS], requires=[PipelineCapability.SCENES])
11class SceneEmbedProcessor(PipelineProcessor):
12    def __init__(self, embedder: TextEmbedder):
13        self.embedder = embedder
14
15    def __call__(self, doc: UIMADocument, unit_type: Type[UIMASpan] = UIMASystemScene, overwrite: bool = False,
16                 **kwargs) -> UIMADocument:
17        for scene in doc.system_scenes:
18            embedding = self.embedder(scene.text)
19
20            scene.additional_features["text_embedding"] = embedding
21
22        return doc

Base class for protocol classes.

Protocol classes are defined as::

class Proto(Protocol):
    def meth(self) -> int:
        ...

Such classes are primarily used with static type checkers that recognize structural subtyping (static duck-typing).

For example::

class C:
    def meth(self) -> int:
        return 0

def func(x: Proto) -> int:
    return x.meth()

func(C())  # Passes static type check

See PEP 544 for details. Protocol classes decorated with @typing.runtime_checkable act as simple-minded runtime protocols that check only the presence of given attributes, ignoring their type signatures. Protocol classes can be generic, they are defined as::

class GenProto[T](Protocol):
    def meth(self) -> T:
        ...
SceneEmbedProcessor(embedder: wuenlp_tools.utils.embedding.TextEmbedder)
12    def __init__(self, embedder: TextEmbedder):
13        self.embedder = embedder
embedder
SceneEmbedder = PipelineStep('Scene Embedder', processor=SceneEmbedProcessor, provides=['scene_embeddings'], requires=['scenes'])

Pipeline step Scene Embedder (SceneEmbedProcessor).

Provides: scene_embeddings

  • scene_embeddings: Provides per-scene embeddings in additional features (e.g. text_embedding).

Requires: scenes

unit type UIMASystemScene; additional features text_embedding.