Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart

Organizacije v panogah, kot so trgovina na drobno, bančništvo, finance, zdravstvo, proizvodnja in posojanje, se morajo pogosto soočiti z ogromnimi količinami nestrukturiranih besedilnih dokumentov, ki prihajajo iz različnih virov, kot so novice, spletni dnevniki, ocene izdelkov, kanali za podporo strankam in družbeni mediji. Ti dokumenti vsebujejo ključne informacije, ki so ključne za sprejemanje pomembnih poslovnih odločitev. Ko organizacija raste, postane izziv pridobiti ključne informacije iz teh dokumentov. Z napredkom tehnik obdelave naravnega jezika (NLP) in strojnega učenja (ML) lahko hitro in z visoko natančnostjo odkrijemo dragocene vpoglede in povezave iz teh besedilnih dokumentov, s čimer podjetjem pomagamo pravočasno sprejemati kakovostne poslovne odločitve. Popolnoma upravljane storitve NLP so prav tako pospešile sprejemanje NLP. Amazonsko razumevanje je v celoti upravljana storitev, ki vam omogoča izdelavo modelov NLP po meri, ki ustrezajo vašim zahtevam, ne da bi potrebovali kakršno koli strokovno znanje o ML.

V tem prispevku prikazujemo, kako uporabiti najsodobnejše tehnike ML za reševanje petih različnih nalog NLP: povzemanje dokumenta, klasifikacija besedila, odgovarjanje na vprašanja, prepoznavanje imenovanih entitet in ekstrakcija razmerja. Za vsako od teh NLP nalog pokažemo, kako uporabljati Amazon SageMaker za izvedbo naslednjih dejanj:

  • Razmestite in zaženite sklepanje na predhodno usposobljenem modelu
  • Natančno prilagodite vnaprej usposobljeni model na novem naboru podatkov po meri
  • Nadalje izboljšajte zmogljivost natančne nastavitve z Samodejno prilagajanje modela SageMaker
  • Ocenite zmogljivost modela na podatkih o vzdržljivem testu z različnimi metrikami vrednotenja

Čeprav v tem prispevku pokrivamo pet specifičnih nalog NLP, lahko to rešitev uporabite kot predlogo za posploševanje natančnega prilagajanja predhodno usposobljenih modelov z lastnim naborom podatkov in nato zaženete optimizacijo hiperparametrov za izboljšanje natančnosti.

Predloge rešitev JumpStart

Amazon SageMaker JumpStart ponuja rešitve od konca do konca z enim klikom za številne pogoste primere uporabe ML. Za več informacij o razpoložljivih predlogah rešitev raziščite naslednje primere uporabe:

Predloge rešitev JumpStart pokrivajo različne primere uporabe, v okviru katerih je na voljo več različnih predlog rešitev (ta rešitev za razumevanje dokumenta je v primeru uporabe »Izvleček in analiza podatkov iz dokumentov«).

Na ciljni strani JumpStart izberite predlogo rešitve, ki najbolj ustreza vašemu primeru uporabe. Za več informacij o posebnih rešitvah za vsak primer uporabe in o tem, kako zagnati rešitev JumpStart, glejte Predloge rešitev.

Pregled rešitev

Naslednja slika prikazuje, kako lahko uporabite to rešitev s komponentami SageMaker. Učna opravila SageMaker se uporabljajo za usposabljanje različnih modelov NLP, končne točke SageMaker pa se uporabljajo za uvajanje modelov v vsaki fazi. Uporabljamo Preprosta storitev shranjevanja Amazon (Amazon S3) skupaj s SageMakerjem za shranjevanje podatkov o usposabljanju in artefaktov modela ter amazoncloudwatch za beleženje izhodov usposabljanja in končne točke.

Odprite rešitev Razumevanje dokumenta

Pomaknite se do rešitve Razumevanje dokumenta v JumpStartu.

Zdaj si lahko podrobneje ogledamo nekatera sredstva, ki so vključena v to rešitev, začenši s predstavitvenim prenosnikom.

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Demo zvezek

Predstavitveni zvezek lahko uporabite za pošiljanje primerov podatkov na že razporejene končne točke modela za naloge povzemanja dokumenta in odgovarjanja na vprašanja. Predstavitveni zvezek vam hitro omogoča, da pridobite praktične izkušnje s poizvedovanjem po vzorčnih podatkih.

Ko zaženete rešitev Document Understanding, odprite predstavitveni zvezek tako, da izberete Uporabite končno točko v beležnici.

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Poglobimo se v vsakega od petih glavnih prenosnikov za to rešitev.

Predpogoji

In Amazon SageMaker Studio, se prepričajte, da uporabljate PyTorch 1.10 Python 3.8 CPU Optimized sliko/jedro, da odprete zvezke. Usposabljanje uporablja pet primerkov ml.g4dn.2xlarge, zato morate dvigniti a zahteva za povečanje omejitve storitve če vaš račun zahteva povečane omejitve za to vrsto.

Razvrstitev besedila

Razvrščanje besedila se nanaša na razvrščanje vhodnega stavka v eno od oznak razreda nabora podatkov o usposabljanju. Ta zvezek prikazuje, kako uporabljati JumpStart API za razvrstitev besedila.

Razmestite in zaženite sklepanje na predhodno usposobljenem modelu

