Chunking
After partitioning, chunking rearranges the resulting document elements into manageable “chunks” to stay within the limits of an embedding model and to improve retrieval precision. The goal is to retrieve only parts of documents that contain only the information that is relevant to a user’s query. You can specify if and how Unstructured chunks those elements, based on your intended end use.
During chunking, Unstructured uses a basic chunking strategy that attempts to combine two or more consecutive text elements into each chunk that fits together within the max characters setting. To determine the best max characters setting, see the documentation for the embedding model that you want to use.
You can further control this behavior with by title, by page, and by similarity chunking strategies. In all cases, Unstructured will only split individual elements if they exceed the specified max characters length. After chunking, you will have document elements of only the following types:
CompositeElement
: Any text element will become aCompositeElement
after chunking. A composite element can be a combination of two or more original text elements that together fit within the max characters setting. It can also be a single element that doesn’t leave room in the chunk for any others but fits by itself. Or it can be a fragment of an original text element that was too big to fit in one chunk and required splitting.Table
: A table element is not combined with other elements, and if it fits within the max characters setting it will remain as is.TableChunk
: Large tables that exceed the max characters setting are split into specialTableChunk
elements.
Here are a few examples:
The following sections provide information about the available chunking strategies and their settings.
Basic chunking strategy
The basic chunking strategy uses only the max characters setting (an absolute or “hard” limit) and new after n characters setting (an approximate or “soft” limit) to combine sequential elements to maximally fill each chunk.
This strategy adds elements to a chunk until the new after n characters limit is reached. A new chunk is then started. No chunk will exceed the max characters limit. For elements larger than the “max characters” limit, the text is split into multiple chunks at spaces or new lines to avoid cutting words.
Table elements are always treated as standalone chunks. If a table is too large, the table is chunked by rows.
This strategy does not use section boundaries, page boundaries, or content similarities to determine the chunks’ contents.
The following diagram illustrates conceptually how a candidate element is chunked to fit within the max characters (hard) and new after n characters (soft) limits:
Context between chunks can be maintained by using the overlap and overlap all settings. The overlap setting repeats the specified number of characters from the end of the previous chunk at the beginning of the next chunk. By default, overlap all is applied only to relatively large elements If overlap all is set to true, the overlap is applied to all chunks, regardless.
The overlap setting is based on the number of characters, so words might be split. The overlap setting’s character count is included in the chunk size; nonetheless, the chunk’s total size must not exceed the max characters setting.
The following diagram illustrates conceptually how chunks are calculated by setting overlap all to true or false. In this diagram, setting overlap all to true results in a portion at the end of each chunk always being copied over to the beginning of the next chunk. By default (or by setting overalp all to false) results in only a portion at the end of Element 6 Part 1 in Chunk 2 being copied over to the beginning of Element 6 Part 2 in Chunk 3, because Element 6 is larger than the max characters setting:
To use this chunking strategy, choose Chunk by character in the Chunkers section of a Chunker node in a workflow.
Chunk by title strategy
The by-title chunking strategy attempts to preserve section boundaries when determining the chunks’ contents, primarily when a Title element is encountered. The title is used as the section header for the chunk. The max characters and new after n characters settings are still respected.
The following diagram illustrates conceptually how elements are chunked when Title elements are encountered (see Chunks 1, 4, and 6), while still respecting the max characters and new after n characters settings (see Chunks 2 and 3):
A single chunk should not contain text that occurred in two different sections. When a new section starts, the existing chunk is closed and a new one is started, even if the next element would fit in the prior chunk.
The following conceptual diagram illustrates this point, in that many Title elements can produce many relatively small chunks:
To reduce the number of chunks, you can use the combine text under n characters setting. This settings attempts to combine elements into a single chunk until the combine text under n characters limit is reached, as shown in the following conceptual diagram:
Setting combine text under n characters to a value equal to or greater than the new after n characters setting is not recommended, as it can result in substantially longer chunks overall and also pushing titles by themselves into previous chunks. The following conceptual diagram illustrates this point:
To use this chunking strategy, choose Chunk by title in the Chunkers section of a Chunker node in a workflow.
Chunk by page strategy
The by-page chunking strategy attempts to preserve page boundaries when determining the chunks’ contents. A single chunk should not contain text that occurred in two different page. When a new page starts, the existing chunk is closed and a new one is started, even if the next element would fit in the prior chunk.
To use this chunking strategy, choose Chunk by page in the Chunkers section of a Chunker node in a workflow.
Chunk by similarity strategy
The by-similarity chunking strategy uses the sentence-transformers/multi-qa-mpnet-base-dot-v1 embedding model to identify topically similar sequential elements and combines them into chunks.
As with the other chunking strategies, chunks will never exceed the absolute maximum chunk size set by Max characters. For this reason, not all elements that share a topic will necessarily appear in the same chunk. However, with this strategy you can guarantee that two elements with low similarity will not be combined in a single chunk.
To use this chunking strategy, choose Chunk by similarity in the Chunkers section of a Chunker node in a workflow.
You can control the level of topic similarity you require for elements to have by setting Similarity threshold.
Max characters setting
Specifies the absolute maximum number of characters in a chunk.
To specify this setting, enter a number into the Max characters field.
This setting applies to all of the chunking strategies.
Combine text under n characters setting
Combines elements from a section into a chunk until a section reaches a length of this many characters.
To specify this setting, enter a number into the Combine text under n chars field.
This setting applies only to the chunking strategy Chunk by title.
Include original elements setting
If the Include original elements box is checked, the elements that were used to form a chunk appear in the metadata
field’s orig_elements
field for that chunk.
This setting applies to all of the chunking strategies.
Multipage sections setting
If the Multipage sections box is checked, this allows sections to span multiple pages.
This setting applies only to the chunking strategy Chunk by title.
New after n characters setting
Closes new sections after reaching a length of this many characters. This is an approximate limit.
To specify this setting, enter a number into the New after n characters field.
This setting applies only to the chunking strategies Chunk by character, Chunk by title, and Chunk by page.
Overlap setting
Applies a prefix of this many trailing characters from the prior text-split chunk to second and later chunks formed from oversized elements by text-splitting.
To specify this setting, enter a number into the Overlap field.
This setting applies only to the chunking strategies Chunk by character, Chunk by title, and Chunk by page.
Overlap all setting
If the Overlap all box is checked, applies overlap to “normal” chunks formed by combining whole elements. Use with caution as this can introduce noise into otherwise clean semantic units.
This setting applies only to the chunking strategies Chunk by character, Chunk by title, and Chunk by page.
Similarity threshold setting
Specifies the minimum similarity that text in consecutive elements must have to be included in the same chunk.
This must be a value between 0.0
and 1.0
, exclusive (0.01
to 0.99
). The default is 0.5
if not otherwise specified.
To specify this setting, enter a number into the Similarity threshold field.
This setting applies only to the chunking strategy Chunk by similarity.
Contextual chunking
A technique known as contextual chunking prepends chunk-specific explanatory context to each chunk. Contextual chunking has been shown to enhance traditional RAG solutions by yielding significant improvements in retrieval accuracy, which directly translates to better performance in downstream tasks. Learn more.
To apply contextual chunking, switch on the Contextual chunking toggle in the settings for any chunking strategy.
This chunk-specific explanatory context information is typically a couple of sentences in length. Contextual chunking happens before any embeddings are generated.
When contextual chunking is applied, the contextual information in each chunk begins with Prefix:
and ends with a semicolon (;
).
The chunk’s original content begins with Original:
.
For example, without contextual chunking applied, elements would for instance be generated similar to the following. Line breaks have been inserted here for readability. The output will not contain these line breaks:
Applying contextual chunking to those same elements would result in the following output. Line breaks and blank lines have been inserted here for readability. The output will not contain these line breaks and blank lines:
Learn more
Was this page helpful?