Ulepszanie indeksu za pomocą analizatorów i tokenizowanych terminów

Ukończone

Usługa Azure AI Search jest domyślnie skonfigurowana do analizowania tekstu i identyfikowania tokenów, które będą przydatne w indeksie. Odpowiednie tokeny zapewniają, że użytkownicy mogą szybko znaleźć potrzebne dokumenty. W większości przypadków domyślna konfiguracja generuje optymalny indeks. Jeśli jednak masz nietypowe lub unikatowe pola, możesz skonfigurować dokładnie sposób analizowania tekstu.

W tym miejscu dowiesz się, jak zdefiniować analizator niestandardowy, aby kontrolować, jak zawartość pola jest podzielona na tokeny do dołączenia do indeksu.

Gdy usługa AI Search indeksuje zawartość, pobiera tekst. Aby utworzyć przydatny indeks, terminy, które ułatwiają użytkownikom lokalizowanie dokumentów, tekst wymaga przetwarzania. Na przykład:

  • Tekst powinien być podzielony na wyrazy, często przy użyciu białych znaków i znaków interpunkcyjnych jako ograniczników.
  • Stopwords, takie jak "the" i "it", należy usunąć, ponieważ użytkownicy nie szukają ich.
  • Wyrazy należy zmniejszyć do ich formy głównej. Na przykład ostatnie napięte wyrazy, takie jak "ran", powinny zostać zastąpione napiętymi wyrazami, takimi jak "run".

W wyszukiwaniu sztucznej inteligencji tego rodzaju przetwarzanie jest wykonywane przez analizatory. Jeśli nie określisz analizatora dla pola, zostanie użyty domyślny analizator Lucene. Domyślny analizator Lucene jest dobrym wyborem dla większości pól, ponieważ może przetwarzać wiele języków i zwracać przydatne tokeny dla indeksu.

Alternatywnie możesz określić jeden z analizatorów wbudowanych w wyszukiwanie sztucznej inteligencji. Wbudowane analizatory mają dwa typy:

  • Analizatory języków. Jeśli potrzebujesz zaawansowanych funkcji dla określonych języków, takich jak lemmatization, word decompounding i rozpoznawanie jednostek, użyj wbudowanego analizatora języka. Firma Microsoft udostępnia 50 analizatorów dla różnych języków.
  • Wyspecjalizowane analizatory. Te analizatory są niezależne od języka i używane do wyspecjalizowanych pól, takich jak kody pocztowe lub identyfikatory produktów. Możesz na przykład użyć metody PatternAnalyzer i określić wyrażenie regularne, aby dopasować separatory tokenów.

Co to jest analizator niestandardowy?

Wbudowane analizatory zapewniają wiele opcji, ale czasami potrzebujesz analizatora z nietypowym zachowaniem pola. W takich przypadkach można utworzyć analizator niestandardowy.

Analizator niestandardowy składa się z następujących elementów:

  • Filtry znaków. Te filtry przetwarzają ciąg przed dotarciem do tokenizatora.
  • Tokenizatory. Te składniki dzielą tekst na tokeny, które mają zostać dodane do indeksu.
  • Filtry tokenów. Te filtry usuwają lub modyfikują tokeny emitowane przez tokenizator.

Przyjrzyjmy się tym składnikom bardziej szczegółowo.

Filtry znaków

Przed podzieleniem na tokeny niektóre operacje mogą być konieczne w tekście. Filtry znaków umożliwiają wykonywanie tych operacji. Istnieją trzy filtry znaków, których można użyć:

  • html_strip. Ten filtr usuwa konstrukcje HTML, takie jak tagi i atrybuty.
  • mapowanie. Ten filtr umożliwia określenie mapowań, które zastępują jeden ciąg innym. Można na przykład określić mapowanie, które zastępuje TX teksasem.
  • pattern_replace. Ten filtr umożliwia określenie wyrażenia regularnego identyfikującego wzorce w tekście wejściowym i sposób zastępowania pasującego tekstu.

Tokenizatory

Tokenizer to składnik, który dzieli tekst na tokeny, które będą przechowywane w indeksie. Tokenizatory dzielą również wyrazy na ich formularze główne. Często token jest pojedynczym słowem, ale warto utworzyć nietypowe tokeny, takie jak:

  • Pełny adres pocztowy.
  • Pełny adres URL lub adres e-mail.
  • Słowa oparte na gramatyce określonego języka.

Istnieje 13 różnych tokenizatorów do wyboru. Te tokenizatory obejmują:

  • klasyczny. Ten tokenizer przetwarza tekst na podstawie gramatyki dla języków europejskich.
  • słowo kluczowe. Ten tokenizator emituje całe dane wejściowe jako pojedynczy token. Użyj tego tokenizatora dla pól, które powinny być zawsze indeksowane jako jedna wartość.
  • Małe litery. Ten tokenizer dzieli tekst na litery inne niż litery, a następnie modyfikuje wynikowe tokeny na wszystkie małe litery.
  • microsoft_language_tokenizer. Ten tokenizer dzieli tekst na podstawie gramatyki określonego języka.
  • deseń. Ten tokenizer dzieli teksty, w których pasuje do określonego wyrażenia regularnego.
  • Odstępu. Ten tokenizer dzieli tekst wszędzie tam, gdzie znajduje się biały znak.

