1 puan yazan GN⁺ 2024-01-26 | 1 yorum | WhatsApp'ta paylaş
  • nlm-ingestor, llmsherpa API'nin bağlanarak kullandığı servis kodudur; RAG'ye yönelik PDF, HTML, Text, DOCX, PPTX gibi belge ayrıştırıcıları sunar
  • PDF ayrıştırıcı, nlmatics'in değiştirilmiş Tika sürümünden elde edilen metin koordinatları, grafik ve font verilerini kullanır; taranmış sayfalar varsa apply_ocr seçeneğiyle OCR otomatik olarak uygulanabilir
  • PDF işleme özellikleri arasında bölüm ve alt bölüm seviyeleri, paragraf birleştirme, bölüm-paragraf bağlantısı, tablolar, iç içe listeler, sayfalar arası içerik birleştirme, tekrarlanan üstbilgi ve altbilgilerin kaldırılması, filigran kaldırma ve OCR sınırlayıcı kutuları yer alır
  • Model tabanlı görsel ayrıştırıcılarla karşılaştırıldığında, kural tabanlı ayrıştırıcının PDF sayfa görüntüleri oluşturması gerekmediği için 100 kat daha hızlı olduğu belirtiliyor; OCR olmayan metin katmanlı PDF'lerde ve yüzlerce sayfalık belgelerde daha pratik olduğu düşünülüyor
  • Geliştirme sunucusu Docker ile veya doğrudan çalıştırılarak ayağa kaldırılabilir; üretim ortamında ise nginx ya da bulut ağ geçidi gibi bir güvenli ağ geçidinin arkasında çalıştırılması önerilir

nlm-ingestor'ın sunduğu belge ayrıştırıcıları

  • nlm-ingestor, llmsherpa API'sinin bağlanabileceği bir servis kodu deposudur
  • RAG'ye (retrieval augmented generation) yönelik özel ayrıştırıcıları birden fazla dosya biçimi için sunar
    • PDF

    • HTML

    • Text

      • DOCX, PPTX ve Apache Tika'nın desteklediği diğer biçimler

PDF ayrıştırıcının çalışma biçimi ve özellikleri

  • PDF ayrıştırıcı kural tabanlıdır ve nlmatics'in değiştirilmiş nlm-tika sürümünden elde edilen metin koordinatları, grafikler ve font verilerini kullanır
  • PDF metin katmanına dayanarak çalışır; apply_ocr seçeneğiyle PDF'de taranmış sayfalar varsa OCR otomatik olarak uygulanabilir
  • OCR özelliği, dahili olarak tesseract kullanan nlmatics'in değiştirilmiş Tika sürümüne dayanır
  • PDF ayrıştırıcıyı doğrudan denemek için pdf_visual_ingestor_step_by_step adlı notebook sunulur
  • PDF ayrıştırıcının özellikleri şunlardır
    • Bölümleri, alt bölümleri ve her bir seviyeyi belirleme
    • Birden çok satırı birleştirerek paragraf oluşturma
    • Bölümler ile paragraflar arasında bağlantı oluşturma
    • Tabloları ve tablonun bulunduğu bölümü belirleme
    • Listeleri ve iç içe listeleri işleme
    • Sayfalar arasında devam eden içeriği birleştirme
    • Tekrarlanan üstbilgi ve altbilgileri kaldırma
    • Filigran kaldırma
    • OCR sonuçları için sınırlayıcı kutular sağlama

HTML, Text ve Office belgelerinin işlenmesi

  • HTML ayrıştırıcı, RAG performansını artırmak için daha kaliteli parçalar oluşturacak yerleşim duyarlı bloklar üretir
  • Text ayrıştırıcı, görsel bilgi, font bilgisi ve sınırlayıcı kutu olmadan yalnızca metne bakarak listeleri, tabloları, başlıkları vb. tahmin eder
  • DOCX, PPTX ve Apache Tika'nın desteklediği diğer biçimler, Tika'nın HTML çıktısı kullanıldıktan sonra HTML ayrıştırıcıyla işlenir

