paint-brush
Otomatik Metin Çıkarma ve Analizi için MinIO ve Apache Tika'dan Yararlanmaile@minio
8,089 okumalar
8,089 okumalar

Otomatik Metin Çıkarma ve Analizi için MinIO ve Apache Tika'dan Yararlanma

ile MinIO7m2024/04/11
Read on Terminal Reader

Çok uzun; Okumak

Bu yazıda, Büyük Dil Modeli (LLM) eğitimi ve Alma Artırılmış Üretim (RAG) gibi kritik aşağı yönlü görevlerin merkezinde yer alan belge metni ayıklamak için MinIO Bucket Notifications ve Apache Tika'yı kullanacağız.
featured image - Otomatik Metin Çıkarma ve Analizi için MinIO ve Apache Tika'dan Yararlanma
MinIO HackerNoon profile picture
0-item
1-item


Bu yazıda, Büyük Dil Modeli ( LLM ) eğitimi ve Alma Artırılmış Üretim ( RAG ) gibi kritik aşağı yönlü görevlerin merkezinde yer alan belge metni ayıklamak için MinIO Bucket Notifications ve Apache Tika'yı kullanacağız.


Öncül

Daha sonra kullanabileceğim bir metin veri kümesi oluşturmak istediğimi varsayalım. ince ayar bir Yüksek Lisans. Bunu yapmak için öncelikle çeşitli belgeleri (kaynağı nedeniyle farklı form faktörlerinde olabilecek) bir araya getirip metni bunlardan çıkarmamız gerekiyor. Veri kümesi güvenliği ve denetlenebilirliği son derece önemlidir, dolayısıyla bu yapılandırılmamış belgelerin eşleşmesi için bir nesne deposunda saklanması gerekir. MinIO, bunun için oluşturulmuş nesne deposudur bu durumlar ve daha fazlası . Öte yandan Apache Tika, "binden fazla farklı dosya türünden (PPT, XLS ve PDF gibi) meta verileri ve metni algılayan ve çıkaran" bir araç setidir. Birlikte hedefimize ulaşabilecek bir sistem oluşturmak için bir araya gelirler.


Daha önceki bir yazıda , kutudan çıktığı haliyle MinIO'lu ve yaklaşık 30 satır kodlu bir nesne algılama çıkarım sunucusunu bir araya getirdik. Bu son derece taşınabilir ve tekrarlanabilir mimariden bu sefer metin çıkarma görevi için bir kez daha yararlanacağız. Aşağıda kuracağımız sistemin kaba bir tasviri bulunmaktadır.




Apache Tika'yı kurma

Apache Tika'yı çalışır hale getirmenin en basit yolu, resmi Docker görüntüsü . İstediğiniz Tika görüntü sürümü/etiketi için Docker Hub'ı kontrol edin.



Bu örnekte, varsayılan bağlantı noktası olan 9998'i kullanmasına ve göstermesine izin veriyorum.


 docker pull apache/tika:<version> docker run -d -p 127.0.0.1:9998:9998 apache/tika:<version>


Tika konteynerinin çalıştığını ve 9998 numaralı bağlantı noktasına sahip olduğunu doğrulamak için docker ps veya Docker Desktop'ı kullanın.


Metin Çıkarma Sunucusunu Oluşturma

Artık Tika çalıştığına göre, yeni nesneler için Tika çıkarma isteklerini programlı olarak yapabilecek bir sunucu oluşturmamız gerekiyor. Bunu takiben, bu sunucuyu yeni nesnelerin (başka bir deyişle bir grup için PUT olayları) gelişi konusunda uyarmak için bir MinIO kümesinde web kancaları yapılandırmamız gerekir. Adım adım üzerinden geçelim.