Model klasifikacije besedila, ki smo ga izbrali za uporabo, temelji na vdelavi besedila (tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2) model iz Središče TensorFlow, ki je vnaprej usposobljen za podatkovne nize Wikipedia in BookCorpus.

Model, ki je na voljo za uvedbo, je ustvarjen tako, da se izhodu modela za vdelavo besedila pripne binarna klasifikacijska plast in nato natančno nastavi celoten model na SST-2 nabor podatkov, ki je sestavljen iz pozitivnih in negativnih ocen filmov.

Za izvajanje sklepanja na tem modelu moramo najprej prenesti vsebnik sklepanja (deploy_image_uri), sklepni skript (deploy_source_uri) in predhodno usposobljen model (base_model_uri). Nato jih posredujemo kot parametre za instanciranje objekta modela SageMaker, ki ga lahko nato razmestimo:

model = Model(
    image_uri=deploy_image_uri,
    source_dir=deploy_source_uri,
    model_data=base_model_uri,
    entry_point="inference.py",
    role=aws_role,
    predictor_cls=Predictor,
    name=endpoint_name_tc,
)
# deploy the Model.
base_model_predictor = model.deploy(
    initial_instance_count=1,
    instance_type=inference_instance_type,
    endpoint_name=endpoint_name_tc,
)

Ko razmestimo model, sestavimo nekaj primerov vnosov in poizvedujemo končno točko:

text1 = "astonishing ... ( frames ) profound ethical and philosophical questions in the form of dazzling pop entertainment" 
text2 = "simply stupid , irrelevant and deeply , truly , bottomlessly cynical "

Naslednja koda prikazuje naše odgovore:

Inference:
Input text: 'astonishing ... ( frames ) profound ethical and philosophical questions in the form of dazzling pop entertainment'
Model prediction: [0.000452966779, 0.999547064]
Labels: [0, 1]
Predicted Label: 1 # value 0 means negative sentiment and value 1 means positive sentiment

Inference:
Input text: 'simply stupid , irrelevant and deeply , truly , bottomlessly cynical '
Model prediction: [0.998723, 0.00127695734]
Labels: [0, 1]
Predicted Label: 0

Natančno prilagodite vnaprej usposobljen model na naboru podatkov po meri

Pravkar smo se sprehodili skozi sklepanje o teku na predhodno usposobljenem modelu BERT, ki je bil natančno nastavljen na SST-2 nabor podatkov.

Nato razpravljamo o tem, kako natančno prilagoditi model na naboru podatkov po meri s poljubnim številom razredov. Nabor podatkov, ki ga uporabljamo za fino uravnavanje, je še vedno SST-2 nabor podatkov. Ta nabor podatkov lahko zamenjate s katerim koli naborom podatkov, ki vas zanima.

Pridobimo vsebnik Docker za usposabljanje, vir algoritma za usposabljanje in vnaprej usposobljen model:

from sagemaker import image_uris, model_uris, script_uris, hyperparameters

model_id, model_version = model_id, "*" # all the other options of model_id are the same as the one in Section 2.
training_instance_type = config.TRAINING_INSTANCE_TYPE

# Retrieve the docker image
train_image_uri = image_uris.retrieve(
    region=None,
    framework=None,
    model_id=model_id,
    model_version=model_version,
    image_scope="training",
    instance_type=training_instance_type,
)
# Retrieve the training script
train_source_uri = script_uris.retrieve(
    model_id=model_id, model_version=model_version, script_scope="training"
)
# Retrieve the pre-trained model tarball to further fine-tune
train_model_uri = model_uris.retrieve(
    model_id=model_id, model_version=model_version, model_scope="training"
)

Za hiperparametre, specifične za algoritem, začnemo s pridobivanjem slovarja Python hiperparametrov za usposabljanje, ki jih algoritem sprejme z njihovimi privzetimi vrednostmi. Lahko jih preglasite z vrednostmi po meri, kot je prikazano v naslednji kodi:

from sagemaker import hyperparameters

# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)

# [Optional] Override default hyperparameters with custom values
hyperparameters["batch-size"] = "64"
hyperparameters["adam-learning-rate"] = "1e-6"

Nabor podatkov (SST-2) je razdeljen na nize za usposabljanje, validacijo in teste, kjer se niz za usposabljanje uporablja za prilagajanje modelu, niz za preverjanje se uporablja za izračun meritev vrednotenja, ki se lahko uporabijo za HPO, in testni niz se uporablja kot zadržani podatki za ocenjevanje delovanja modela. Nato se nabor podatkov o usposabljanju in validaciji naloži v Amazon S3 in uporabi za zagon opravila usposabljanja za natančno nastavitev:

# Create SageMaker Estimator instance
tc_estimator = Estimator(
    role=role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,
    tags=[{'Key': config.TAG_KEY, 'Value': config.SOLUTION_PREFIX}],
    base_job_name=training_job_name,
)

training_data_path_updated = f"s3://{config.S3_BUCKET}/{prefix}/train"
# Launch a SageMaker Training job by passing s3 path of the training data
tc_estimator.fit({"training": training_data_path_updated}, logs=True)

Ko je delo natančnega prilagajanja končano, uvedemo model, zaženemo sklepanje na naboru podatkov o vzdržljivem testu in izračunamo metrike vrednotenja. Ker gre za nalogo binarne klasifikacije, uporabljamo ocena točnosti in Ocena F1 kot metrika vrednotenja. Večja vrednost pomeni boljše delovanje. Naslednji posnetek zaslona prikazuje naše rezultate.

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Nadalje izboljšajte zmogljivost natančnega prilagajanja s samodejnim prilagajanjem modela SageMaker