Çalıştırma ve API kullanımı

  • Doğrudan çalıştırma adımları Java kurulumu, Tika sunucusunu çalıştırma, nlm-ingestor kurulumu ve ingestor'ı çalıştırmadan oluşur
    • Tika sunucusunu çalıştırma: java -jar <path_to_nlm_ingestor>/jars/tika-server-standard-nlm-modified-2.9.2_v2.jar
    • Kurulum: pip install nlm-ingestor
    • Çalıştırma: python -m nlm_ingestor.ingestion_daemon
  • Herkese açık GitHub Container Registry'de Docker imajı sunulur
    • İmajı alma: docker pull ghcr.io/nlmatics/nlm-ingestor:latest
    • Çalıştırma örneği: docker run -p 5010:5001 ghcr.io/nlmatics/nlm-ingestor:latest-<version>
  • Sunucu çalıştıktan sonra llmsherpa API kütüphanesiyle parçalar alınarak LLM projelerinde kullanılabilir
  • llmsherpa_url örneği http://localhost:5010/api/parseDocument?renderFormat=all şeklindedir
    • OCR uygulama: &applyOcr=yes
    • Başlık seviyesi ataması için farklı bir algoritma kullanan yeni indent ayrıştırıcıyı kullanma: &useNewIndentParser=yes
  • Geliştirme sunucusu olarak kullanılabilir, ancak üretim ortamında nginx ya da bulut ağ geçidi gibi bir güvenli ağ geçidinin arkasında çalıştırılması önerilir
  • Sunucuyu llmsherpa ayrıştırıcısıyla test etmeye yönelik örnek kod test_llmsherpa_api notebook'unda yer alır

Kural tabanlı ayrıştırıcının seçilme nedeni

  • nlmatics ekibi, Tom Liu ve Yi Zhang tarafından geliştirilen YOLO tabanlı görsel ayrıştırıcı da dahil olmak üzere 4 yıl boyunca çeşitli seçenekleri değerlendirdikten sonra kural tabanlı ayrıştırıcıyı seçti
  • Kural tabanlı ayrıştırıcı, herhangi bir görsel ayrıştırıcıdan kayda değer ölçüde daha hızlıdır; depo açıklaması bunu 100 kat hızlı olarak ifade eder
    • Görsel ayrıştırıcılar, metin katmanı olan PDF'lerde bile tüm sayfaların görüntülerini oluşturmak zorundadır
    • Görsel ayrıştırıcılar, metin katmanı olmayan OCR PDF'ler veya form verilerinden oluşan küçük PDF'ler için daha iyi bir seçenek olabilir
    • Yüzlerce sayfalık büyük metin katmanlı PDF'lerde kural tabanlı ayrıştırıcının daha pratik olduğu düşünülür
  • PDF OCR özelliği kullanılmıyorsa özel donanım gerekmez
    • Depo açıklaması, 2000'lerin başındaki donanımlarda bile çalışabileceğini belirtir
  • Görsel ayrıştırıcılar dahil tüm ayrıştırıcılarda hata oluşabilir; model tabanlı ayrıştırıcıların hatalarını düzeltme biçiminin tatmin edici olmadığı açıklanıyor
    • Eğitim setine daha fazla örnek eklendiğinde önceki eğitimin doğruluğu düşebilir ve önceden çalışan kod belirsiz hale gelebilir
    • Model tabanlı ayrıştırıcı sorunları kural tabanlı fikirlerle giderildiğinde yeniden çok sayıda kural yazmak gerekir

