Zephyrnet Logosu

Özel adlandırılmış varlık tanıma için Amazon Bedrock'ta sıfır atışlı büyük dil modellerini kullanın | Amazon Web Hizmetleri

Tarih:

Ad varlığı tanıma (NER), ilgi çekici bilgilerin çıkarılması işlemidir. kişiler, yapılandırılmış veya yapılandırılmamış metinden. Belgelerdeki belirli bilgi türlerine ilişkin tüm ifadelerin manuel olarak belirlenmesi son derece zaman alıcı ve emek yoğun bir işlemdir. Bazı örnekler arasında bir NFL oyun özetindeki oyuncuların ve pozisyonların çıkarılması, bir AWS açılış konuşmasında bahsi geçen ürünler veya favori bir teknoloji şirketiyle ilgili bir makaleden önemli adların çıkarılması yer alır. Bu işlemin her yeni belge ve varlık türü için tekrarlanması gerekir; bu da büyük hacimli belgelerin uygun ölçekte işlenmesini kullanışsız hale getirir. Çok sayıda rapora, kitaba, makaleye, dergiye ve araştırma makalesine her zamankinden daha fazla erişim sayesinde, büyük metin kütlelerinde istenen bilgilerin hızla tanımlanması paha biçilmez hale geliyor.

RNN'ler ve LSTM'ler gibi geleneksel sinir ağı modelleri ve NER için BERT gibi daha modern transformatör tabanlı modeller, her özel varlık türü için etiketli veriler üzerinde maliyetli ince ayarlar yapılmasını gerektirir. Bu durum, bu yaklaşımların benimsenmesini ve ölçeklendirilmesini birçok uygulama için külfetli hale getirmektedir. Bununla birlikte, büyük dil modellerinin (LLM'ler) yeni yetenekleri, varlığa özgü ince ayar gerektirmeden, çeşitli varlık türleri arasında yüksek doğruluklu NER'e olanak tanır. Modelin geniş dilsel anlayışını kullanarak, belirtilen herhangi bir varlık türü için NER'yi anında gerçekleştirebilirsiniz. Bu yeteneğe denir sıfır atış NER ve NER'in belgeler ve diğer birçok kullanım senaryosu genelinde hızlı bir şekilde konuşlandırılmasını sağlar. Belirli varlık isimlerini maliyetli ayarlamalar olmadan çıkarma yeteneği, ölçeklenebilir varlık çıkarma ve aşağı yöndeki belge anlamanın kilidini açar.

Bu yazıda, LLM'leri uçtan uca kullanma sürecini ele alıyoruz. Amazon Ana Kayası NER kullanım durumu için. Amazon Bedrock, tek bir API aracılığıyla AI21 Labs, Anthropic, Cohere, Meta, Mistral AI, Stability AI ve Amazon gibi önde gelen yapay zeka (AI) şirketlerinin yüksek performanslı temel modelleri (FM'ler) seçeneklerini sunan, tümüyle yönetilen bir hizmettir güvenlik, gizlilik ve sorumlu yapay zeka ile üretken yapay zeka uygulamaları oluşturmaya yönelik geniş bir yetenek kümesinin yanı sıra. Özellikle, nasıl kullanılacağını gösteriyoruz Amazon Metin Yazısı PDF'ler veya görüntü dosyaları gibi belgelerden metin ayıklamak ve sıfır atışlı NER gerçekleştirmek için çıkarılan metni kullanıcı tanımlı özel varlıklarla birlikte Amazon Bedrock'a girdi olarak kullanmak için. Ayrıca, komut istemleri için metin kesmenin kullanışlılığına da değiniyoruz. Amazon Kavramak, zorluklar, fırsatlar ve LLM'ler ve NER ile gelecekteki çalışmalarla birlikte.

Çözüme genel bakış

Bu çözümde, aşağıdaki temel hizmetleri kullanarak LLM'lerle sıfır atışlı NER'i uyguluyoruz:

  • Amazon Metin Yazısı – Giriş belgesinden metinsel bilgileri çıkarır.
  • Amazon Comprehend (isteğe bağlı) – Kişi adları, tarihler ve sayısal değerler gibi önceden tanımlanmış varlıkları tanımlar. İlgilenilen varlıkların tespit edildiği bağlamı sınırlamak için bu özelliği kullanabilirsiniz.
  • Amazon Ana Kayası – Verilen bağlamdan ilgilenilen varlıkları belirlemek için bir LLM'yi çağırır.