İşleri nispeten basit tutmak ve bu yaklaşımın taşınabilirliğini vurgulamak için metin çıkarma sunucusu popüler Flask çerçevesi kullanılarak Python'da oluşturulacak. İşte sunucunun kodu (aşağıdaki MinIO Blog Kaynakları deposunda da mevcuttur) extract_server.py ) Tika kullanımıyla bir kovaya eklenen yeni belgeler üzerinde metin çıkarma işlemi gerçekleştiren (üzerinden Tika-Python ).


 """ This is a simple Flask text extraction server that functions as a webhook service endpoint for PUT events in a MinIO bucket. Apache Tika is used to extract the text from the new objects. """ from flask import Flask, request, abort, make_response import io import logging from tika import parser from minio import Minio # Make sure the following are populated with your MinIO details # (Best practice is to use environment variables!) MINIO_ENDPOINT = '' MINIO_ACCESS_KEY = '' MINIO_SECRET_KEY = '' # This depends on how you are deploying Tika (and this server): TIKA_SERVER_URL = 'http://localhost:9998/tika' client = Minio( MINIO_ENDPOINT, access_key=MINIO_ACCESS_KEY, secret_key=MINIO_SECRET_KEY, ) logger = logging.getLogger(__name__) app = Flask(__name__) @app.route('/', methods=['POST']) async def text_extraction_webhook(): """ This endpoint will be called when a new object is placed in the bucket """ if request.method == 'POST': # Get the request event from the 'POST' call event = request.json bucket = event['Records'][0]['s3']['bucket']['name'] obj_name = event['Records'][0]['s3']['object']['key'] obj_response = client.get_object(bucket, obj_name) obj_bytes = obj_response.read() file_like = io.BytesIO(obj_bytes) parsed_file = parser.from_buffer(file_like.read(), serverEndpoint=TIKA_SERVER_URL) text = parsed_file["content"] metadata = parsed_file["metadata"] logger.info(text) result = { "text": text, "metadata": metadata } resp = make_response(result, 200) return resp else: abort(400) if __name__ == '__main__': app.run()


Çıkarma sunucusunu başlatalım:



Flask uygulamasının çalıştığı ana bilgisayar adını ve bağlantı noktasını not edin.


Paket Bildirimlerini Ayarlama

Artık geriye kalan tek şey, MinIO sunucusundaki paket için web kancasını yapılandırmaktır; böylece paketteki herhangi bir PUT olayı (başka bir deyişle, eklenen yeni nesneler), çıkarma uç noktasına bir çağrıyı tetikleyecektir. mc aracıyla bunu sadece birkaç komutla yapabiliriz.


Öncelikle MinIO sunucunuza bir web kancasını etkinleştirdiğinizi ve çağrılacak ilgili uç noktayı işaret etmek için birkaç ortam değişkeni ayarlamamız gerekiyor. <FONKSİYON ADI> kısmını seçtiğiniz bir fonksiyon adıyla değiştirin. Basit olması açısından 'çıkarma' yöntemini tercih ettim. Ayrıca uç nokta ortam değişkeninin çıkarım sunucunuz için doğru ana makineye ve bağlantı noktasına ayarlandığından emin olun. Bu durumda http://localhost:5000 Flask uygulamamızın çalıştığı yerdir.


 export MINIO_NOTIFY_WEBHOOK_ENABLE_<YOURFUNCTIONNAME>=on export MINIO_NOTIFY_WEBHOOK_ENDPOINT_<YOURFUNCTIONNAME>=http://localhost:5000


Bu ortam değişkenlerini ayarladıktan sonra, MinIO sunucusu (veya zaten çalışıyorsa, yeniden başlat ). Aşağıdaki adımlarda MinIO sunucu dağıtımınız için bir 'takma ada' ihtiyacımız olacak. Takma adlar ve takma adların nasıl ayarlanacağı hakkında daha fazla bilgi edinmek için bkz. dokümantasyon . Ayrıca MinIO Client komut satırı aracı olan mc de kullanacağız, bu yüzden ona sahip olduğunuzdan emin olun. Kurulmuş .


Daha sonra paketimiz için etkinlik bildirimini ve hakkında bilgilendirilmek istediğimiz etkinlik türünü yapılandıralım. Bu projenin amaçları doğrultusunda ' çıkarma ' olarak da adlandırılan yepyeni bir kova oluşturdum. Bunu da yapabilirsin MinIO Konsolu aracılığıyla veya mc komutlar ' Çıkartma' kümesine yeni nesnelerin eklenmesiyle web kancasını tetiklemek istediğimizden, PUT olayları odak noktamızdır. ALIAS'ı MinIO sunucu dağıtımınızın takma adıyla ve BUCKET'i o sunucudaki istediğiniz klasörle değiştirin. Daha önce olduğu gibi, <FONKSİYONADI> kısmını önceki adımda kullandığınız değerle değiştirdiğinizden emin olun.


 mc event add ALIAS/BUCKET arn:minio:sqs::<YOURFUNCTIONNAME>:webhook --event put