nlmatics'in değiştirilmiş Tika sürümü

  • nlmatics'in değiştirilmiş Tika sürümü 2.4.1-nlm dalında bulunur
  • Kolaylık için derlenmiş jar dosyası deponun jars/ klasörüne dahil edilmiştir
  • Bazı PDF'lerde Java sunucusunda hata oluşabilir; bu durumda ilgili kodun düzeltilmesi ve jar dosyasının yeniden derlenmesi gerekir
  • Değiştirilen dosyalar, her PDF metin öğesi için font ve koordinatlar ekler ve filigranları kaldırır
    • PDF2XHTML.java
    • AbstractPDF2XHTML.java
  • GraphicsStreamProcessor.java değişikliği, tablo tespitine yardımcı olabilecek çizgiler ve dikdörtgenler eklemek içindir
  • Değişikliklerin etkisi pdf_visual_ingestor_step_by_step notebook'unun baş kısmında görülebilir
  • Gelecekteki çalışma fikirleri şunlardır
    • Tika değişikliklerine bağımlılığı kaldırmak için pdfbox üzerinde kendi wrapper'ını yazmak
    • En yeni Tika sürümüne yükseltmek
    • Döndürülen HTML biçimini CSS ile daha uyumlu olacak şekilde düzenlemek

1 yorum

 
GN⁺ 2024-01-26
Hacker News yorumları
  • Bilimsel makalelerle çalışıyorsanız GROBID de eklemeye değer: https://github.com/kermitt2/grobid
    paperetl(https://github.com/neuml/paperetl) ile birlikte kullanıyorum

  • Güzel proje. Belge ayrıştırmada olgunluğu ve desteklediği formatların genişliği nedeniyle uzun süredir Tika kullanıyorum; XHTML çıktısı da RAG için belge parçalamada yardımcı oluyor
    Örnekler: https://neuml.hashnode.dev/build-rag-pipelines-with-txtai ve https://neuml.hashnode.dev/extract-text-from-documents
    Bu arada txtai(https://github.com/neuml/txtai) projesinin ana yazarlarından biriyim

    • Konudan biraz sapacak ama Tika'nın diğer PDF ayrıştırma kütüphaneleriyle karşılaştırıldığında nasıl olduğunu merak ediyorum
      pdfminer.six (unstructured'ın kullandığı) düzen algılamada oldukça temel kaldığı için çok sütunlu metinleri ayrıştıramaması hayal kırıklığı yaratmıştı; MuPDF ise kusursuz halletmişti
      Şu anda MuPDF + AWS Textract'i (çoğunlukla tablolar için) birlikte kullanıyorum; başkalarının ne kullandığını bilmek isterim
  • Oldukça faydalı olabilir. Çalıştığım şirkette PDF'leri okuyup anlamsal farkları karşılaştıran “PDFC” adlı bir PDF karşılaştırma aracımız var: https://www.inetsoftware.de/products/pdf-content-comparer
    PDF formatı çok karmaşık olduğu için ayrıştırma epey baş ağrıtıcı olabiliyor. Biz bu özelliklerin çoğunu zaten destekliyoruz, ama her zaman çok sayıda uç durum olduğundan ek yaklaşımlar işe yarayabilir

  • Tesseract OCR fallback iyi görünüyor
    Artık RAG için langchain, LLMindex, unstructured vb. birçok dosya yükleyici var; bunu tercih etmek için bir neden olup olmadığını merak ediyorum. Örneğin benchmark skorlarında önde olduğuna dair bir kanıt var mı

    • Bu araç Apple Silicon üzerinde derlenmiyor ve ARM Docker imajı da yok; bu yüzden kendim deneyemedim
      Ancak PDF ayrıştırma amacıyla bu RAG araçlarını denedim ve çıktı kalitesi oldukça düşüktü. LLM sorunu bir ölçüde etrafından dolaştığı için RAG'de idare eder çalışıyor, ama düzgün referansları olan daha kaliteli yanıtlar istiyorsanız bence en iyisi doğrudan kural tabanlı bir ayrıştırıcı kullanmak. Sonunda ben de öyle yaptım; sadece Tika değil MuPDF tabanlıydı
      Bu aracın yazarları da benzer düşünmüş olabilir
    • Langchain'i en son kullandığımda, kabul ediyorum yaklaşık 6 ay önceydi, PDF ve HTML dosyalarından içerik çıkarma uygulaması çok temeldi
      Bir RAG prototipi çalıştırmak için yeterliydi ama güvenilir bir şey inşa etmek için yetersizdi. Bu proje çok daha sahada sınanmış bir uygulama gibi görünüyor
  • Harika iş, çok ilginç. Ancak GitHub'a gidince “This organization has no public members” yazıyor; kim olduğunuzu hiç bilmiyorum ve kamuya açık olmayan şekilde bunun içinde başka neler olabileceğini de bilemiyorum
    Genel olarak, “isimsiz gizli bir grubun $CORP güvenlik sitesine koyduğu şey” ile geleneksel tanıtım ve güven inşa etme yöntemleri arasında, zamanla kimlik ve güven oluşturabilecek bir orta noktaya ihtiyaç olduğunu düşünüyorum

  • LLM/RAG projelerinde en uygun parçaları elde etmek için bu sunucuyu llmsherpa LayoutPDFReader ile birlikte kullanabilirsiniz: https://github.com/nlmatics/llmsherpa
    Depodaki örneklere ve notebook'lara bakın

  • Örnek girdi/çıktı çiftlerinin bir yerde olup olmadığını merak ediyorum

  • Bununla birkaç yüz PDF ayrıştırdım; sonuçlar epey iyiydi. Julia ile geliştirilmiş olsaydı en az 10 kat daha hızlı olurdu diye düşünüyorum

  • Bunun Azure Document Intelligence'tan nasıl farklı olduğunu, yoksa fiilen aynı şey mi olduğunu merak ediyorum

    • Aynı işi yapmıyorlar. Çoğu bulut ayrıştırıcı görsel model kullandığı için çok daha yavaş ve pahalı; iyi parçalar çıkarmak için bunun üzerine ayrıca kod yazmanız gerekiyor
      Bu sunucuyu llmsherpa kütüphanesiyle (https://github.com/nlmatics/llmsherpa) birlikte kullanırsanız LLM/RAG projelerine uygun, düzen dostu parçalar elde edebilirsiniz
    • Burada OCR ya da AI yok; standart fallback'ler hariç demek istiyorum
      Bu kütüphane ve fitz/pymupdf gibi araçlar PDF'den metni doğrudan çıkarır, ardından ayrıştırma ve yapılandırma kuralları uygulamanıza imkân verir. Modern PDF'lerin çoğunda OCR olmadan metin çıkarılabilir
      Elbette çok daha ucuzdur, ancak dinamik düzenlerin geneline iyi ölçeklenmez; bu yüzden genellikle standart bir yapıya göre yapılandırabildiğinizde kullanılır. Yine de bilimsel makaleler gibi şeylerde kural tabanlı metin çıkarmanın oldukça dinamik şekilde iyi çalıştığını gördüm
    • En son kullandığımda Azure Document Intelligence, bölme noktalarını seçmekte pek akıllı değildi. Bu taraf daha iyi sezgisel yöntemler uygulamış gibi görünüyor
    • Ben de merak ediyorum. ADI güvenilir, ancak kötü oluşturulmuş PDF'lerde uç durum sorunları var
      Yine de Tesseract OCR'ın potansiyel bir sınırlama olmasından endişeliyim. Çok fazla hata yaptığını gördüm
  • Örnek var mı merak ediyorum. Depoda hiç PDF dosyası yok gibi görünüyor

    • Örnekler llmsherpa projesinde görülebilir: https://github.com/nlmatics/llmsherpa
      Bu nlm-ingestor projesi, llmsherpa ile birlikte çalışan backend'i sağlıyor. llmsherpa kütüphanesi, LLM/RAG projeleri için iyi parçalar çıkarmada çok kullanışlı