Aşağıdaki şemada çözüm mimarisi gösterilmektedir.

Ana girdiler belge görüntüsü ve hedef varlıklardır. Amaç, belge içindeki hedef varlıkların değerlerini bulmaktır. Kesme yolu seçilirse işlem hattı bağlamı azaltmak için Amazon Comprehend'i kullanır. LLM'nin çıktısı, çıktıyı varlık-değer çiftleri olarak oluşturmak için sonradan işlenir.

Örneğin, eğer verilirse AWS Vikipedi sayfası giriş belgesi olarak ve hedef varlıkları AWS hizmet adları ve coğrafi konumlar olarak kullanırsanız istenen çıktı formatı aşağıdaki gibi olacaktır:

  • AWS hizmet adları:
  • Coğrafi konumlar:

Aşağıdaki bölümlerde bu görevi gerçekleştirmek için gereken üç ana modülü açıklayacağız. Bu yazı için şunu kullandık: Amazon Adaçayı Yapıcı dizüstü bilgisayarlar ml.t3.medium bulut sunucularının yanı sıra Amazon Textract, Amazon Comprehend ve Amazon Bedrock ile.

Bağlamı çıkar

bağlam belgeden alınan ve sorgulanan varlıkların değerlerinin bulunduğu bilgidir. Tam bir belgeyi (tam bağlam) tüketirken bağlam, LLM'ye yapılan giriş belirteci sayısını önemli ölçüde artırır. Kullanıcı tarafından tanımlandığı şekilde belgenin tamamını veya yerel bağlamı belgenin ilgili bölümleri çevresinde kullanma seçeneği sunuyoruz.

İlk olarak, Amazon Texttract'ı kullanarak belgenin tamamından bağlamı çıkarıyoruz. Aşağıdaki kod şunu kullanır: amazon-textt-arayan Kütüphaneyi Texttract API çağrıları için sarmalayıcı olarak kullanın. Önce kütüphaneyi kurmanız gerekiyor:

python -m pip install amazon-textract-caller

Ardından PNG veya JPEG dosyası gibi tek sayfalı bir belge için tüm içeriği çıkarmak üzere aşağıdaki kodu kullanın:

from textractcaller.t_call import call_textract, Textract_Features 
from textractprettyprinter.t_pretty_print import get_text_from_layout_json 

document_name = "sample_data/synthetic_sample_data.png"

# call Textract
layout_textract_json = call_textract(
input_document = document_name, 
features = [Textract_Features.LAYOUT]
) 

# extract the text from the JSON response
full_context = get_text_from_layout_json(textract_json = layout_textract_json)[1]

Kullanırken PDF giriş belgelerinin bir S3 klasöründe olması gerektiğini unutmayın. call_textract işlev. Çok sayfalı TIFF dosyaları için ayarladığınızdan emin olun. force_async_api=True.

İçeriği kısalt (isteğe bağlı)

Çıkarılacak kullanıcı tanımlı özel varlıklar tam bağlama kıyasla seyrek olduğunda, ilgili yerel bağlamı belirleme ve ardından yerel bağlam içindeki özel varlıkları arama seçeneği sunarız. Bunu yapmak için Amazon Comprehend ile genel varlık ayıklamayı kullanıyoruz. Bu, kullanıcı tanımlı özel varlığın aşağıdakilerden birinin alt öğesi olduğu varsayılmaktadır: varsayılan Amazon Comprehend varlıklarıGibi "name", "location", "date"ya da "organization". Örneğin, "city" bir çocuğu "location". Varsayılan genel varlıkları, Python için AWS SDK (Boto3) aşağıdaki gibidir:

import pandas as pd
comprehend_client = boto3.client("comprehend")
generic_entities = comprehend_client.detect_entities(Text=full_context, 
                                                     LanguageCode="en")
df_entities = pd.DataFrame.from_dict(generic_entities["Entities"])

Varlığı içeren sözlüklerin bir listesini çıktı olarak verir. “Type”, değer şu şekilde “Text”gibi diğer bilgilerle birlikte “Score”, “BeginOffset”, ve “EndOffset”. Daha fazla ayrıntı için bkz. Varlıkları Algıla. Aşağıda, çıkarılan genel varlık-değer çiftlerini ve değerin metin içindeki konumunu sağlayan Amazon Comprehend varlık ayıklama işleminin örnek çıktısı yer almaktadır.

