Semantischer Steuerfilter

Der semantische Steuerfilter ist eine Methode, um Steuerungen basierend auf der semantischen Ähnlichkeit zwischen dem Plan des Agenten und dem Text der Steuerung unter Verwendung ihrer Embeddings zu filtern.

Konfiguration

Um die semantische Steuerfilterung zu aktivieren, müssen Sie SEMANTIC zur Liste CONTROL_FILTER in der Datei config_dev.yaml hinzufügen. Nachfolgend finden Sie die detaillierte semantische Steuerfilterkonfiguration in der Datei config_dev.yaml

  • CONTROL_FILTER: Eine Liste von Filtermethoden, die Sie auf die Steuerungen anwenden möchten. Um die semantische Steuerfilterung zu aktivieren, fügen Sie SEMANTIC zur Liste hinzu.
  • CONTROL_FILTER_TOP_K_SEMANTIC: Die Anzahl der Steuerungen, die nach dem Filtern beibehalten werden sollen.
  • CONTROL_FILTER_MODEL_SEMANTIC_NAME: Der Name des Steuerfiltermodells für semantische Ähnlichkeit. Standardmäßig ist es auf "all-MiniLM-L6-v2" gesetzt.

Referenz

Basen: BasicControlFilter

Eine Klasse, die ein semantisches Modell für die Steuerungsfilterung darstellt.

control_filter(control_dicts, plans, top_k)

Filtert Steuerungs-Elemente basierend auf ihrer Ähnlichkeit mit einer Menge von Schlüsselwörtern.

Parameter
  • control_dicts

    Das Wörterbuch der zu filternden Steuerungs-Elemente.

  • plans

    Die Liste der für die Filterung zu verwendenden Pläne.

  • top_k

    Die Anzahl der zurückzugebenden obersten Steuerungs-Elemente.

Rückgabe
  • Die gefilterten Steuerungs-Elemente.

Quellcode in automator/ui_control/control_filter.py
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
def control_filter(self, control_dicts, plans, top_k):
    """
    Filters control items based on their similarity to a set of keywords.
    :param control_dicts: The dictionary of control items to be filtered.
    :param plans: The list of plans to be used for filtering.
    :param top_k: The number of top control items to return.
    :return: The filtered control items.
    """
    scores_items = []
    filtered_control_dict = {}

    for label, control_item in control_dicts.items():
        control_text = control_item.element_info.name.lower()
        score = self.control_filter_score(control_text, plans)
        scores_items.append((label, score))
    topk_scores_items = heapq.nlargest(top_k, (scores_items), key=lambda x: x[1])
    topk_items = [
        (score_item[0], score_item[1]) for score_item in topk_scores_items
    ]

    for label, control_item in control_dicts.items():
        if label in topk_items:
            filtered_control_dict[label] = control_item
    return filtered_control_dict

control_filter_score(control_text, plans)

Berechnet den Score für ein Steuerungs-Element basierend auf der Ähnlichkeit seines Textes mit einer Menge von Schlüsselwörtern.

Parameter
  • control_text

    Der Text des Steuerungs-Elements.

  • plans

    Der für die Berechnung der Ähnlichkeit zu verwendende Plan.

Rückgabe
  • Der Score (0-1), der die Ähnlichkeit zwischen dem Steuerungs-Text und den Schlüsselwörtern angibt.

Quellcode in automator/ui_control/control_filter.py
197
198
199
200
201
202
203
204
205
206
207
def control_filter_score(self, control_text, plans):
    """
    Calculates the score for a control item based on the similarity between its text and a set of keywords.
    :param control_text: The text of the control item.
    :param plans: The plan to be used for calculating the similarity.
    :return: The score (0-1) indicating the similarity between the control text and the keywords.
    """

    plan_embedding = self.get_embedding(plans)
    control_text_embedding = self.get_embedding(control_text)
    return max(self.cos_sim(control_text_embedding, plan_embedding).tolist()[0])