V tem koraku prikazujemo, kako lahko dodatno izboljšate zmogljivost modela s fino nastavitvijo modela s samodejnim prilagajanjem modela SageMaker. Samodejna prilagoditev modela, znana tudi kot optimizacija hiperparametrov (HPO), poišče najboljšo različico modela z izvajanjem več učnih opravil na vašem naboru podatkov z vrsto hiperparametrov, ki jih določite. Nato izbere vrednosti hiperparametrov, ki povzročijo model, ki deluje najbolje, kot je izmerjeno z metriko, ki jo izberete, v naboru podatkov za preverjanje veljavnosti.

Najprej smo postavili cilj kot oceno točnosti validacijskih podatkov (val_accuracy) in definiral metrike za opravilo naravnavanja s podajanjem imena ciljne metrike in regularnega izraza (regex). Regularni izraz se uporablja za ujemanje z izhodom dnevnika algoritma in zajemanje številskih vrednosti meritev. Nato določimo obsege hiperparametrov, iz katerih izberemo najboljše vrednosti hiperparametrov. Skupno število uglaševalnih opravil določimo na šest in ta opravila razdelimo na tri različne Amazonski elastični računalniški oblak (Amazon EC2) primerki za izvajanje vzporednih nastavitev. Oglejte si naslednjo kodo:

# Define objective metric per framework, based on which the best model will be selected.
metric_definitions_per_model = {
    "tensorflow": {
        "metrics": [{"Name": "val_accuracy", "Regex": "val_accuracy: ([0-9.]+)"}],
        "type": "Maximize",
    }
}

# You can select from the hyperparameters supported by the model, and configure ranges of values to be searched for training the optimal model.(https://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-define-ranges.html)
hyperparameter_ranges = {
    "adam-learning-rate": ContinuousParameter(0.00001, 0.01, scaling_type="Logarithmic")
}

# Increase the total number of training jobs run by AMT, for increased accuracy (and training time).
max_jobs = 6
# Change parallel training jobs run by AMT to reduce total training time, constrained by your account limits.
# if max_jobs=max_parallel_jobs then Bayesian search turns to Random.
max_parallel_jobs = 3

Te vrednosti posredujemo, da instanciramo objekt SageMaker Estimator, podobno kot v prejšnjem koraku natančnega prilagajanja. Namesto da bi poklicali fit funkcija Estimator predmet, mimo Estimator predmet kot parameter za HyperparameterTuner konstruktor in pokličite fit njegova funkcija za zagon nastavitev:

hp_tuner = HyperparameterTuner(
    tc_estimator,
    metric_definitions["metrics"][0]["Name"],
    hyperparameter_ranges,
    metric_definitions["metrics"],
    max_jobs=max_jobs,
    max_parallel_jobs=max_parallel_jobs,
    objective_type=metric_definitions["type"],
    base_tuning_job_name=tuning_job_name,
)

# Launch a SageMaker Tuning job to search for the best hyperparameters
hp_tuner.fit({"training": training_data_path_updated})

Ko so opravila prilagajanja končana, uvedemo model, ki daje najboljšo oceno metrike ocenjevanja na naboru podatkov o validaciji, izvedemo sklepanje na istem naboru podatkov o vzdržljivem testu, kot smo ga izvedli v prejšnjem razdelku, in izračunamo metrike ocenjevanja.

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Rezultati kažejo, da model, izbran s samodejnim uravnavanjem modela, znatno prekaša model, ki je bil natančno nastavljen v prejšnjem razdelku, na naboru podatkov o vzdržljivem testu.

Priznavanje imenovanega subjekta

Prepoznavanje poimenovanih entitet (NER) je postopek odkrivanja in razvrščanja poimenovanih entitet v vnaprej določene kategorije, kot so imena oseb, organizacij, lokacij in količine. Obstaja veliko primerov uporabe v resničnem svetu za NER, kot so mehanizmi za priporočila, kategorizacija in dodeljevanje vstopnic za podporo strankam pravemu oddelku, pridobivanje bistvenih informacij iz poročil bolnikov v zdravstvu ter razvrščanje vsebine iz novic in blogov.

Razmestite in zaženite sklepanje na predhodno usposobljenem modelu

Razporedimo En_core_web_md model iz prostoren knjižnica. spaCy je odprtokodna knjižnica NLP, ki se lahko uporablja za različne naloge in ima vgrajene metode za NER. Uporabljamo AWS PyTorch Deep Learning Container (DLC) s skriptnim načinom in namestimo knjižnico spaCy kot odvisnost na vrhu vsebnika.

Nato vstopna točka za skript (argument entry_point.py), ki vsebuje vso kodo za prenos in nalaganje En_core_web_md modelira in izvede sklepanje o podatkih, ki so poslani končni točki. Končno moramo še zagotoviti model_data kot vnaprej usposobljen model za sklepanje. Ker predhodno usposobljeni En_core_web_md model prenesemo sproti, kar je določeno v vnosni skripti, posredujemo prazno arhivsko datoteko. Ko je končna točka uvedena, jo lahko prikličete neposredno iz prenosnega računalnika z uporabo SDK-ja SageMaker Python Predictor. Glej naslednjo kodo:

model = PyTorchModel(
    model_data=f"{config.SOURCE_S3_PATH}/artifacts/models/empty.tar.gz",
    entry_point="entry_point.py",
    source_dir="../containers/entity_recognition",
    role=config.IAM_ROLE,
    framework_version="1.5.0",
    py_version="py3",
    code_location="s3://" + config.S3_BUCKET + "/code",
    env={
        "MMS_DEFAULT_RESPONSE_TIMEOUT": "3000"
    }
)
predictor = model.deploy(
    endpoint_name=endpoint_name,
    instance_type=config.HOSTING_INSTANCE_TYPE,
    initial_instance_count=1,
    serializer=JSONSerializer(),
    deserializer=JSONDeserializer()
)

Vhodni podatek za model je besedilni dokument. Model poimenovane entitete izvleče dele samostalnikov in poimenovane entitete v besedilnem dokumentu in jih razvrsti v več različnih vrst (kot so ljudje, kraji in organizacije). Primer vnosa in izhoda sta prikazana v naslednji kodi. The start_char parameter označuje odmik znaka za začetek razpona in end_char označuje konec razpona.

data = {'text': 'Amazon SageMaker is a fully managed service that provides every developer and data scientist with the ability to build, train, and deploy machine learning (ML) models quickly.'}
response = predictor.predict(data=data)

print(response['entities'])
print(response['noun_chunks'])

[{'text': 'Amazon SageMaker', 'start_char': 0, 'end_char': 16, 'label': 'ORG'}]
[{'text': 'Amazon SageMaker', 'start_char': 0, 'end_char': 16}, {'text': 'a fully managed service', 'start_char': 20, 'end_char': 43}, {'text': 'that', 'start_char': 44, 'end_char': 48}, {'text': 'every developer and data scientist', 'start_char': 58, 'end_char': 92}, {'text': 'the ability', 'start_char': 98, 'end_char': 109}, {'text': 'ML', 'start_char': 156, 'end_char': 158}]

Natančno prilagodite vnaprej usposobljen model na naboru podatkov po meri

V tem koraku prikazujemo, kako natančno prilagoditi vnaprej usposobljene jezikovne modele za NER na svojem naboru podatkov. Korak natančnega prilagajanja posodobi parametre modela, da zajame značilnosti vaših lastnih podatkov in izboljša natančnost. Uporabljamo WikiANN (PAN-X) nabor podatkov za natančno nastavitev DistilBERT-osnova-neobložena Model transformator iz Hugging Face.

Nabor podatkov je razdeljen na nize za usposabljanje, validacijo in teste.

Nato določimo hiperparametre modela in uporabimo DLC AWS Hugging Face s skriptnim načinom (argument entry_point), da sprožite opravilo natančnega prilagajanja:

hyperparameters = {
    "pretrained-model": "distilbert-base-uncased",
    "learning-rate": 2e-6,
    "num-train-epochs": 2,
    "batch-size": 16,
    "weight-decay": 1e-5,
    "early-stopping-patience": 2,
}

ner_estimator = HuggingFace(
    pytorch_version='1.10.2',
    py_version='py38',
    transformers_version="4.17.0",
    entry_point='training.py',
    source_dir='../containers/entity_recognition/finetuning',
    hyperparameters=hyperparameters,
    role=aws_role,
    instance_count=1,
    instance_type=training_instance_type,
    output_path=f"s3://{bucket}/{prefix}/output",
    code_location=f"s3://{bucket}/{prefix}/output",
    tags=[{'Key': config.TAG_KEY, 'Value': config.SOLUTION_PREFIX}],
    sagemaker_session=sess,
    volume_size=30,
    env={
        'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'
    },
    base_job_name = training_job_name
)

Ko je opravilo natančnega prilagajanja končano, uvedemo končno točko in povprašamo po tej končni točki s podatki o čakanju. Za poizvedbo po končni točki je treba vsak besedilni niz tokenizirati v enega ali več žetonov in poslati modelu transformatorja. Vsak žeton dobi predvideno poimenovano oznako entitete. Ker je vsak besedilni niz mogoče tokenizirati v enega ali več žetonov, moramo podvojiti osnovno resnično oznako entitete niza v vse žetone, ki so z njim povezani. Priloženi zvezek vas vodi skozi korake, kako to doseči.

Nazadnje uporabljamo vgrajeno metriko vrednotenja Hugging Face nadaljevanje za izračun ocenjevalnih rezultatov na podatkih o vzdržljivem testu. Uporabljene metrike vrednotenja so splošna natančnost, splošen priklic, splošna F1 in natančnost. Naslednji posnetek zaslona prikazuje naše rezultate.

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Nadalje izboljšajte zmogljivost natančnega prilagajanja s samodejnim prilagajanjem modela SageMaker

Podobno kot pri klasifikaciji besedila prikazujemo, kako lahko dodatno izboljšate zmogljivost modela s fino nastavitvijo modela s samodejnim prilagajanjem modela SageMaker. Če želite zagnati opravilo prilagajanja, moramo definirati objektivno metriko, ki jo želimo uporabiti za ocenjevanje uspešnosti modela na naboru podatkov o validaciji (rezultat F1 v tem primeru), obsege hiperparametrov, iz katerih lahko izberemo najboljše vrednosti hiperparametrov, kot tudi konfiguracije opravila prilagajanja, kot je npr. največje število opravil prilagajanja in število vzporednih opravil za zagon hkrati:

hyperparameters_range = {
    "learning-rate": ContinuousParameter(1e-5, 0.1, scaling_type="Logarithmic"),
    "weight-decay": ContinuousParameter(1e-6, 1e-2, scaling_type="Logarithmic"),
}

tuner = HyperparameterTuner(
    estimator,
    "f1",
    hyperparameters_range,
    [{"Name": "f1", "Regex": "'eval_f1': ([0-9.]+)"}],
    max_jobs=6,
    max_parallel_jobs=3,
    objective_type="Maximize",
    base_tuning_job_name=tuning_job_name,
)

tuner.fit({
    "train": f"s3://{bucket}/{prefix}/train/",
    "validation": f"s3://{bucket}/{prefix}/validation/",
}, logs=True)

Ko so opravila prilagajanja končana, uvedemo model, ki daje najboljšo oceno metrike ocenjevanja na naboru podatkov o validaciji, izvedemo sklepanje na istem naboru podatkov o vzdržljivem testu, kot smo ga izvedli v prejšnjem razdelku, in izračunamo metrike ocenjevanja.

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Vidimo lahko, da model s HPO dosega bistveno boljšo zmogljivost po vseh metrikah.

Odgovarjanje na vprašanje

Odgovarjanje na vprašanja je uporabno, če želite poizvedovati po veliki količini besedila za določene informacije. Uporabniku omogoča, da izrazi vprašanje v naravnem jeziku in prejme takojšen in kratek odgovor. Sisteme za odgovarjanje na vprašanja, ki jih poganja NLP, je mogoče uporabiti v iskalnikih in telefonskih pogovornih vmesnikih.

Razmestite in zaženite sklepanje na predhodno usposobljenem modelu

Naš predhodno usposobljeni model je model ekstrakcijskega odgovarjanja na vprašanja (EQA). bert-large-uncased-whole-word-masking-finetuned-squad zgrajen na modelu Transformer iz Hugging Face. Uporabljamo DLC AWS PyTorch s skriptnim načinom in namestimo transformatorji knjižnica kot odvisnost na vrhu vsebnika. Podobno kot pri nalogi NER nudimo prazno arhivsko datoteko v argumentu model_data ker se vnaprej pripravljeni model prenese sproti. Ko je končna točka uvedena, jo lahko prikličete neposredno iz prenosnega računalnika z uporabo SDK-ja SageMaker Python Predictor. Glej naslednjo kodo:

model = PyTorchModel(
    model_data=f"{config.SOURCE_S3_PATH}/artifacts/models/empty.tar.gz",
    entry_point="entry_point.py",
    source_dir="../containers/question_answering",
    role=config.IAM_ROLE,
    framework_version="1.5.0",
    py_version="py3",
    code_location="s3://" + config.S3_BUCKET + "/code",
    env={
        "MODEL_ASSETS_S3_BUCKET": config.SOURCE_S3_BUCKET,
        "MODEL_ASSETS_S3_PREFIX": f"{config.SOURCE_S3_PREFIX}/artifacts/models/question_answering/",
        "MMS_DEFAULT_RESPONSE_TIMEOUT": "3000",
    },
)

Ko je končna točka uspešno razporejena in je napovedovalec konfiguriran, lahko preizkusimo model odgovarjanja na vprašanja na primerih vnosov. Ta model je bil predhodno usposobljen na Podatkovni niz vprašanj in odgovorov Stanford (SQuAD) nabor podatkov. Ta niz podatkov je bil predstavljen v upanju, da bo razširil področje modeliranja odgovorov na vprašanja. To je nabor podatkov o bralnem razumevanju, sestavljen iz odlomkov, vprašanj in odgovorov.

Vse kar moramo storiti je, da sestavimo slovarski objekt z dvema ključema. context je besedilo, iz katerega želimo pridobiti informacije. question je poizvedba v naravnem jeziku, ki določa, katere informacije želimo pridobiti. Mi kličemo predict na našem napovedovalcu in od končne točke bi morali dobiti odgovor, ki vsebuje najverjetnejše odgovore:

data = {'question': 'what is my name?', 'context': "my name is thom"}
response = predictor.predict(data=data)

Imamo odgovor in lahko natisnemo najverjetnejše odgovore, ki smo jih izluščili iz prejšnjega besedila. Vsak odgovor ima rezultat zaupanja, ki se uporablja za razvrščanje (vendar tega rezultata ne bi smeli razlagati kot resnično verjetnost). Poleg dobesednega odgovora dobite tudi začetni in končni indeks znakov odgovora iz izvirnega konteksta:

print(response['answers'])
[{'score': 0.9793591499328613, 'start': 11, 'end': 15, 'answer': 'thom'}, 
{'score': 0.02019440196454525, 'start': 0, 'end': 15, 'answer': 'my name is thom'}, 
{'score': 4.349117443780415e-05, 'start': 3, 'end': 15, 'answer': 'name is thom'}]

Zdaj ta model natančno prilagodimo z lastnim naborom podatkov po meri, da dobimo boljše rezultate.

Natančno prilagodite vnaprej usposobljen model na naboru podatkov po meri