{
“Entities”: [
	{
	“Text”: “AWS”,
	“Score”: 0.98,
	“Type”: “ORGANIZATION”,
	“BeginOffset”: 21,
	“EndOffset”: 24
	},
	{
	“Text”: “US East”,
	“Score”: 0.97,
	“Type”: “LOCATION”,
	“BeginOffset”: 1100,
	“EndOffset”: 1107
	}
],
“LanguageCode”: “en”
}

Çıkarılan genel varlıklar listesi, sorgulanan varlıklardan daha kapsamlı olabilir, bu nedenle bir filtreleme adımı gereklidir. Örneğin, sorgulanan bir varlık “AWS revenue” ve genel varlıklar şunları içerir: “quantity”, “location”, “person”, ve benzeri. Yalnızca ilgili genel varlığı korumak için eşlemeyi tanımlar ve filtreyi aşağıdaki gibi uygularız:

query_entities = ['XX']
user_defined_map = {'XX': 'QUANTITY', 'YY': 'PERSON'}
entities_to_keep = [v for k,v in user_defined_map.items() if k in query_entities]
df_filtered = df_entities.loc[df_entities['Type'].isin(entities_to_keep)]

Genel varlık-değer çiftlerinin bir alt kümesini belirledikten sonra, her bir çiftin etrafındaki yerel bağlamı korumak ve diğer her şeyi maskelemek istiyoruz. Bunu bir tampon uygulayarak yapıyoruz. “BeginOffset” ve “EndOffset” Amazon Comprehend tarafından belirlenen denkleştirmelere ekstra bağlam eklemek için:

StrBuff, EndBuff =20,10
df_offsets = df_filtered.apply(lambda row : pd.Series({'BeginOffset':max(0, row['BeginOffset']-StrBuff),'EndOffset':min(row['EndOffset']+EndBuff, len(full_context))}), axis=1).reset_index(drop=True)

Ayrıca bağlamın kopyalanmasını önlemek için çakışan uzaklıkları da birleştiriyoruz:

for index, _ in df_offsets.iterrows():
    if (index>0) and (df_offsets.iloc[index]['BeginOffset']<=df_offsets.iloc[index-1]['EndOffset']):
        df_offsets.iloc[index]['BeginOffset'] = df_offsets.iloc[index-1]['BeginOffset']
df_offsets = df_offsets.groupby(['BeginOffset']).last().reset_index()

Son olarak, ara belleğe alınmış ve birleştirilmiş uzaklıkları kullanarak tüm içeriği keseriz:

truncated_text = "/n".join([full_context[row['BeginOffset']:row['EndOffset']] for _, row in df_offsets.iterrows()])

Kesme için ek bir adım Amazon Textract'ı kullanmaktır Düzen özelliği bağlamı belge içindeki ilgili metin bloğuna daraltmak için. Düzen, belgelerden paragraflar, başlıklar, listeler, üstbilgiler, altbilgiler ve daha fazlası gibi düzen öğelerini çıkarmanıza olanak tanıyan yeni bir Amazon Textract özelliğidir. İlgili metin bloğu belirlendikten sonra bunu bahsettiğimiz buffer offset kesme işlemi takip edebilir.

Varlık-değer çiftlerini ayıklayın

Girdi olarak tam bağlam veya yerel bağlam göz önüne alındığında, bir sonraki adım LLM kullanılarak özelleştirilmiş varlık-değer çıkarımıdır. Özelleştirilmiş varlıkları Amazon Bedrock aracılığıyla çıkarmak için genel bir bilgi istemi şablonu öneriyoruz. Özelleştirilmiş varlıklara örnek olarak ürün kodları, SKU numaraları, çalışan kimlikleri, ürün kimlikleri, gelir ve operasyon yerleri verilebilir. NER görevine ve istenen çıktı formatına ilişkin genel talimatlar sağlar. LLM'ye bilgi istemi girişi dört bileşen içerir: bir başlangıç ​​talimatı, sorgu varlıkları olarak özelleştirilmiş varlıklar, bağlam ve LLM çıktısından beklenen format. Aşağıda temel istemin bir örneği verilmiştir. Özelleştirilmiş varlıklar, sorgu varlıklarına bir liste olarak dahil edilir. Bu süreç değişken sayıdaki varlıkları idare edebilecek kadar esnektir.

