Jieba

Der jieba Tokenizer verarbeitet chinesischen Text, indem er ihn in seine Wortbestandteile zerlegt.

Der Tokenisierer jieba behält Satzzeichen als separate Token in der Ausgabe bei. Zum Beispiel wird "你好!世界。" zu ["你好", "!", "世界", "。"]. Um diese eigenständigen Interpunktionszeichen zu entfernen, verwenden Sie den removepunct Filter.

Konfiguration

Milvus unterstützt zwei Konfigurationsansätze für den jieba Tokenizer: eine einfache Konfiguration und eine benutzerdefinierte Konfiguration.

Einfache Konfiguration

Bei der einfachen Konfiguration müssen Sie den Tokenizer nur auf "jieba" setzen. Zum Beispiel:

# Simple configuration: only specifying the tokenizer name
analyzer_params = {
    "tokenizer": "jieba",  # Use the default settings: dict=["_default_"], mode="search", hmm=True
}
Map<String, Object> analyzerParams = new HashMap<>();
analyzerParams.put("tokenizer", "jieba");
const analyzer_params = {
    "tokenizer": "jieba",
};
analyzerParams = map[string]any{"tokenizer": "jieba"}
# restful
analyzerParams='{
  "tokenizer": "jieba"
}'

Diese einfache Konfiguration ist äquivalent zu der folgenden benutzerdefinierten Konfiguration:

# Custom configuration equivalent to the simple configuration above
analyzer_params = {
    "type": "jieba",          # Tokenizer type, fixed as "jieba"
    "dict": ["_default_"],     # Use the default dictionary
    "mode": "search",          # Use search mode for improved recall (see mode details below)
    "hmm": True                # Enable HMM for probabilistic segmentation
}
Map<String, Object> analyzerParams = new HashMap<>();
analyzerParams.put("type", "jieba");
analyzerParams.put("dict", Collections.singletonList("_default_"));
analyzerParams.put("mode", "search");
analyzerParams.put("hmm", true);
// javascript
analyzerParams = map[string]any{"type": "jieba", "dict": []any{"_default_"}, "mode": "search", "hmm": true}
# restful

Einzelheiten zu den Parametern finden Sie unter Benutzerdefinierte Konfiguration.

Benutzerdefinierte Konfiguration

Um mehr Kontrolle zu haben, können Sie eine benutzerdefinierte Konfiguration bereitstellen, mit der Sie ein benutzerdefiniertes Wörterbuch angeben, den Segmentierungsmodus auswählen und das Hidden Markov Model (HMM) aktivieren oder deaktivieren können. Zum Beispiel:

# Custom configuration with user-defined settings
analyzer_params = {
    "tokenizer": {
        "type": "jieba",           # Fixed tokenizer type
        "dict": ["customDictionary"],  # Custom dictionary list; replace with your own terms
        "mode": "exact",           # Use exact mode (non-overlapping tokens)
        "hmm": False               # Disable HMM; unmatched text will be split into individual characters
    }
}
Map<String, Object> analyzerParams = new HashMap<>();                                                                          
analyzerParams.put("tokenizer", new HashMap<String, Object>() {{
  put("type", "jieba");                                                                                                      
  put("dict", Arrays.asList("customDictionary"));             
  put("mode", "exact");
  put("hmm", false);
}});

// javascript
analyzerParams := map[string]interface{}{
  "tokenizer": map[string]interface{}{
      "type": "jieba",
      "dict": []string{"customDictionary"},
      "mode": "exact",
      "hmm":  false,
  },
}
# restful

Parameter

Beschreibung

Standardwert

type

Der Typ des Tokenizers. Dieser ist auf "jieba" festgelegt.

"jieba"

dict

