Nagyméretű dokumentumok adattömbje vektorkeresési megoldásokhoz az Azure AI Searchben
A nagyméretű dokumentumok kisebb adattömbökre való particionálása segíthet a modellek beágyazási modelljeinek maximális jogkivonat-beviteli korlátai alatt maradni. Az Azure OpenAI text-embedding-ada-002 modell bemeneti szövegének maximális hossza például 8191 token. Mivel minden token körülbelül négy karakterből áll a közös OpenAI-modellek esetében, ez a maximális korlát körülbelül 6000 szó szövegnek felel meg. Ha ezeket a modelleket használja beágyazások létrehozásához, kritikus fontosságú, hogy a bemeneti szöveg a korlát alatt maradjon. A tartalom adattömbökre való particionálása biztosítja, hogy az adatok a beágyazási modellek által feldolgozhatók legyenek, és hogy a csonkolás miatt ne veszítsen el adatokat.
Javasoljuk az integrált vektorizálást a beépített adattömb-készítéshez és beágyazáshoz. Az integrált vektorizálás függ az indexelők, a készségkészletek, a szövegfelosztási képesség és egy beágyazási képesség, például az Azure OpenAI beágyazási képességétől. Ha nem tudja használni az integrált vektorizálást, ez a cikk a tartalom darabolásának néhány megközelítését ismerteti.
Gyakori adattömbelési technikák
Az adattömb-készítés csak akkor szükséges, ha a forrásdokumentumok túl nagyok a modellek által előírt maximális bemeneti mérethez.
Íme néhány gyakori adattömbkészítési technika, kezdve a leggyakrabban használt módszerrel:
Rögzített méretű adattömbök: Olyan rögzített méret meghatározása, amely elegendő a szemantikailag értelmezhető bekezdésekhez (például 200 szó), és lehetővé teszi bizonyos átfedéseket (például a tartalom 10-15%-át) jó adattömböket hozhat létre a vektorgenerátorok beágyazásához.
Változó méretű adattömbök tartalom alapján: Az adatok particionálása tartalomjellemzők, például mondatvégi írásjelek, sorvégi jelölők vagy a természetes nyelvi feldolgozási (NLP) kódtárak funkcióinak használatával. A Markdown nyelvi struktúrája az adatok felosztására is használható.
A fenti technikák egyikének testreszabása vagy iterálása. Nagy méretű dokumentumok kezelésekor például használhat változó méretű adattömböket, de a dokumentum címét is hozzáfűzheti a dokumentum közepéről származó adattömbökhöz a környezet elvesztésének elkerülése érdekében.
Tartalomfedés szempontjai
Adattömbök esetén az adattömbök közötti kis mennyiségű szöveg átfedése segíthet megőrizni a környezetet. Javasoljuk, hogy körülbelül 10%-os átfedéssel kezdjen. Ha például egy rögzített adattömbméret 256 jogkivonatot ad meg, 25 token átfedésben kell kezdenie a tesztelést. Az átfedés tényleges mennyisége az adatok típusától és az adott használati esettől függően változik, de megállapítottuk, hogy a 10-15% számos forgatókönyv esetében működik.
Az adattömbökre vonatkozó tényezők
Az adattömbök használatakor gondolja át az alábbi tényezőket:
A dokumentumok alakja és sűrűsége. Ha ép szövegre vagy szakaszokra van szüksége, a nagyobb adattömbök és a mondatszerkezetet megőrző változó adattömbök jobb eredményeket hozhatnak.
Felhasználói lekérdezések: A nagyobb adattömbök és az egymást átfedő stratégiák segítenek megőrizni az adott információkat megcélozó lekérdezések kontextusát és szemantikai gazdagságát.
A nagyméretű nyelvi modellek (LLM) teljesítményre vonatkozó irányelvekkel rendelkeznek az adattömb méretére vonatkozóan. Olyan adattömbméretet kell beállítania, amely az összes használt modell esetében a legjobban működik. Ha például modelleket használ összegzéshez és beágyazáshoz, válasszon egy optimális adattömbméretet, amely mindkettőhöz használható.
Hogyan illeszkedik az adattömb a munkafolyamatba?
Ha nagyméretű dokumentumokkal rendelkezik, be kell szúrnia egy darabolási lépést az indexelési és lekérdezési munkafolyamatokba, amelyek nagy szövegrészeket bontanak fel. Integrált vektorizálás használatakor a rendszer egy alapértelmezett adattömb-stratégiát alkalmaz a Szöveg felosztása képesség használatával. Egyéni adattömb-stratégiát is alkalmazhat egyéni szakértelemmel. Egyes adattömböket biztosító kódtárak a következők:
A legtöbb kódtár gyakori adattömb-technikákat biztosít a rögzített mérethez, változómérethez vagy kombinációhoz. Olyan átfedést is megadhat, amely kis mennyiségű tartalmat duplikál az egyes adattömbökben a környezet megőrzése érdekében.
Példák adattömbökre
Az alábbi példák bemutatják, hogyan alkalmazzák az adattömb-stratégiákat a NASA Earth at Night e-book PDF-fájljára:
Példa szövegfelosztási képességre
Általánosan elérhető a Szövegfelosztási képességen keresztüli integrált adatbeosztás.
Ez a szakasz a készségalapú megközelítéssel és a szövegfelosztási képességparaméterekkel végzett beépített adattömböket ismerteti.
Ehhez a példához egy mintajegyzetfüzet található az azure-search-vector-samples adattárban.
Állítsa be textSplitMode
, hogy kisebb adattömbökre bontsa a tartalmat:
pages
(alapértelmezett). Az adattömbök több mondatból állnak.sentences
. Az adattömbök egyetlen mondatból állnak. Ami "mondatot" jelent, az nyelvfüggő. Angol nyelven szabványos mondatvégződést használ, például.
vagy!
használ. A nyelvet adefaultLanguageCode
paraméter vezérli.
A pages
paraméter további paramétereket ad hozzá:
maximumPageLength
Az egyes adattömbökben legfeljebb 1 karaktert vagy 2-es jogkivonatot határoz meg. A szövegelosztó elkerüli a mondatok felosztását, így a tényleges karakterszám a tartalomtól függ.pageOverlapLength
Meghatározza, hogy az előző oldal végétől hány karakter szerepel a következő oldal elején. Ha be van állítva, ennek a maximális oldalhossznak kevesebbnek kell lennie, mint a fele.maximumPagesToTake
meghatározza, hogy hány oldalt/adattömbet kell egy dokumentumból átvenni. Az alapértelmezett érték 0, ami azt jelenti, hogy az összes lapot vagy adattömbet ki kell venni a dokumentumból.
1 A karakterek nem igazodnak a jogkivonat definícióihoz. Az LLM által mért jogkivonatok száma eltérhet a Szöveg felosztása képesség által mért karakterméretétől.
2 A jogkivonat-adattömbök a 2024-09-01-es előzetes verzióban érhetők el, és további paramétereket tartalmaznak a tokenizáló és az adattömbök során felosztandó tokenek megadásához.
Az alábbi táblázat bemutatja, hogy a paraméterek kiválasztása hogyan befolyásolja a Földből származó teljes adattömbök számát az Éjszakai e-könyvben:
textSplitMode |
maximumPageLength |
pageOverlapLength |
Teljes adattömbszám |
---|---|---|---|
pages |
1000 | 0 | 172 |
pages |
1000 | 200 | 216 |
pages |
2000. | 0 | 85 |
pages |
2000. | 500 | 113 |
pages |
5000 | 0 | 34 |
pages |
5000 | 500 | 38 |
sentences |
N.A. | N.A. | 13361 |
Találatok textSplitMode
pages
használata a teljes karakterszámhoz közelítő adattömbök többségében maximumPageLength
. Az adattömbkaraktérfogat-szám attól függ, hogy a mondathatárok hol esnek az adattömbbe. Az adattömb jogkivonatának hossza az adattömb tartalmának különbségei miatt változik.
Az alábbi hisztogramok azt mutatják, hogy az adattömb karakterhosszának eloszlása hogyan hasonlítható össze a gpt-35 turbó adattömbök hosszával egy maximumPageLength
textSplitMode
pages
2000-es és egy pageOverlapLength
500-ból álló szám használatakor a Földön az Éjszakai e-könyvben:
textSplitMode
sentences
Az eredmények nagy számú, egyedi mondatokból álló adattömbben való használata. Ezek az adattömbök jelentősen kisebbek, mint a általuk pages
előállítottak, és az adattömbök tokenszáma jobban megfelel a karakterszámnak.
Az alábbi hisztogramok azt mutatják be, hogy az adattömb karakterhosszának eloszlása hogyan hasonlítható össze a gpt-35-turbo adattömbök hosszával, ha a Föld at Night e-book egyikét textSplitMode
sentences
használja:
A paraméterek optimális kiválasztása az adattömbök használatától függ. A legtöbb alkalmazás esetében ajánlott az alábbi alapértelmezett paraméterekkel kezdeni:
textSplitMode |
maximumPageLength |
pageOverlapLength |
---|---|---|
pages |
2000. | 500 |
Példa LangChain-adattömbre
A LangChain dokumentumbetöltőket és szövegosztókat biztosít. Ez a példa bemutatja, hogyan tölthet be PDF-fájlokat, hogyan kérhet le jogkivonatokat, és hogyan állíthat be szövegelosztót. A jogkivonatok számának lekérésével megalapozott döntést hozhat az adattömbök méretezéséről.
Ehhez a példához egy mintajegyzetfüzet található az azure-search-vector-samples adattárban.
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("./data/earth_at_night_508.pdf")
pages = loader.load()
print(len(pages))
A kimenet 200 dokumentumot vagy lapot jelöl a PDF-fájlban.
A lapok becsült tokenszámának lekéréséhez használja a TikTokent.
import tiktoken
tokenizer = tiktoken.get_encoding('cl100k_base')
def tiktoken_len(text):
tokens = tokenizer.encode(
text,
disallowed_special=()
)
return len(tokens)
tiktoken.encoding_for_model('gpt-3.5-turbo')
# create the length function
token_counts = []
for page in pages:
token_counts.append(tiktoken_len(page.page_content))
min_token_count = min(token_counts)
avg_token_count = int(sum(token_counts) / len(token_counts))
max_token_count = max(token_counts)
# print token counts
print(f"Min: {min_token_count}")
print(f"Avg: {avg_token_count}")
print(f"Max: {max_token_count}")
A kimenet azt jelzi, hogy egyetlen oldal sem rendelkezik nulla jogkivonattal, az átlagos tokenhossz oldalanként 189 jogkivonat, és a lapok maximális tokenszáma 1583.
Az átlagos és maximális tokenméret ismeretében betekintést nyerhet az adattömb méretének beállításába. Bár a szabványos 2000 karakteres javaslatot 500 karakteres átfedéssel használhatja, ebben az esetben érdemes alacsonyabbra lépni a mintadokumentum tokenszáma alapján. A túl nagy átfedési érték beállítása valójában azt eredményezheti, hogy egyáltalán nem jelenik meg átfedés.
from langchain.text_splitter import RecursiveCharacterTextSplitter
# split documents into text and embeddings
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
length_function=len,
is_separator_regex=False
)
chunks = text_splitter.split_documents(pages)
print(chunks[20])
print(chunks[21])
Két egymást követő adattömb kimenete az első adattömb szövegét jeleníti meg, amely átfedésben van a második adattömbtel. A kimenet könnyen szerkeszthető az olvashatóság érdekében.
'x Earth at NightForeword\nNASA’s Earth at Night explores the brilliance of our planet when it is in darkness. \n It is a compilation of stories depicting the interactions between science and \nwonder, and I am pleased to share this visually stunning and captivating exploration of \nour home planet.\nFrom space, our Earth looks tranquil. The blue ethereal vastness of the oceans \nharmoniously shares the space with verdant green land—an undercurrent of gentle-ness and solitude. But spending time gazing at the images presented in this book, our home planet at night instantly reveals a different reality. Beautiful, filled with glow-ing communities, natural wonders, and striking illumination, our world is bustling with activity and life.**\nDarkness is not void of illumination. It is the contrast, the area between light and'** metadata={'source': './data/earth_at_night_508.pdf', 'page': 9}
'**Darkness is not void of illumination. It is the contrast, the area between light and **\ndark, that is often the most illustrative. Darkness reminds me of where I came from and where I am now—from a small town in the mountains, to the unique vantage point of the Nation’s capital. Darkness is where dreamers and learners of all ages peer into the universe and think of questions about themselves and their space in the cosmos. Light is where they work, where they gather, and take time together.\nNASA’s spacefaring satellites have compiled an unprecedented record of our \nEarth, and its luminescence in darkness, to captivate and spark curiosity. These missions see the contrast between dark and light through the lenses of scientific instruments. Our home planet is full of complex and dynamic cycles and processes. These soaring observers show us new ways to discern the nuances of light created by natural and human-made sources, such as auroras, wildfires, cities, phytoplankton, and volcanoes.' metadata={'source': './data/earth_at_night_508.pdf', 'page': 9}
Egyéni képesség
Egy rögzített méretű adattömb- és beágyazási generációs minta bemutatja az azure OpenAI-beágyazási modellek használatával történő adattömb- és vektorbeágyazási generációt is. Ez a minta egy Egyéni Azure AI Search-készséget használ a Power Skills adattárban az adattömb-lépés burkolásához.