prompt = “””
Given the text below, identify these name entities:
	“{query_entities}”
text: “{context}”
Respond in the following format:
	“{output formay}”
“””

Önceki komut istemiyle belirli bir Amazon Bedrock modelini aşağıdaki komutu kullanarak çağırabiliriz: ÇağırmaModeli aşağıdaki gibi. Amazon Bedrock'ta bulunan modellerin tam listesi ve yönlendirme stratejileri için bkz. Amazon Bedrock temel model kimlikleri (isteğe bağlı aktarım hızı).

import json
bedrock_client = boto3.client(service_name='bedrock-runtime')
body = json.dumps({
        "prompt": f"nnHuman: {prompt}nnAssistant:",
        "max_tokens_to_sample": 300,
        "temperature": 0.1,
        "top_p": 0.9,
    })
modelId = 'anthropic.claude-v2'
accept = 'application/json'
contentType = 'application/json'

response = bedrock_client.invoke_model(body=body, modelId=modelId, accept=accept, contentType=contentType)
response_body = json.loads(response.get('body').read())
print(response_body.get('completion'))

Burada açıklanan genel çözüm hem yapısal olmayan verilere (belgeler ve e-postalar gibi) hem de yapılandırılmış verilere (tablolar gibi) yönelik olsa da, yapılandırılmış veriler üzerinde varlık ayıklamayı gerçekleştirmenin başka bir yöntemi de Amazon Textract Sorguları özelliğinin kullanılmasıdır. Bir sorgu sağlandığında Amazon Textract, doğal dil soruları belirterek sorguları veya özel sorguları kullanarak varlıkları çıkarabilir. Daha fazla bilgi için bakınız Amazon Textract'taki yeni Sorgular özelliğini kullanarak belgelerdeki bilgileri belirtin ve çıkarın.

Kullanım örneği

Örnek bir kullanım senaryosu göstermek amacıyla, AWS hakkında bazı metinler oluşturmak için (aşağıdaki şekilde gösterildiği gibi) Amazon Bedrock'ta Anthropic Claude-V2'yi kullanıyoruz, taranmış bir belgeyi simüle etmek için bunu bir görüntü olarak kaydettik ve ardından önerilen çözümü tanımlamak için kullandık. metin içindeki bazı varlıklar. Bu örnek bir Yüksek Lisans tarafından oluşturulduğundan içerik tamamen doğru olmayabilir. Metni oluşturmak için şu istemi kullandık: "Amazon AWS hakkında, AWS hizmet adlarının, bazı sayısal değerlerin yanı sıra dolar tutarı değerlerinin, benzer öğelerin listesinin ve varlık-değer çiftlerinin örneklerini içeren 10 paragraf oluşturun."

Aşağıdaki hedef varlıklar için değerleri çıkaralım:

  • AWS'nin faaliyet gösterdiği ülkeler
  • AWS'nin yıllık geliri

Çözüm mimarisinde gösterildiği gibi içeriklerin metin olarak çıkarılması için öncelikle görüntü Amazon Textract'a gönderilir. O zaman iki seçenek var:

  • Kesme yok – Yüksek Lisans için bir bilgi istemi oluşturmak amacıyla metnin tamamını hedef varlıklarla birlikte kullanabilirsiniz.
  • Kesme ile – Genel varlıkları tespit etmek, hedef varlıkların aday konumlarını belirlemek ve metni varlıkların yakınlıklarına göre kısaltmak için Amazon Comprehend'i kullanabilirsiniz.

Bu örnekte Amazon Comprehen'den şunları tanımlamasını istiyoruz: "location" ve "quantity" metni tanımlanan varlıkların komşuluğuyla sınırlamak için çıktıyı son işleme tabi tutarız. Aşağıdaki şekilde, "location" Çevrelerindeki varlıklar ve bağlam mor renkle vurgulanır ve "quantity" etraflarındaki varlıklar ve bağlam sarı renkle vurgulanır. Vurgulanan metin, kesme sonrasında kalan tek metin olduğundan, bu yaklaşım, LLM'ye yapılan giriş belirteçlerinin sayısını azaltabilir ve sonuçta maliyetten tasarruf sağlayabilir. Bu örnekte, kesme ve toplam arabellek boyutu 30 olduğunda, giriş jetonu sayısı neredeyse %50 azalır. LLM maliyeti, girdi tokenları ve çıktı tokenları sayısının bir fonksiyonu olduğundan, girdi tokenlarından kaynaklanan maliyet neredeyse %50 oranında azalır. Görmek Amazon Bedrock Fiyatlandırması daha fazla ayrıntı için.