Eine Liste von Wörterbüchern, die der Analyzer als Vokabularquelle laden wird. Eingebaute Optionen:

  • "_default_": Lädt das eingebaute Wörterbuch der Engine für vereinfachtes Chinesisch. Details finden Sie in dict.txt.

  • "_extend_default_": Lädt alles, was in "_default_" steht, plus eine zusätzliche Ergänzung in traditionellem Chinesisch. Einzelheiten dazu finden Sie in dict.txt.big.

    Sie können auch das integrierte Wörterbuch mit einer beliebigen Anzahl von benutzerdefinierten Wörterbüchern mischen. Beispiel: ["_default_", "结巴分词器"].

["_default_"]

mode

Der Segmentierungsmodus. Mögliche Werte:

  • "exact": Versucht, den Satz so genau wie möglich zu segmentieren, was ideal für die Textanalyse ist.

  • "search": Baut auf dem exakten Modus auf, indem er lange Wörter weiter aufschlüsselt, um die Wiedererkennung zu verbessern, wodurch er sich für die Tokenisierung durch Suchmaschinen eignet.

    Weitere Informationen finden Sie im Jieba GitHub Projekt.

"search"

hmm

Ein boolesches Flag, das angibt, ob das Hidden Markov Model (HMM) für die probabilistische Segmentierung von Wörtern, die nicht im Wörterbuch enthalten sind, aktiviert werden soll.

true

Um ein großes benutzerdefiniertes Vokabular aus einer externen Datei zu laden, anstatt es über dict einzubinden, siehe Benutzerdefinierte Konfiguration mit einer Wörterbuchdatei unten.

Nachdem Sie analyzer_params definiert haben, können Sie sie bei der Definition eines Sammelschemas auf ein VARCHAR Feld anwenden. Dies ermöglicht es Milvus, den Text in diesem Feld mit dem angegebenen Analysator zu verarbeiten, um eine effiziente Tokenisierung und Filterung zu erreichen. Details finden Sie unter Beispielanwendung.

Benutzerdefinierte Konfiguration mit einer WörterbuchdateiCompatible with Milvus 3.0.x

Für große benutzerdefinierte Vokabulare - Domänenglossare, Produktterminologie oder Listen von Eigennamen - speichern Sie die Wörter in einer Datei und registrieren Sie die Datei als Remote-Dateiressource, um sie dann vom Tokenizer über den Parameter extra_dict_file zu referenzieren. Der Analyzer lädt diese Wörter in sein Vokabular zusätzlich zum integrierten Wörterbuch.

Die Datei ist ein einfacher UTF-8-Text mit einem Begriff pro Zeile. Ein Beispiel:

结巴分词器
向量数据库

Laden Sie die Datei in den Objektspeicher hoch, für den Ihr Milvus-Cluster konfiguriert ist, und registrieren Sie sie dann:

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530")

# Register the uploaded file under a name you'll reference from analyzer configs.
client.add_file_resource(
    name="zh_terms",
    path="file/zh_terms.txt",    # full S3 object key, including the rootPath prefix
)
// java
// nodejs
// go
# restful

Verweisen Sie auf die registrierte Ressource im Tokenizer über extra_dict_file:

analyzer_params = {
    "tokenizer": {
        "type": "jieba",
        "dict": ["_default_"],             # keep the built-in dictionary
        "mode": "exact",
        "hmm": False,
        "extra_dict_file": {
            "type": "remote",
            "resource_name": "zh_terms",
            "file_name": "zh_terms.txt",
        },
    },
}

client.run_analyzer(["milvus结巴分词器中文测试"], analyzer_params)
# → [['milvus', '结巴', '分词器', '中文', '测试']]
// java
// nodejs
// go
# restful

Der Parameter extra_dict_file nimmt ein Objekt mit den folgenden Feldern an:

Feld

Beschreibung

type

Der Ressourcentyp. Verwenden Sie "remote" für eine über add_file_resource registrierte Datei. Informationen zur Variante "local", die in selbst gehosteten Bereitstellungen verwendet wird, finden Sie unter Verwalten von Dateiressourcen.