Son olarak, bu komutu çalıştırdığınızda s3:ObjectCreated:* çıktısının alınıp alınmadığını doğrulayarak paket bildirimleri için doğru olay türünü yapılandırıp yapılandırmadığınızı kontrol edebilirsiniz:


 mc event ls ALIAS/BUCKET arn:minio:sqs::<YOURFUNCTIONNAME>:webhook


Paket etkinliklerini bir web kancasında yayınlama hakkında daha fazla bilgi edinmek istiyorsanız şuraya göz atın: doktor bunun yanı sıra açıklama etkinlik bildirimlerine derinlemesine bakın . Artık metin çıkarma sunucumuzu denemeye hazırız.


Denemek

İşte metni çıkarmak istediğim bir belge. Bu bir 2000 Emtia Gelecekteki Modernizasyon Yasası PDF'si Amerika Birleşik Devletleri'nde etkili bir mali mevzuat parçası.



Bu PDF'yi MinIO Konsolunu kullanarak ' çıkarma ' kovama koydum.



Bu PUT olayı, daha sonra çıkarma sunucusu uç noktasına yayınlanacak bir paket bildirimini tetikler. Buna göre metin Tika tarafından çıkartılarak konsola yazdırılır.



Sonraki adımlar


Şimdilik yalnızca çıkarılan metnin çıktısını alıyor olsak da, bu metin, The Premise'da ima edildiği gibi, birçok alt görev için kullanılmış olabilir. Örneğin:


  1. LLM ince ayarı için veri kümesi oluşturma : Çeşitli dosya formatlarında (örn. PDF, DOCX, PPTX, Markdown, vb.) bulunan kurumsal belgeler koleksiyonu üzerinde büyük bir dil modeline ince ayar yapmak istediğinizi düşünün. Bu göreve yönelik LLM dostu metin veri kümesini oluşturmak için tüm bu belgeleri benzer bir web kancasıyla yapılandırılmış bir MinIO kümesinde toplayabilir ve her belge için çıkarılan metni ince ayar/eğitim kümesinin bir veri çerçevesine aktarabilirsiniz. Ayrıca veri kümenizin kaynak dosyalarının MinIO'da bulunmasıyla veri kümelerinizin kompozisyonunu yönetmek, denetlemek ve takip etmek çok daha kolay hale gelir.


  2. Alma Artırılmış Üretim : RAG, LLM uygulamalarının hassas bağlamdan yararlanabilmesinin ve halüsinasyonu önleyebilmesinin bir yoludur. Bu yaklaşımın merkezi bir yönü, belgelerinizin metninin çıkartılıp vektörlere gömülebilmesini ve böylece anlamsal aramanın mümkün kılınmasını sağlamaktır. Ayrıca, bu vektörlerin gerçek kaynak belgelerini bir nesne deposunda (MinIO gibi!) saklamak genellikle en iyi uygulamadır. Bu yazıda özetlenen yaklaşımla her ikisine de kolayca ulaşabilirsiniz. RAG ve faydaları hakkında daha fazla bilgi edinmek istiyorsanız buna göz atın önceki gönderi .


  3. Yüksek Lisans Başvurusu : Yeni saklanan bir belgeden metni anında çıkarmanın programlı bir yolu ile, özellikle bir Yüksek Lisans'tan faydalanabiliyorsanız, olanaklar sonsuzdur. Anahtar kelime tespitini (örneğin, İstem: "Hangi hisse senedi göstergelerinden bahsediliyor?"), içerik değerlendirmesini (örneğin, İstem: "Değerlendirme anahtarına göre, bu makale gönderimi hangi puanı almalı?") veya hemen hemen her türlü metin tabanlı analizi düşünün. (örn. İstem: "Bu günlük çıktısına göre ilk hata ne zaman oluştu?").


Bu görevler için Bucket Notifications'ın kullanımının ötesinde MinIO, Powerpoint'ler, görüntüler veya kod parçacıkları olsun, her tür ve sayıda nesneye birinci sınıf hata toleransı ve performans sağlayacak şekilde tasarlanmıştır.


Herhangi bir sorunuz varsa bize katılın Gevşek Kanal veya bize bir not bırakın [email protected] . Sana yardım etmek için burdayız.