Varlıklar ve (isteğe bağlı olarak kısaltılmış) bağlam göz önüne alındığında, LLM'ye aşağıdaki bilgi istemi gönderilir:

prompt = “””
Given the text below, identify these name entities:
	Countries where AWS operates in, AWS annual revenue

text: “{(optionally truncated) context}”

Respond in the following format:

Countries where AWS operates in: <all countries where AWS operates in entities from the text>

AWS annual revenue: <all AWS annual revenue entities from the text>
“”"

Aşağıdaki tabloda Anthropic Claude-V2'nin Amazon Bedrock'ta farklı metin girişlerine verdiği yanıt gösterilmektedir (yine girdi olarak kullanılan belge bir Yüksek Lisans tarafından oluşturulmuştur ve tamamen doğru olmayabilir). LLM, içeriğin neredeyse %50'sini kaldırdıktan sonra bile hala doğru yanıtı üretebilir.

Giriş metni Yüksek Lisans yanıtı
Tam bağlam

AWS'nin faaliyet gösterdiği ülkeler: Kuzey Virginia'da us-east-1, İrlanda'da eu-west-1, Singapur'da ap-southeast-1

AWS'nin yıllık geliri: 62 milyar dolar

Kesilmiş bağlam

AWS'nin faaliyet gösterdiği ülkeler: Kuzey Virginia'da us-east-1, İrlanda'da eu-west-1, Singapur'da ap-southeast-1

AWS'nin yıllık geliri: Yıllık 62 milyar dolar gelir

Sonuç

Bu yazıda, LLM'lerin özel olarak ince ayar yapılmadan NER yürütme potansiyelini tartıştık. Bu işlem hattını, yapılandırılmış ve yapılandırılmamış metin belgelerinden uygun ölçekte bilgi çıkarmak için kullanabilirsiniz. Buna ek olarak, isteğe bağlı kesme yöntemi belgelerinizin boyutunu küçültme potansiyeline sahiptir, bir LLM'nin belirteç girişini azaltırken, tam belgenin kullanılmasıyla karşılaştırılabilir performansı korur. Her ne kadar sıfır atışlı LLM'lerin NER yürütme kapasitesine sahip olduğu kanıtlanmış olsa da, birkaç atışlı LLM'lerle denemeler yapmanın da keşfedilmeye değer olduğuna inanıyoruz. AWS'de Yüksek Lisans yolculuğunuza nasıl başlayabileceğiniz hakkında daha fazla bilgi için bkz. Amazon Bedrock Kullanıcı Kılavuzu.


Yazarlar Hakkında

Sujitha Martin Üretken Yapay Zeka İnovasyon Merkezi'nde (GAIIC) Uygulamalı Bilim Adamıdır. Uzmanlığı, çeşitli sektörler için bilgisayarlı görüntü ve doğal dil işlemeyi içeren makine öğrenimi çözümleri oluşturmaktır. Özellikle, yüksek düzeyde özerk sistemler için insan merkezli durumsal farkındalık ve bilgi katkılı öğrenme üzerinde çalışma konusunda geniş deneyime sahiptir.

 Matthew Rodos Üretken Yapay Zeka İnovasyon Merkezi'nde (GAIIC) çalışan bir Veri Bilimcisidir. Doğal dil işleme ve bilgisayarlı görme gibi kavramları içeren makine öğrenimi hatları oluşturma konusunda uzmanlaşmıştır.

Emin Tajgardoon Üretken Yapay Zeka İnovasyon Merkezi'nde (GAIIC) Uygulamalı Bilim Adamıdır. Bilgisayar bilimi ve makine öğrenimi konusunda geniş bir geçmişe sahiptir. Amin'in odak noktası özellikle derin öğrenme ve tahmin, tahmin açıklama yöntemleri, model sapması tespiti, olasılığa dayalı üretken modeller ve yapay zekanın sağlık hizmetleri alanındaki uygulamaları olmuştur.

spot_img

En Son İstihbarat

spot_img