トークン単位での分割
RecursiveCharacterTextSplitter や CharacterTextSplitter を使った文書分割は手軽で、状況によっては高い性能を発揮しますが、1 つ弱点があります。モデルが処理する単位であるトークンではなく、文字を基準に分割してしまう点です。
この演習では、トークンベースのテキストスプリッターを使って文書を分割し、各チャンクのトークン数を確認して、モデルのコンテキストウィンドウを超えないようにします。PDF ドキュメントは document として読み込まれています。
tiktoken と必要なクラスはすでにインポート済みです。
この演習はコースの一部です
LangChain で学ぶ Retrieval Augmented Generation (RAG)
演習の手順
- 各チャンクのトークン数を確認できるように、
tiktokenからgpt-4o-miniのエンコーディングを取得します。 - GPT-4o-Mini の
encodingを用いて、トークン数に基づいて分割するテキストスプリッターを作成します。 documentに保存されている PDF を、token_splitterを使ってチャンクに分割します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Get the encoding for gpt-4o-mini
encoding = ____
# Create a token text splitter
token_splitter = ____(encoding_name=____, chunk_size=100, chunk_overlap=10)
# Split the PDF into chunks
chunks = ____
for i, chunk in enumerate(chunks[:3]):
print(f"Chunk {i+1}:\nNo. tokens: {len(encoding.encode(chunk.page_content))}\n{chunk}\n")