Uwaga

Aby uzyskać pełną listę tokenizatorów, zobacz Dodawanie analizatorów niestandardowych do pól ciągów w indeksie usługi Azure AI Search w poniższej sekcji Dowiedz się więcej .

Filtry tokenów

Gdy tokenizer podzieli tekst przychodzący na tokeny, możesz dodać dodatkowe przetwarzanie, takie jak usuwanie stopwords lub przycinanie znaków interpunkcyjnych. To przetwarzanie można wykonać, określając filtr tokenu. Dostępnych jest czterdzieści różnych filtrów tokenów, w tym:

  • Filtry specyficzne dla języka, takie jak arabic_normalization. Te filtry stosują reguły gramatyczne specyficzne dla języka, aby upewnić się, że formy wyrazów są usuwane i zastępowane elementami korzeniowymi.
  • apostrof. Ten filtr usuwa wszelkie apostrofy z tokenu i wszelkie znaki po apostrofie.
  • klasyczny. Ten filtr usuwa angielskie opętacze i kropki z akronimów.
  • zachować. Ten filtr usuwa wszystkie tokeny, które nie zawierają co najmniej jednego słowa z określonej listy.
  • długość. Ten filtr usuwa wszystkie tokeny, które są dłuższe niż określone minimum lub krótsze niż określona wartość maksymalna.
  • przycinać. Ten filtr usuwa wszystkie wiodące i końcowe białe znaki z tokenów.

Uwaga

Aby uzyskać pełną listę filtrów tokenów, zobacz Dodawanie analizatorów niestandardowych do pól ciągów w indeksie usługi Azure AI Search w poniższej sekcji Dowiedz się więcej .

Tworzenie niestandardowego analizatora

Analizator niestandardowy można utworzyć, określając go podczas definiowania indeksu. Należy to zrobić przy użyciu kodu JSON — nie ma możliwości określenia indeksu niestandardowego w witrynie Azure Portal. analyzers Użyj sekcji indeksu w czasie projektowania. Można dołączyć tylko jeden tokenizer, ale co najmniej jeden filtr znaków i co najmniej jeden filtr tokenu. Użyj unikatowej nazwy analizatora @odata.type i ustaw właściwość na Microsoft.Azure.Search.CustomAnalyzer.

W tym przykładzie filtr znaków usuwa formatowanie HTML, tokenizer dzieli tekst zgodnie z gramatyką islandii, a filtr tokenu usuwa apostrofy:

"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"
   }
]

Testowanie analizatora niestandardowego

Po zdefiniowaniu analizatora niestandardowego w ramach indeksu możesz użyć funkcji Analyze Text interfejsu API REST, aby przesłać tekst testowy i upewnić się, że analizator prawidłowo zwraca tokeny. Użyj dowolnego narzędzia do testowania REST, aby sformułować te żądania, takie jak popularna aplikacja Postman .

Żądania REST testów powinny wyglądać następująco:

POST https://<search service name>.search.windows.net/indexes/<index name>/analyze?api-version=<api-version>
   Content-Type: application/json
   api-key: <api key>

W tym żądaniu:

  • Zastąp <search service name> ciąg nazwą zasobu wyszukiwania sztucznej inteligencji.
  • Zastąp <index name> ciąg nazwą indeksu, który zawiera analizator niestandardowy.
  • Zastąp <api-version> ciąg numerem wersji interfejsu API REST.
  • Zastąp <api-key> ciąg kluczem dostępu dla zasobu wyszukiwania sztucznej inteligencji. Ten klucz można uzyskać w witrynie Azure Portal.

Żądanie musi również zawierać treść JSON w następujący sposób:

{
  "text": "Test text to analyze.",
  "analyzer": "<analyzer name>"
}

Zastąp <analyzer name> ciąg nazwą określoną podczas definiowania analizatora niestandardowego. Pamiętaj, aby przetestować wiele różnych text wartości, dopóki nie będziesz mieć pewności, że analizator niestandardowy zachowuje się zgodnie z oczekiwaniami.

Używanie analizatora niestandardowego dla pola

Po zdefiniowaniu i przetestowaniu analizatora niestandardowego możesz skonfigurować indeks tak, aby używał go. Możesz określić analizator dla każdego pola w indeksie.

Możesz użyć analyzer pola, jeśli chcesz użyć tego samego analizatora do indeksowania i wyszukiwania:

"fields": [
 {
   "name": "IcelandicDescription",
   "type": "Edm.String",
   "retrievable": true,
   "searchable": true,
   "analyzer": "ContosoAnalyzer",
   "indexAnalyzer": null,
   "searchAnalyzer": null
 },

Można również użyć innego analizatora podczas indeksowania pola i podczas przeszukiwania pola. Użyj tej konfiguracji, jeśli potrzebujesz innego zestawu kroków przetwarzania podczas indeksowania pola do podczas analizowania zapytania:

"fields": [
 {
   "name": "IcelandicDescription",
   "type": "Edm.String",
   "retrievable": true,
   "searchable": true,
   "analyzer": null,
   "indexAnalyzer": "ContosoIndexAnalyzer",
   "searchAnalyzer": "ContosoSearchAnalyzer"
 },

Dowiedz się więcej

Dodawanie analizatorów niestandardowych do pól ciągów w indeksie usługi Azure AI Search