V tem koraku prikazujemo, kako natančno prilagoditi vnaprej usposobljene jezikovne modele za EQA na svojem naboru podatkov. Korak natančnega prilagajanja posodobi parametre modela, da zajame značilnosti vaših lastnih podatkov in izboljša natančnost. Uporabljamo SQuAD2.0 nabor podatkov za natančno nastavitev modela vdelave besedila bert-base-uncased od Hugging Face. Model, ki je na voljo za natančno nastavitev, pripne plast za ekstrahiranje odgovora na model za vdelavo besedila in inicializira parametre plasti na naključne vrednosti. Korak natančne nastavitve natančno prilagodi vse parametre modela, da zmanjša napako napovedi vhodnih podatkov in vrne natančno nastavljen model.

Podobno kot naloga klasifikacije besedila je nabor podatkov (SQuAD2.0) razdeljen na niz za usposabljanje, preverjanje veljavnosti in test.

Nato določimo hiperparametre modela in uporabimo JumpStart API za sprožitev opravila natančnega prilagajanja:

hyperparameters = {'epochs': '3', 'adam-learning-rate': '2e-05', 'batch-size': '16'}

eqa_estimator = Estimator(
    role=role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,
    tags=[{'Key': config.TAG_KEY, 'Value': config.SOLUTION_PREFIX}],
    base_job_name=training_job_name,
    debugger_hook_config=False,
)

training_data_path_updated = f"s3://{config.S3_BUCKET}/{prefix}/train"
# Launch a SageMaker Training job by passing s3 path of the training data
eqa_estimator.fit({"training": training_data_path_updated}, logs=True)

Ko je delo natančnega prilagajanja končano, uvedemo model, zaženemo sklepanje na naboru podatkov o vzdržljivem testu in izračunamo metrike vrednotenja. Uporabljeni meritvi ocenjevanja sta povprečni rezultat natančnega ujemanja in povprečni rezultat F1. Naslednji posnetek zaslona prikazuje rezultate.

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Nadalje izboljšajte zmogljivost natančnega prilagajanja s samodejnim prilagajanjem modela SageMaker

Podobno kot v prejšnjih razdelkih uporabljamo a HyperparameterTuner objekt za zagon opravil za nastavitev:

hyperparameter_ranges = {
    "adam-learning-rate": ContinuousParameter(0.00001, 0.01, scaling_type="Logarithmic"),
    "epochs": IntegerParameter(3, 10),
    "train-only-top-layer": CategoricalParameter(["True", "False"]),
}

hp_tuner = HyperparameterTuner(
    eqa_estimator,
    metric_definitions["metrics"][0]["Name"],
    hyperparameter_ranges,
    metric_definitions["metrics"],
    max_jobs=max_jobs,
    max_parallel_jobs=max_parallel_jobs,
    objective_type=metric_definitions["type"],
    base_tuning_job_name=training_job_name,
)

# Launch a SageMaker Tuning job to search for the best hyperparameters
hp_tuner.fit({"training": training_data_path_updated})

Ko so opravila prilagajanja končana, uvedemo model, ki daje najboljšo oceno metrike ocenjevanja na naboru podatkov o validaciji, izvedemo sklepanje na istem naboru podatkov o vzdržljivem testu, kot smo ga izvedli v prejšnjem razdelku, in izračunamo metrike ocenjevanja.

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Vidimo lahko, da model s HPO kaže bistveno boljšo zmogljivost na podatkih testa hold-out.

Ekstrakcija razmerja

Ekstrakcija odnosov je naloga pridobivanja semantičnih odnosov iz besedila, ki se običajno pojavijo med dvema ali več entitetami. Ekstrakcija razmerij ima pomembno vlogo pri ekstrakciji strukturiranih informacij iz nestrukturiranih virov, kot je neobdelano besedilo. V tem zvezku prikazujemo dva primera uporabe ekstrakcije razmerij.

Natančno prilagodite vnaprej usposobljen model na naboru podatkov po meri

Uporabljamo model ekstrakcije razmerij, zgrajen na a BERT-osnova-neohišje model z uporabo transformatorjev iz Objemni obrazni transformatorji knjižnica. Model za fino uravnavanje pripne linearno klasifikacijsko plast, ki sprejme par vdelav žetonov, ki jih izpiše model za vdelavo besedila, in inicializira parametre plasti na naključne vrednosti. Korak natančne nastavitve natančno prilagodi vse parametre modela, da zmanjša napako napovedi vhodnih podatkov in vrne natančno nastavljen model.

Nabor podatkov, ki ga natančno prilagodimo modelu, je SemEval-2010 Naloga 8. Model, vrnjen s fino nastavitvijo, je mogoče nadalje uporabiti za sklepanje.

Nabor podatkov vsebuje nize za usposabljanje, validacijo in teste.

Uporabljamo DLC AWS PyTorch s skriptnim načinom iz SDK-ja SageMaker Python, kjer transformers knjižnica je nameščena kot odvisnost na vrhu vsebnika. Definiramo SageMaker PyTorch ocenjevalec in nabor hiperparametrov, kot so vnaprej usposobljeni model, stopnja učenja in številke epoh za izvedbo natančnega prilagajanja. Koda za natančno nastavitev modela ekstrakcije razmerja je definirana v entry_point.py. Glej naslednjo kodo:

