Verbessern eines Index mit Analysetools und Tokenausdrücken
Azure KI-Suche ist standardmäßig für das Analysieren von Text und das Identifizieren von Token konfiguriert, die für Ihren Index nützlich sind. Mit den richtigen Token können Sie sicherstellen, dass Benutzer die benötigten Dokumente schnell finden. In den meisten Fällen erzeugt die Standardkonfiguration einen optimalen Index. Wenn Sie jedoch mit ungewöhnlichen oder einmaligen Feldern arbeiten, sollten Sie genau konfigurieren, wie Text analysiert wird.
Hier erfahren Sie, wie Sie ein benutzerdefiniertes Analysetool definieren, um zu steuern, wie der Inhalt eines Felds für die Aufnahme in den Index in Token aufgeteilt wird.
Analysetools in der KI-Suche
Wenn die Azure KI-Suche Ihre Inhalte indiziert, ruft sie Text ab. Um einen nützlichen Index mit Begriffen zu erstellen, die Benutzern beim Auffinden von Dokumenten helfen, muss dieser Text verarbeitet werden. Zum Beispiel:
- Der Text muss in einzelne Wörter aufgeteilt werden, dabei werden häufig Leer- und Satzzeichen als Trennzeichen verwendet.
- Stoppwörter wie „der“, „die“, „das“ oder „es“ sollten entfernt werden, da Benutzer nicht nach solchen Wörtern suchen.
- Wörter sollten auf ihre Stammform reduziert werden. Beispielsweise sollten Vergangenheitsformen wie „liefen“ durch die Präsensform „laufen“ ersetzt werden.
In der Azure KI-Suche wird diese Art der Verarbeitung durch Analysetools durchgeführt. Wenn Sie für ein Feld kein Analysetool angeben, wird das standardmäßige Analysetool Lucene verwendet. Das Standardanalysetool Lucene ist eine gute Wahl für die meisten Felder, da es viele Sprachen verarbeiten und nützliche Token für Ihren Index zurückgeben kann.
Alternativ können Sie eins der Analysetools angeben, die in die Azure KI-Suche integriert sind. Es gibt zwei Arten von integrierten Analysetools:
- Sprachanalysen. Wenn Sie erweiterte Funktionen für bestimmte Sprachen benötigen, z. B. Lemmatisierung, Trennung von Komposita oder Entitätserkennung, verwenden Sie ein integriertes Sprachanalysetool. Microsoft stellt 50 Analysetools für verschiedene Sprachen bereit.
- Spezialisierte Analysetools. Diese Analysetools sind sprachunabhängig und werden für spezielle Felder wie Postleitzahlen oder Produkt-IDs verwendet. Sie können beispielsweise PatternAnalyzer verwenden und einen regulären Ausdruck für einen Abgleich mit Tokentrennzeichen angeben.
Was ist ein benutzerdefiniertes Analysetool?
Die integrierten Analysetools bieten Ihnen viele Optionen, aber für manche Felder ist ein Analysetool mit eher ungewöhnlichem Verhalten erforderlich. In diesen Fällen können Sie ein benutzerdefiniertes Analysetool erstellen.
Ein benutzerdefiniertes Analysetool besteht aus Folgendem:
- Zeichenfilter. Diese Filter verarbeiten eine Zeichenfolge, bevor sie an den Tokenizer weitergegeben wird.
- Tokenizer. Diese Komponenten teilen den Text in Token auf, die dem Index hinzugefügt werden sollen.
- Tokenfilter. Diese Filter entfernen oder ändern die vom Tokenizer ausgegebenen Token.
Sehen wir uns diese Komponenten einmal genauer an.
Zeichenfilter
Für den Text müssen möglicherweise einige Vorgänge ausgeführt werden, bevor er in Token untergeteilt wird. Zeichenfilter ermöglichen diese Vorgänge. Es gibt drei Zeichenfilter, die Sie verwenden können:
- html_strip. Dieser Filter entfernt HTML-Strukturen wie Tags und Attribute.
- mapping. Mit diesem Filter können Sie Zuordnungen angeben, die eine Zeichenfolge durch eine andere ersetzen. Sie können beispielsweise eine Zuordnung angeben, die NRW durch Nordrhein-Westfalen ersetzt.
- pattern_replace. Mit diesem Filter können Sie einen regulären Ausdruck angeben, der Muster im Eingabetext identifiziert und festlegt, wie übereinstimmender Text ersetzt werden soll.
Tokenizer
Der Tokenizer ist die Komponente, die den Text in die Token unterteilt, die im Index gespeichert werden. Tokenizer reduzieren auch Wörter auf ihre Stammformen. Häufig ist ein Token ein einzelnes Wort, aber möglicherweise möchten Sie ungewöhnliche Token erstellen, wie z. B. folgende:
- Eine vollständige Postanschrift
- Eine vollständige URL oder E-Mail-Adresse
- Auf der Grammatik einer bestimmten Sprache basierende Wörter
13 verschiedene Tokenizer stehen zur Auswahl. Dazu gehören u. a. folgende:
- classic. Dieser Tokenizer verarbeitet Text basierend auf der Grammatik für europäische Sprachen.
- keyword. Dieser Tokenizer gibt die gesamte Eingabe als einzelnes Token aus. Verwenden Sie diesen Tokenizer für Felder, die immer als ein einzelner Wert indiziert werden sollen.
- lowercase. Dieser Tokenizer unterteilt Text bei Zeichen, bei denen es sich nicht um Buchstaben handelt, und ändert anschließend bei den resultierenden Token die Schreibweise in Kleinbuchstaben.
- microsoft_language_tokenizer. Dieser Tokenizer unterteilt Text basierend auf der Grammatik der von Ihnen angegebenen Sprache.
- pattern. Dieser Tokenizer unterteilt Texte an Stellen, die einem von Ihnen angegebenen regulären Ausdruck entsprechen.
- whitespace. Dieser Tokenizer unterteilt Text bei Leerzeichen.
Hinweis
Eine vollständige Liste aller Tokenizer finden Sie weiter unten im Abschnitt Weitere Informationen unter Hinzufügen von benutzerdefinierten Analysetools zu Zeichenfolgenfeldern in einem Index der Azure KI-Suche.
Tokenfilter
Nachdem der Tokenizer den eingehenden Text in Token unterteilt hat, möchten Sie möglicherweise eine zusätzliche Verarbeitung hinzufügen, z. B. das Entfernen von Stoppwörtern oder das Abschneiden nach Satzzeichen. Sie können diese Verarbeitung ausführen, indem Sie einen Tokenfilter angeben. Es gibt 41 verschiedene Tokenfilter, einschließlich der folgenden:
- Sprachspezifische Filter, z. B. arabic_normalization. Diese Filter wenden sprachspezifische Grammatikregeln an, um sicherzustellen, dass deklinierte oder konjugierte Wortformen entfernt und durch Stammformen ersetzt werden.
- apostrophe. Dieser Filter entfernt alle Apostrophe sowie alle darauf folgenden Zeichen aus einem Token.
- classic. Dieser Filter entfernt englische Possessivapostrophe und Punkte aus Akronymen.
- keep. Dieser Filter entfernt alle Token, die ein oder mehrere Wörter aus einer von Ihnen angegebenen Liste nicht enthalten.
- Länge. Dieser Filter entfernt alle Token, die länger oder kürzer als die von Ihnen angegebenen Mindest- oder Höchstwerte sind.
- trim. Dieser Filter entfernt alle führenden und nachstehenden Leerzeichen aus Token.
Hinweis
Eine vollständige Liste aller Tokenfilter finden Sie weiter unten im Abschnitt Weitere Informationen unter Hinzufügen von benutzerdefinierten Analysetools zu Zeichenfolgenfeldern in einem Index der Azure KI-Suche.
Erstellen eines benutzerdefinierten Analysetools
Sie erstellen ein benutzerdefiniertes Analysetool, indem Sie es angeben, wenn Sie den Index definieren. Dazu müssen Sie JSON-Code verwenden – es gibt keine Möglichkeit, einen benutzerdefinierten Index im Azure-Portal anzugeben. Verwenden Sie zur Entwurfszeit den Abschnitt analyzers
des Indexes. Sie können nur einen Tokenizer, aber einen oder mehrere Zeichenfilter und einen oder mehrere Tokenfilter einschließen. Verwenden Sie einen eindeutigen Namen für Ihr Analysetool, und legen Sie die Eigenschaft @odata.type
auf Microsoft.Azure.Search.CustomAnalyzer
fest.
In diesem Beispiel entfernt ein Zeichenfilter die HTML-Formatierung, ein Tokenizer unterteilt den Text entsprechend der Grammatik der isländischen Sprache, und ein Tokenfilter entfernt Apostrophe:
"analyzers":(optional)[
{
"name":"ContosoAnalyzer",
"@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
"charFilters":[
"WebContentRemover"
],
"tokenizer":"IcelandicTokenizer",
"tokenFilters":[
"ApostropheFilter"
]
}
],
"charFilters":(optional)[
{
"name":"WebContentRemover",
"@odata.type":"#html_strip"
}
],
"tokenizers":(optional)[
{
"name":"IcelandicTokenizer",
"@odata.type":"#microsoft_language_tokenizer",
"language":"icelandic",
"isSearchTokenizer":false,
}
],
"tokenFilters":(optional)[
{
"name":"ApostropheFilter",
"@odata.type":"#apostrophe"
}
]
Testen eines benutzerdefinierten Analysetools
Nachdem Sie Ihr benutzerdefiniertes Analysetool als Teil Ihres Indexes definiert haben, können Sie die REST-API-Funktion Text analysieren verwenden, um Testtext zu übermitteln und sicherzustellen, dass das Analysetool die Token korrekt zurückgibt. Zum Formulieren dieser Anforderungen können Sie ein beliebiges REST-Testtool verwenden, beispielsweise die beliebte Anwendung Postman.
Ihre REST-Testanforderungen sollten wie folgt aussehen:
POST https://<search service name>.search.windows.net/indexes/<index name>/analyze?api-version=<api-version>
Content-Type: application/json
api-key: <api key>
Führen Sie in dieser Anforderung Folgendes aus:
- Ersetzen Sie
<search service name>
durch den Namen Ihrer KI-Suche-Ressource. - Ersetzen Sie
<index name>
durch den Namen des Indexes, der das benutzerdefinierte Analysetool enthält. - Ersetzen Sie
<api-version>
durch die Versionsnummer der REST-API. - Ersetzen Sie
<api-key>
durch den Zugriffsschlüssel für Ihre KI-Suche-Ressource. Sie können diesen Schlüssel aus dem Azure-Portal abrufen.
Ihre Anforderung muss auch einen JSON-Text wie den folgenden enthalten:
{
"text": "Test text to analyze.",
"analyzer": "<analyzer name>"
}
Ersetzen Sie <analyzer name>
durch den Namen, den Sie beim Definieren des benutzerdefinierten Analysetools angegeben haben. Stellen Sie sicher, dass Sie mit vielen verschiedenen text
-Werten testen, bis Sie sicher sind, dass sich das benutzerdefinierte Analysetool wie erwartet verhält.
Verwenden eines benutzerdefinierten Analysetools für ein Feld
Nachdem Sie ein benutzerdefiniertes Analysetool definiert und getestet haben, können Sie Ihren Index für die Verwendung des Tools konfigurieren. Sie können ein Analysetool für jedes Feld in Ihrem Index angeben.
Sie können das analyzer
-Feld verwenden, wenn Sie ein und dasselbe Analysetool für die Indizierung und für die Suche verwenden möchten:
"fields": [
{
"name": "IcelandicDescription",
"type": "Edm.String",
"retrievable": true,
"searchable": true,
"analyzer": "ContosoAnalyzer",
"indexAnalyzer": null,
"searchAnalyzer": null
},
Es ist auch möglich, unterschiedliche Analysetools für das Indizieren des Felds und für das Durchsuchen des Felds zu verwenden. Verwenden Sie diese Konfiguration, wenn Sie für das Indizieren eines Felds und das Analysieren einer Abfrage unterschiedliche Verarbeitungsschritte benötigen:
"fields": [
{
"name": "IcelandicDescription",
"type": "Edm.String",
"retrievable": true,
"searchable": true,
"analyzer": null,
"indexAnalyzer": "ContosoIndexAnalyzer",
"searchAnalyzer": "ContosoSearchAnalyzer"
},