resource_name

Der Name, der verwendet wurde, als die Datei mit add_file_resource registriert wurde.

file_name

Der Teil des Dateinamens des Objektspeicherpfads der registrierten Ressource (z. B. "zh_terms.txt", wenn die Ressource mit path="file/zh_terms.txt" registriert wurde).

Wörter, die über extra_dict_file hinzugefügt werden, werden mit dem eingebauten Wörterbuch zusammengeführt, so dass der jieba-Segmentierungsalgorithmus sie neben bestehenden Einträgen sieht. Ob ein bestimmter Begriff als eigenständiges Token auftaucht, hängt von der wahrscheinlichkeitsgewichteten DAG-Auswahl von jieba ab - ein langer benutzerdefinierter Begriff wie 向量数据库 kann immer noch in 向量 + 数据库 aufgeteilt werden, wenn diese kürzeren Einträge eine höhere Häufigkeit im eingebauten Wörterbuch haben.

Beispiele

Bevor Sie die Analyzer-Konfiguration auf Ihr Sammelschema anwenden, überprüfen Sie das Verhalten mit der Methode run_analyzer.

Analyzer-Konfiguration

analyzer_params = {
    "tokenizer": {
        "type": "jieba",
        "dict": ["结巴分词器"],
        "mode": "exact",
        "hmm": False
    }
}
Map<String, Object> analyzerParams = new HashMap<>();                                                                          
analyzerParams.put("tokenizer", new HashMap<String, Object>() {{
  put("type", "jieba");                                                                                                      
  put("dict", Arrays.asList("结巴分词器"));                   
  put("mode", "exact");
  put("hmm", false);
}});
// javascript
analyzerParams := map[string]interface{}{
  "tokenizer": map[string]interface{}{
      "type": "jieba",
      "dict": []string{"结巴分词器"},
      "mode": "exact",
      "hmm":  false,
  },
}
# restful

Überprüfung mit run_analyzer

from pymilvus import (
    MilvusClient,
)

client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus"
)

# Sample text to analyze
sample_text = "milvus结巴分词器中文测试"

# Run the standard analyzer with the defined configuration
result = client.run_analyzer(sample_text, analyzer_params)
print("Standard analyzer output:", result)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.vector.request.RunAnalyzerReq;
import io.milvus.v2.service.vector.response.RunAnalyzerResp;

ConnectConfig config = ConnectConfig.builder()
        .uri("http://localhost:19530")
        .token("root:Milvus")
        .build();
MilvusClientV2 client = new MilvusClientV2(config);

List<String> texts = new ArrayList<>();
texts.add("milvus结巴分词器中文测试");

RunAnalyzerResp resp = client.runAnalyzer(RunAnalyzerReq.builder()
        .texts(texts)
        .analyzerParams(analyzerParams)
        .build());
List<RunAnalyzerResp.AnalyzerResult> results = resp.getResults();
// javascript
import (
    "context"
    "encoding/json"
    "fmt"

    "github.com/milvus-io/milvus/client/v2/milvusclient"
)

client, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
    Address: "localhost:19530",
    APIKey:  "root:Milvus",
})
if err != nil {
    fmt.Println(err.Error())
    // handle error
}

bs, _ := json.Marshal(analyzerParams)
texts := []string{"milvus结巴分词器中文测试"}
option := milvusclient.NewRunAnalyzerOption(texts).
    WithAnalyzerParams(string(bs))

result, err := client.RunAnalyzer(ctx, option)
if err != nil {
    fmt.Println(err.Error())
    // handle error
}
# restful

Erwartete Ausgabe

['milvus', '结巴分词器', '中', '文', '测', '试']

Übersetzt vonDeepL

Verwaltetes Milvus kostenlos testen

Zilliz Cloud ist unkompliziert, basiert auf Milvus und ist 10-mal schneller.

Loslegen
Feedback

War diese Seite hilfreich?