hyperparameters = {
    "pretrained-model": "bert-base-uncased",
    "learning-rate": 0.0002,
    "max-epoch": 2,
    "weight-decay": 0,
    "batch-size": 16,
    "accumulate-grad-batches": 2,
    "gradient-clip-val": 1.0
}

re_estimator = PyTorch(
    framework_version='1.5.0',
    py_version='py3',
    entry_point='entry_point.py',
    source_dir='../containers/relationship_extraction',
    hyperparameters=hyperparameters,
    role=aws_role,
    instance_count=1,
    instance_type=train_instance_type,
    output_path=f"s3://{bucket}/{prefix}/output",
    code_location=f"s3://{bucket}/{prefix}/output",
    base_job_name=training_job_name,
    tags=[{'Key': config.TAG_KEY, 'Value': config.SOLUTION_PREFIX}],
    sagemaker_session=sess,
    volume_size=30,
    env={
        'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'
    },
    debugger_hook_config=False
)

re_estimator.fit(
    {
        "train": f"s3://{bucket}/{prefix}/train/",
        "validation": f"s3://{bucket}/{prefix}/validation/",
    }
)

Delo usposabljanja traja približno 31 minut. Ta model uporabljamo za izvajanje sklepanja na nizu vzdržljivih testov in ovrednotenje rezultatov z uporabo natančnost, F1 makroin F1 mikro rezultati. Naslednji posnetek zaslona prikazuje rezultate ocenjevanja.

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Nadalje izboljšajte zmogljivost natančnega prilagajanja s samodejnim prilagajanjem modela SageMaker

Podobno kot v prejšnjih razdelkih uporabljamo a HyperparameterTuner predmet za interakcijo z API-ji za nastavitev hiperparametrov SageMaker. Nastavitev hiperparametrov lahko začnemo s klicem fit metoda:

hyperparameters = {
    "max-epoch": 2,
    "weight-decay": 0,
    "batch-size": 16,
    "accumulate-grad-batches": 2,
    "gradient-clip-val": 1.0
}

