Я работаю над конвейером RAG (генерация с расширенным поиском), где сначала предварительно обрабатываю PDF-документ и разбиваю его на фрагменты. При запуске процесса RAG я извлекаю 5 верхних фрагментов и генерирую ответ. Чтобы обеспечить контекст, я хочу выделить эти 5 фрагментов в исходном PDF-документе.
Я использую библиотеку pdf.js во внешнем интерфейсе, которая технически может выделять текст, но я Я столкнулся с двумя проблемами:
Как соединить ограничивающие рамки с частями после разделения PDF-файла?
Как справиться с ситуациями, когда ограничивающие рамки перекрываются на страницах?
Для контекста я использую Haystack AI и Python для конвейера RAG. Любая информация о том, как извлечь ограничивающие рамки для этих фрагментов, будет очень полезна!
Мой код предварительной обработки
import json
import os
from pathlib import Path
from haystack import Pipeline
from haystack.components.converters import PyPDFToDocument
from haystack.components.embedders import SentenceTransformersDocumentEmbedder
from haystack.components.preprocessors import (
DocumentCleaner,
NLTKDocumentSplitter,
)
from haystack.components.writers import DocumentWriter
from haystack.document_stores.types import DuplicatePolicy
from haystack_integrations.components.embedders.fastembed import (
FastembedSparseDocumentEmbedder,
)
from haystack_integrations.document_stores.qdrant import QdrantDocumentStore
from utils.process_dataset import load_pdfs_config
document_store = QdrantDocumentStore(
":memory:",
use_sparse_embeddings=True,
recreate_index=True,
embedding_dim=1024, # based on the embedding model
return_embedding=False,
wait_result_from_api=True,
)
indexing_pipeline = Pipeline()
indexing_pipeline.add_component("converter", PyPDFToDocument())
indexing_pipeline.add_component("cleaner", DocumentCleaner())
indexing_pipeline.add_component(
"splitter",
NLTKDocumentSplitter(
split_by="word",
respect_sentence_boundary=False,
split_length=200,
split_overlap=40,
),
)
indexing_pipeline.add_component(
"sparse_doc_embedder", FastembedSparseDocumentEmbedder(model="Qdrant/bm25")
)
indexing_pipeline.add_component(
"dense_doc_embedder",
SentenceTransformersDocumentEmbedder(
model="intfloat/multilingual-e5-large-instruct"
),
)
indexing_pipeline.add_component(
"writer",
DocumentWriter(document_store=document_store, policy=DuplicatePolicy.OVERWRITE),
)
indexing_pipeline.connect("converter", "splitter")
indexing_pipeline.connect("splitter", "sparse_doc_embedder")
indexing_pipeline.connect("sparse_doc_embedder", "dense_doc_embedder")
indexing_pipeline.connect("dense_doc_embedder", "writer")
Подробнее здесь: https://stackoverflow.com/questions/793 ... ight-top-5
Как получить ограничительные коробки (Bbox) для кусков в тряпичном трубопроводе, чтобы выделить 5 лучших кусков в докуме ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Ограничительные рамки обнаружения объектов с использованием yolov5s и onnx на ml.net
Anonymous » » в форуме C# - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-