Předem natrénované modely extrakce entit založené na spaCy nebo NLTK poskytují skvělé výsledky, ale vyžadují zdlouhavý proces anotace a trénování, aby bylo možné detekovat entity, které nejsou původními entitami, jako jsou názvy pracovních míst, DIČ, léky atd. Díky rozsáhlým jazykovým modelům, jako jsou GPT-3, GPT-J a GPT-NeoX, je nyní možné extrahovat jakýkoli typ entit díky učení několika snímků bez nutnosti anotace a trénování. V tomto článku si ukážeme, jak na to.
NER (extrakce entit) je v podstatě extrakce strukturovaných informací z nestrukturovaného textu. Pokud s NER začínáte, můžete si nejprve přečíst náš krátký úvod: úvod do NER.
SpaCy se v posledních letech stala de facto standardem pro NER. (viz webové stránky spaCy). SpaCy je velmi atraktivní framework, protože se snadno používá a díky své rychlosti je vhodný pro produkční použití.
SpaCy je framework pro zpracování přirozeného jazyka v jazyce Python, který nabízí mnoho předtrénovaných modelů ve více jazycích, takže je snadné extrahovat několik typů entit (firmy, města, adresy, data atd.) ve vašem vlastním jazyce, aniž byste museli trénovat vlastní model.
NLTK je také zajímavou volbou pro extrakci entit pomocí Pythonu, ale ve výchozím nastavení navrhuje méně entit a obecně se NLTK nedoporučuje pro produkční použití (jedná se spíše o vzdělávací a výzkumný rámec).
U těchto frameworků však rychle narazíte na limit: počet nativně podporovaných entit je omezený. Většina společností chce využít NER k extrakci specifických obchodních informací, jako jsou informace o osobách, finanční údaje, lékařská ošetření atd. Tyto entity samozřejmě předtrénované modely spaCy ve výchozím nastavení nepodporují, takže abyste toho dosáhli, musíte si vytvořit vlastní datovou sadu a vytrénovat z ní vlastní model.
Trénování vlastního modelu spaCy je dlouhý a zdlouhavý proces anotace: jedna nebo více osob musí spolupracovat, aby vytvořily obrovskou sadu dobrých příkladů a anotovaly je. Aby se model mohl správně učit, je zapotřebí velmi velký objem příkladů. Existují dobré anotační nástroje (například Prodigy od společnosti spaCy), ale stále se jedná o bolestivý úkol, kvůli kterému se mnoho projektů NLP přeruší.
Ilustrace anotace
Dobrá zpráva: s rozvojem velkých jazykových modelů, jako jsou GPT-3, GPT-J a GPT-NeoX, je nyní možné extrahovat libovolné entity bez anotace a trénování nového modelu!
Velké jazykové modely pro generování textů se začaly objevovat v poslední době s GPT-3. (více informací o GPT-3 na webu OpenAI). Když společnost OpenAI vydala svůj model GPT-3, který se skládá ze 175 miliard parametrů, znamenalo to revoluci, protože to otevřelo cestu mnoha špičkovým aplikacím umělé inteligence založeným na zpracování přirozeného jazyka, aniž by bylo nutné další školení.
Původním cílem modelů GPT, jako je GPT-3, je generování textu: stačí zadat vstupní údaje modelu a nechat ho, aby zbytek vygeneroval za vás. Na základě generování textu lze dosáhnout téměř jakéhokoli případu použití zpracování přirozeného jazyka: klasifikace, shrnutí, konverzační AI, parafrázování... a samozřejmě extrakce entit!
Protože GPT-3 není open-source model, komunita open-source pracovala na alternativách ke GPT-3 a nyní máme dva skvělé open-source ekvivalenty: GPT-J a GPT-NeoX. Stále ještě nejsou tak velké jako GPT-3, ale není pochyb o tom, že je jen otázkou času, než open-source komunita dožene OpenAI.
Správné využití těchto modelů vyžaduje novou techniku zvanou "učení několika snímků".
Tyto velké modely GPT jsou tak velké, že se od vás mohou velmi rychle učit.
Řekněme, že chcete, aby vám GPT-3 vygeneroval krátký popis produktu. Zde je příklad bez učení několika snímků:
Generate a product description containing these specific keywords: t-shirt, men, $50
Odpověď, kterou dostanete, bude zbytečná. Mohlo by to být například takto:
Generate a product description containing these specific keywords: t-shirt, men, $50 and short.
The product description needs to be a few words long. Don’t use plurals, use the keywords in the order they are
Dobrá zpráva: mnohem lepších výsledků dosáhnete, když modelu jednoduše zadáte několik příkladů!
Generate a product description containing specific keywords.
Keywords: shoes, women, $59
Result: Beautiful shoes for women at the price of $59.
###
Keywords: trousers, men, $69
Result: Modern trousers for men, for $69 only.
###
Keywords: gloves, winter, $19
Result: Amazingly hot gloves for cold winters, at $19.
###
Keywords: gpu, gaming, $1499
Result:
Výsledek bude vypadat asi takto:
Generate a product description containing specific keywords.
Keywords: shoes, women, $59
Result: Beautiful shoes for women at the price of $59.
###
Keywords: trousers, men, $69
Result: Modern trousers for men, for $69 only.
###
Keywords: gloves, winter, $19
Result: Amazingly hot gloves for cold winters, at $19.
###
Keywords: gpu, gaming, $1,499
Result: The best gaming GPU on the market, at the price of $1,499 only.
Jak vidíte, odezva modelu je nyní naprosto přesná, a to díky třem příkladům, které jsme mu nejprve zadali. Přesto tento model nebyl nikdy trénován na tento druh úlohy generování popisu produktu. Právě v tom spočívá technika "učení několika záběrů": "učení přenosem" provádíte za běhu pouze s několika příklady. Abyste dosáhli takového výsledku, obvykle očekáváte, že model zpracování přirozeného jazyka natrénujete pomocí tuny příkladů, ale ne zde.
Nyní provedeme extrakci entit díky učení několika snímků.
Řekněme, že chcete z webových stránek extrahovat názvy pracovních pozic. Než zadáte vlastní požadavek, jednoduše uveďte několik příkladů extrakce názvů pracovních míst:
Extract job titles from the following sentences.
Sentence: John Doe has been working for Microsoft for 20 years as a Linux Engineer.
Job title: Linux Engineer
###
Sentence: John Doe has been working for Microsoft for 20 years and he loved it.
Job title: none
###
Sentence: Marc Simoncini | Director | Meetic
Job title: Director
###
Sentence: Franck Riboud was born on 7 November 1955 in Lyon. He is the son of Antoine Riboud, who transformed the former European glassmaker BSN Group into a leading player in the food industry. He is the CEO at Danone.
Job title: CEO
###
Sentence: Damien is the CTO of Platform.sh, he was previously the CTO of Commerce Guys, a leading ecommerce provider.
Job title:
Výsledek bude následující:
Extract job titles from the following sentences.
Sentence: John Doe has been working for Microsoft for 20 years as a Linux Engineer.
Job title: Linux Engineer
###
Sentence: John Doe has been working for Microsoft for 20 years and he loved it.
Job title: none
###
Sentence: Marc Simoncini | Director | Meetic
Job title: Director
###
Sentence: Franck Riboud was born on 7 November 1955 in Lyon. He is the son of Antoine Riboud, who transformed the former European glassmaker BSN Group into a leading player in the food industry. He is the CEO at Danone.
Job title: CEO
###
Sentence: Damien is the CTO of Platform.sh, he was previously the CTO of Commerce Guys, a leading ecommerce provider.
Job title: CTO
Jak jste si všimli, musíme být chytří při vytváření příkladů s několika snímky. Může se stát, že nebude nalezen vůbec žádný název pracovní pozice, a proto jsme vytvořili příklad vracející "žádný" (zabrání se tak falešným pozitivním výsledkům). Možná chcete získat několik názvů pracovních míst najednou? V takovém případě je důležité vytvořit příklady vracející také několik názvů pracovních míst (například názvy pracovních míst oddělené čárkou).
Ještě lepších výsledků dosáhnete, když přidáte ještě více příkladů. A je důležité, aby se vaše příklady co nejvíce blížily skutečnému konečnému požadavku. Pokud například víte, že budete analyzovat celé odstavce místo pouhých vět, je nejlepší vytvořit příklady i s odstavci.
Pokud nemáte přístup k modelu GPT, můžete jednoduše použít rozhraní API služby NLP Cloud. K dispozici je několik klientů (Python, Go, Node.js, Ruby, PHP...). Zde si ukážeme příklad použití GPT-J s klientem Python:
import nlpcloud
client = nlpcloud.Client("gpt-j", "your API token", gpu=True)
client.generation("""Extract job titles from the following sentences.
Sentence: John Doe has been working for Microsoft for 20 years as a Linux Engineer.
Job title: Linux Engineer
###
Sentence: John Doe has been working for Microsoft for 20 years and he loved it.
Job title: none
###
Sentence: Marc Simoncini | Director | Meetic
Job title: Director
###
Sentence: Franck Riboud was born on 7 November 1955 in Lyon. He is the son of Antoine Riboud, who transformed the former European glassmaker BSN Group into a leading player in the food industry. He is the CEO at Danone.
Job title: CEO
###
Sentence: Damien is the CTO of Platform.sh, he was previously the CTO of Commerce Guys, a leading ecommerce provider.
Job title:""",
top_p=0.1,
length_no_input=True,
remove_input=True,
end_sequence="###",
remove_end_sequence=True
)
Výsledkem bude: CTO
Dovolte mi, abych vám stručně vysvětlil parametry generování textu, které jsme právě použili.
Nastavili jsme velmi nízkou horní hodnotu p, protože nechceme, aby GPT-J vytvářel příliš originální výsledky: chceme jen, aby se držel toho, co viděl ve vašem požadavku.
"length_no_input" znamená, že hodnota maximální délky by neměla zohledňovat vstupní text.
"remove_input" znamená, že vstupní text má být z výsledku odstraněn.
"end_sequence" znamená, že když model narazí na tento znak, měl by přestat generovat text. Protože jsme v našich příkladech s několika snímky přidali na konec každé odpovědi znak "###", model po vygenerování odpovědi automaticky vygeneruje znak "###" a tím se zastaví.
"remove_end_sequence" znamená, že chceme z odpovědi odstranit "###".
Další podrobnosti naleznete v dokumentaci služby NLP Cloud: viz zde.
Extrakce entit pomocí modelu GPT poskytuje velkou volnost, protože jakoukoli novou entitu lze extrahovat za běhu, i když na to model nebyl vycvičen!
Má to však svou cenu: tyto velké jazykové modely jsou obrovské a relativně pomalé.
Chcete-li například použít GPT-J nebo GPT-NeoX, budete potřebovat velký grafický procesor s velkou pamětí VRAM, například NVIDIA RTX A6000 nebo A40. A bude zde určitá latence (extrakce entity trvá přibližně 500 ms). Naopak spaCy nebo NLTK budou mnohem rychlejší a méně nákladné z hlediska infrastruktury.
V roce 2022 je možné provádět pokročilý NER velmi snadno bez anotace a školení! To výrazně pomůže firmám rychleji realizovat projekty extrakce entit a umožní to také vznik špičkových aplikací založených na zpracování přirozeného jazyka.
Velké jazykové modely jako GPT-3, GPT-J a GPT-NeoX jsou však nákladné, takže byste neměli podceňovat náklady na infrastrukturu.
Doufám, že vám tento článek pomůže ušetřit čas a peníze!
Julien Salinas
Technický ředitel společnosti NLP Cloud