DocumentLanguageClassifier

DocumentLanguageClassifier

DocumentLanguageClassifier는 문서의 언어를 분류하고 감지된 언어를 문서 메타데이터에 추가해요. 문서 텍스트가 초기화 시 지정한 언어 중 어느 것과도 일치하지 않으면 "unmatched"로 분류됩니다. 기본적으로 영어(”en”) 문서로 분류하며, 나머지는 “unmatched”로 분류해요.

출처: 문서

본문

Overview

지원되는 언어 집합은 init 메서드의 languages 변수로 ISO 코드를 사용해 지정할 수 있습니다.

언어에 따라 문서를 파이프라인의 여러 분기로 라우팅하려면 DocumentLanguageClassifier 바로 뒤에 MetadataRouter 컴포넌트를 사용하세요.

같은 로직으로 평문을 분류하고 라우팅하려면 TextLanguageRouter 컴포넌트를 대신 사용하세요.

Usage

DocumentLanguageClassifier 컴포넌트를 사용하려면 langdetect-haystack 패키지를 설치하세요:

pip install langdetect-haystack

On its own

아래에서는 DocumentLanguageClassifier로 영어와 독일어 문서를 분류합니다:

이 페이지의 예시는 sentence-transformers-haystack 패키지의 Sentence Transformers embedder를 사용해요. 예시를 실행하려면 설치하세요:

pip install sentence-transformers-haystack
from haystack_integrations.components.classifiers.langdetect import (
    DocumentLanguageClassifier,
)
from haystack import Document

documents = [
    Document(content="Mein Name ist Jean und ich wohne in Paris."),
    Document(content="Mein Name ist Mark und ich wohne in Berlin."),
    Document(content="Mein Name ist Giorgio und ich wohne in Rome."),
    Document(content="My name is Pierre and I live in Paris"),
    Document(content="My name is Paul and I live in Berlin."),
    Document(content="My name is Alessia and I live in Rome."),
]

document_classifier = DocumentLanguageClassifier(languages=["en", "de"])
document_classifier.run(documents=documents)

In a pipeline

아래에서는 언어별 임베딩 모델을 사용해 영어·독일어 문서를 InMemoryDocumentStore의 서로 다른 두 인덱스에 인덱싱하는 인덱싱 파이프라인에서 DocumentLanguageClassifier를 사용합니다.

from haystack import Pipeline
from haystack import Document
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack_integrations.components.classifiers.langdetect import (
    DocumentLanguageClassifier,
)
from haystack_integrations.components.embedders.sentence_transformers import (
    SentenceTransformersDocumentEmbedder,
)
from haystack.components.writers import DocumentWriter
from haystack.components.routers import MetadataRouter

document_store_en = InMemoryDocumentStore()
document_store_de = InMemoryDocumentStore()

document_classifier = DocumentLanguageClassifier(languages=["en", "de"])
metadata_router = MetadataRouter(
    rules={"en": {"language": {"$eq": "en"}}, "de": {"language": {"$eq": "de"}}},
)
english_embedder = SentenceTransformersDocumentEmbedder()
german_embedder = SentenceTransformersDocumentEmbedder(
    model="PM-AI/bi-encoder_msmarco_bert-base_german",
)
en_writer = DocumentWriter(document_store=document_store_en)
de_writer = DocumentWriter(document_store=document_store_de)

indexing_pipeline = Pipeline()
indexing_pipeline.add_component(document_classifier, name="document_classifier")
indexing_pipeline.add_component(metadata_router, name="metadata_router")
indexing_pipeline.add_component(english_embedder, name="english_embedder")
indexing_pipeline.add_component(german_embedder, name="german_embedder")
indexing_pipeline.add_component(en_writer, name="en_writer")
indexing_pipeline.add_component(de_writer, name="de_writer")

indexing_pipeline.connect("document_classifier.documents", "metadata_router.documents")
indexing_pipeline.connect("metadata_router.en", "english_embedder.documents")
indexing_pipeline.connect("metadata_router.de", "german_embedder.documents")
indexing_pipeline.connect("english_embedder", "en_writer")
indexing_pipeline.connect("german_embedder", "de_writer")

indexing_pipeline.run(
    {
        "document_classifier": {
            "documents": [
                Document(content="This is an English sentence."),
                Document(content="Dies ist ein deutscher Satz."),
            ],
        },
    },
)

더 알아보기 (Learn more)