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)
- DocumentLanguageClassifier — Haystack 공식 문서