DocumentLanguageClassifier
使用此组件按语言对文档进行分类,并将语言信息添加到元数据中。
| pipeline 中的最常见位置 | 在 MetadataRouter 之前 |
| 强制运行变量 | "documents": 文档列表 |
| 输出变量 | "documents": 文档列表 |
| API 参考 | Classifiers (分类器) |
| GitHub 链接 | https://github.com/deepset-ai/haystack/blob/main/haystack/components/classifiers/document_language_classifier.py |
概述
DocumentLanguageClassifier 会对文档进行语言分类,并将检测到的语言添加到其元数据中。如果文档的文本与初始化时指定的任何语言都不匹配,则将其分类为“unmatched”。默认情况下,分类器会对英语(“en”)文档进行分类,其余的分类为“unmatched”。
在 init 方法中使用languages 变量(使用 ISO 代码)可以指定支持的语言集。
要根据语言将文档路由到管道的各个分支,请在MetadataRouter 组件之后立即使用DocumentLanguageClassifier.
要使用相同的逻辑对纯文本进行分类和路由,请使用TextLanguageRouter 组件。
用法
安装langdetect 包即可使用DocumentLanguageClassifier 组件。
pip install langdetect
单独使用
下面,我们使用DocumentLanguageClassifier 来分类英语和德语文档。
from haystack.components.classifiers 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)
在 pipeline 中
下面,我们使用在索引管道中使用 DocumentLanguageClassifier,将英语和德语文档索引到 InMemoryDocumentStore 的两个不同索引中,并为每种语言使用嵌入模型。InMemoryDocumentStore,使用每种语言的嵌入模型。
from haystack import Pipeline
from haystack import Document
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.classifiers import DocumentLanguageClassifier
from haystack.components.embedders 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(instance=document_classifier, name="document_classifier")
indexing_pipeline.add_component(instance=metadata_router, name="metadata_router")
indexing_pipeline.add_component(instance=english_embedder, name="english_embedder")
indexing_pipeline.add_component(instance=german_embedder, name="german_embedder")
indexing_pipeline.add_component(instance=en_writer, name="en_writer")
indexing_pipeline.add_component(instance=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.")]}})
更新于 大约 1 年前