estimator = PyTorch(
    framework_version='1.5.0',
    py_version='py3',
    entry_point='entry_point.py',
    source_dir='../containers/relationship_extraction',
    hyperparameters=hyperparameters,
    role=aws_role,
    instance_count=1,
    instance_type=train_instance_type,
    output_path=f"s3://{bucket}/{prefix}/output",
    code_location=f"s3://{bucket}/{prefix}/output",
    base_job_name=tuning_job_name,
    tags=[{'Key': config.TAG_KEY, 'Value': config.SOLUTION_PREFIX}],
    sagemaker_session=sess,
    volume_size=30,
    env={
        'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'
    },
    debugger_hook_config=False
    
    re_tuner = HyperparameterTuner(
    estimator,
    metric_definitions["metrics"][0]["Name"],
    hyperparameter_ranges,
    metric_definitions["metrics"],
    max_jobs=max_jobs,
    max_parallel_jobs=max_parallel_jobs,
    objective_type=metric_definitions["type"],
    base_tuning_job_name=tuning_job_name,
)

re_tuner.fit({
    "train": f"s3://{bucket}/{prefix}/train/",
    "validation": f"s3://{bucket}/{prefix}/validation/",
})

Ko je opravilo prilagajanja hiperparametrov končano, izvedemo sklepanje in preverimo oceno ocene.

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Vidimo lahko, da model s HPO kaže boljšo zmogljivost na podatkih testa zadrževanja.

Povzetek dokumenta

Povzemanje dokumenta ali besedila je naloga strnjevanja velikih količin besedilnih podatkov v manjšo podmnožico smiselnih stavkov, ki predstavljajo najpomembnejše ali ustrezne informacije znotraj izvirne vsebine. Povzetek dokumenta je uporabna tehnika za razdelitev pomembnih informacij iz velikih količin besedilnih podatkov v nekaj stavkov. Povzemanje besedila se uporablja v številnih primerih uporabe, kot je obdelava dokumentov in pridobivanje informacij iz spletnih dnevnikov, člankov in novic.

Ta zvezek prikazuje uvajanje modela povzemanja dokumenta T5-osnova Iz Objemni obrazni transformatorji knjižnica. Prav tako testiramo razporejene končne točke z uporabo besedilnega članka in ocenjujemo rezultate z uporabo vgrajene metrike ocenjevanja Hugging Face RED.

Podobno kot zvezke za odgovarjanje na vprašanja in NER uporabljamo zvezke PyTorchModel iz SDK-ja SageMaker Python skupaj z entry_point.py skript za nalaganje osnovnega modela T5 v končno točko HTTPS. Ko je končna točka uspešno uvedena, lahko končni točki pošljemo besedilni članek, da prejmemo napovedni odgovor:

ARTICLE = """ Documents are a primary tool for communication,
collaboration, record keeping, and transactions across industries,
including financial, medical, legal, and real estate. The format of data
can pose an extra challenge in data extraction, especially if the content
is typed, handwritten, or embedded in a form or table. Furthermore,
extracting data from your documents is manual, error-prone, time-consuming,
expensive, and does not scale. Amazon Textract is a machine learning (ML)
service that extracts printed text and other data from documents as well as
tables and forms. We’re pleased to announce two new features for Amazon
Textract: support for handwriting in English documents, and expanding
language support for extracting printed text from documents typed in
Spanish, Portuguese, French, German, and Italian. Many documents, such as
medical intake forms or employment applications, contain both handwritten
and printed text. The ability to extract text and handwriting has been a
need our customers have asked us for. Amazon Textract can now extract
printed text and handwriting from documents written in English with high
confidence scores, whether it’s free-form text or text embedded in tables
and forms. Documents can also contain a mix of typed text or handwritten
text. The following image shows an example input document containing a mix
of typed and handwritten text, and its converted output document.."""

data = {'text': ARTICLE}
response = predictor.predict(data=data)
print(response['summary'])

"""Amazon Textract is a machine learning (ML) service that extracts printed text 
and other data from documents as well as tables and forms . 
customers can now extract and process documents in more languages .
support for handwriting in english documents and expanding language support for extracting 
printed text ."""

Nato ocenimo in primerjamo besedilni članek in rezultat povzemanja z metriko ROUGE. Izračunane so tri metrike vrednotenja: rougeN, rougeLin rougeLsum. rougeN meri število ujemanja n-grams med modelom generiranim besedilom (rezultat povzemanja) in a reference (vnos besedila). Meritve rougeL in rougeLsum izmerite najdaljša ujemajoča se zaporedja besed tako, da poiščete najdaljše skupne podnize v ustvarjenih in referenčnih povzetkih. Za vsako metriko se izračunajo intervali zaupanja za natančnost, priklic in rezultat F1. Glejte naslednjo kodo:

results = rouge.compute(predictions=[response['summary']], references=[ARTICLE])

rouge1: AggregateScore(low=Score(precision=1.0, recall=0.1070615034168565, fmeasure=0.1934156378600823), 
mid=Score(precision=1.0, recall=0.1070615034168565, fmeasure=0.1934156378600823), high=Score(precision=1.0, recall=0.1070615034168565, fmeasure=0.1934156378600823))

rouge2: AggregateScore(low=Score(precision=0.9565217391304348, recall=0.1004566210045662, fmeasure=0.18181818181818182), 
mid=Score(precision=0.9565217391304348, recall=0.1004566210045662, fmeasure=0.18181818181818182), high=Score(precision=0.9565217391304348, recall=0.1004566210045662, 
fmeasure=0.18181818181818182))

rougeL: AggregateScore(low=Score(precision=0.8085106382978723, recall=0.08656036446469248, fmeasure=0.15637860082304528), 
mid=Score(precision=0.8085106382978723, recall=0.08656036446469248, fmeasure=0.15637860082304528), high=Score(precision=0.8085106382978723, recall=0.08656036446469248, 
fmeasure=0.15637860082304528))

rougeLsum: AggregateScore(low=Score(precision=0.9787234042553191, recall=0.10478359908883828, fmeasure=0.18930041152263374), 
mid=Score(precision=0.9787234042553191, recall=0.10478359908883828, fmeasure=0.18930041152263374), high=Score(precision=0.9787234042553191, recall=0.10478359908883828, 
fmeasure=0.18930041152263374))

Čiščenje

Vire, ustvarjene za to rešitev, je mogoče izbrisati z uporabo Izbriši vse vire v SageMaker Studio IDE. Vsak prenosnik ponuja tudi razdelek za čiščenje s kodo za brisanje končnih točk.

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

zaključek

V tej objavi smo pokazali, kako uporabiti najsodobnejše tehnike ML za reševanje petih različnih nalog NLP: povzemanje dokumentov, klasifikacija besedila, vprašanja in odgovori, prepoznavanje poimenovane entitete in ekstrakcija odnosa z uporabo Jumpstarta. Začnite uporabljati Jumpstart zdaj!


O avtorjih

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.dr. Xin Huang je uporabni znanstvenik za vgrajene algoritme Amazon SageMaker JumpStart in Amazon SageMaker. Osredotoča se na razvoj razširljivih algoritmov strojnega učenja. Njegovi raziskovalni interesi so na področju obdelave naravnega jezika, razložljivega globokega učenja na tabelarnih podatkih in robustne analize neparametričnega prostorsko-časovnega združevanja. Objavil je številne prispevke na konferencah ACL, ICDM, KDD in v reviji Royal Statistical Society: Series A.

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Vivek Gangasani je višji arhitekt rešitev za strojno učenje pri Amazon Web Services. Startupom pomaga graditi in operacionalizirati aplikacije AI/ML. Trenutno je osredotočen na združevanje svojega znanja na področju vsebnikov in strojnega učenja za zagotavljanje rešitev na področju MLOps, ML Inference in ML z nizko kodo. V prostem času rad preizkuša nove restavracije in raziskuje nastajajoče trende na področju umetne inteligence in poglobljenega učenja.

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Geremy Cohen je arhitekt rešitev z AWS, kjer strankam pomaga pri izdelavi vrhunskih rešitev v oblaku. V prostem času uživa v kratkih sprehodih po plaži, z družino raziskuje območje zaliva, popravlja stvari po hiši, lomi okoli hiše in žari na žaru.

Prepoznajte ključne vpoglede iz besedilnih dokumentov s fino nastavitvijo in HPO z Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Neelam Koshiya je arhitekt za poslovne rešitve pri AWS. Trenutno se osredotoča na pomoč podjetniškim strankam na njihovi poti sprejemanja oblaka za strateške poslovne rezultate. V prostem času rada bere in je na prostem.

Časovni žig:

Več od Strojno učenje AWS