例外的なラグシステムを構築するための15のチャンキングテクニック
自然言語処理(NLP)は、特に検索された発電(RAG)パイプラインの出現により、急速に進歩しました。検索ベースのシステムの精度と生成モデルの創造性を組み合わせることにより、RAGパイプラインは、研究論文からセクションを抽出したり、長い文書を要約したり、広範な知識ベースに基づいてユーザーの質問に対処するかにかかわらず、高い関連性とコンテキストで質問に答える能力を高めます。ただし、 RAGパイプラインの重要な課題は、テキスト全体がGPT-4などのモデルのトークン限界を超えることが多いため、効果的なチャンキングテクニックが必要であるため、大規模なドキュメントを管理することです。
これには、文書のチャンク技術が必要になります。これは、テキストをより小さく、より管理しやすいピースに分解しながら、コンテキストと関連性を維持し、最も意味のある情報を取得できるようにして、応答の精度を向上させることができます。 RAGパイプラインの有効性は、固定サイズ、セマンティックな意味、または文の境界を介して、チャンキング戦略によって大きな影響を受ける可能性があります。このブログでは、さまざまなチャンキングテクニックを探り、それぞれにコードスニペットを提供し、これらの方法が堅牢で効率的なぼろきれパイプラインの構築にどのように貢献するかについて説明します。チャンキングがぼろきれパイプラインをどのように強化できるかを発見する準備はできていますか?始めましょう!
学習目標
- チャンクとは何か、自然言語処理(NLP)と検索の上昇(RAG)システムにおけるその重要性を明確に理解します。
- 実装のための定義、利点、短所、理想的なユースケースなど、さまざまなチャンキング戦略に精通してください。
- 実用的な実装を学ぶ:チャンク戦略ごとにコードの例をレビューし、実際のシナリオでそれらを実装する方法を示すことにより、実用的な知識を取得します。
- さまざまなチャンキング方法間のトレードオフを評価する機能と、これらの選択が検索速度、精度、およびシステム全体のパフォーマンスにどのように影響するかを開発します。
- チャンキング戦略をラグパイプラインに効果的に統合するスキルを身につけ、ドキュメントの検索と応答生成の品質を向上させます。
この記事は、データサイエンスブログソンの一部として公開されました。
目次
- チャンクは何ですか、そしてなぜそれが重要なのですか?
- ラグパイプラインのチャンキング戦略
- さまざまなシナリオの最適化
- さまざまな戦略のユースケース
- 結論
- よくある質問
チャンクは何ですか、そしてなぜそれが重要なのですか?
検索された生成(RAG)パイプラインのコンテキストでは、チャンキングとは、より効果的な検索と生成のために、大きなドキュメントを小さくて管理可能なピース、またはチャンクに分割するプロセスを指します。 GPT-4のようなほとんどの大規模な言語モデル(LLM)には一度に処理できるトークンの数に制限があるため、チャンクは、正確な検索に必要なコンテキストと意味を保持しながら、モデルが処理できるセクションにドキュメントが分割されることを保証します。
適切なチャンキングなしでは、ぼろきれパイプラインは重要な情報を逃したり、不完全でコンテキスト外の応答を提供したりする場合があります。目標は、意味を維持するのに十分な大きさであり、モデルの処理制限内に収まるほど小さいこととのバランスをとるチャンクを作成することです。適切に構造化されたチャンクは、検索システムがドキュメントの関連部分を正確に識別できるようにするのに役立ちます。これは、生成モデルが情報に基づいた応答を生成するために使用できるようにします。
チャンキングのために考慮すべき重要な要素
- チャンクのサイズ:各チャンクのサイズは、ラグパイプラインの効率にとって重要です。チャンクは、トークン(たとえば、チャンクあたり300トークン)または文(たとえば、チャンクあたり2〜5文)に基づいています。 GPT-4などのモデルの場合、トークンベースのチャンキングはトークンの制限が明示的であるため、よく機能しますが、文ベースのチャンキングはより良いコンテキストを提供する可能性があります。トレードオフは計算効率と意味の保存の間にあります。より小さなチャンクの処理はより速いですが、コンテキストを失う可能性がありますが、大きなチャンクはコンテキストを維持しますが、リスクはトークンの制限を超えています。
- コンテキストの保存:ドキュメントのセマンティックの完全性を維持するためには、チャンクが不可欠です。塊が文章中または論理セクションの途中で遮断された場合、検索および生成プロセスは貴重なコンテキストを失う可能性があります。セマンティックベースのチャンキングやスライディングウィンドウの使用などの手法は、各チャンクに完全な段落や完全な思考などの意味の単位が含まれるようにすることで、チャンク全体のコンテキストを維持するのに役立ちます。
- さまざまなモダリティの処理: RAGパイプラインは、テキスト、画像、表を含む場合があるマルチモーダルドキュメントを扱うことがよくあります。各モダリティには、さまざまなチャンク戦略が必要です。テキストは文またはトークンで分割できますが、テーブルと画像は、正しく取得して提示されるようにして、別々のチャンクとして扱う必要があります。モダリティ固有のチャンキングにより、貴重な情報を含む画像またはテーブルは、独立して保存および取得されますが、テキストと整合することが保証されます。
要するに、チャンクはテキストを断片にすることだけではありません。意味とコンテキストを保持し、複数のモダリティを処理し、モデルの制約に適合する適切なチャンクを設計することです。適切なチャンキング戦略は、検索精度とパイプラインによって生成された応答の品質の両方を大幅に改善できます。
ラグパイプラインのチャンキング戦略
効果的なチャンキングは、コンテキストを維持し、検索の精度を改善し、 RAGパイプラインの検索フェーズと生成フェーズ間のスムーズな相互作用を確保するのに役立ちます。以下では、さまざまなチャンク戦略をカバーし、それらを使用するタイミングを説明し、それらの利点と短所を調べます。
1。固定サイズのチャンキング
固定サイズのチャンキングは、通常、単語数、トークンカウント、または文字カウントで、定義済みのサイズのチャンクにドキュメントを分割します。
使用する時期:
シンプルで簡単なアプローチが必要な場合、ドキュメント構造は重要ではありません。小さく、複雑でないドキュメントを処理するときにうまく機能します。
利点:
- 実装しやすい。
- 一貫したチャンクサイズ。
- 計算するために速い。
短所:
- 文章や段落を破り、文脈を失う可能性があります。
- 意味を維持することが重要な文書には理想的ではありません。
def sixt_size_chunk(text、max_words = 100): words = text.split() return ['' .join(words [i:i max_words])の範囲(0、len(words)、 max_words)] #固定サイズのチャンクを適用します sixed_chunks = sixt_size_chunk(sample_text) sixed_chunksのチャンクの場合: 印刷(chunk、 '\ n --- \ n')
コード出力:これの出力と次のコードは、以下のようにサンプルテキストについて表示されます。最終結果は、考慮されるユースケースまたはドキュメントに基づいて異なります。
sample_text = "" " 導入 データサイエンスは、科学的方法、プロセスを使用する学際的な分野です。 構造化されたものから知識と洞察を抽出するアルゴリズム、およびシステム 非構造化データ。統計、コンピューターサイエンス、機械学習から引き出します。 パターンを発見し、予測するためのさまざまなデータ分析手法、および 実用的な洞察を導き出します。 データサイエンスは、ヘルスケア、ファイナンスなど、多くの業界に適用できます。 マーケティング、および教育、組織がデータ駆動型の決定を下すのに役立つ、 プロセスを最適化し、顧客の行動を理解します。 ビッグデータの概要 ビッグデータとは、増え続ける時点で成長する大規模で多様な情報セットを指します 料金。情報の量、速度または速度が含まれます 作成および収集され、データポイントの多様性または範囲は カバーされています。 データサイエンス方法 データサイエンスで使用されるいくつかの重要な方法があります。 1。回帰分析 2。分類 3。クラスタリング 4。ニューラルネットワーク データサイエンスの課題 - データ品質:データ品質の低下は、結論が誤っている可能性があります。 - データプライバシー:機密情報のプライバシーの確保。 - スケーラビリティ:大規模なデータセットを効率的に処理します。 結論 データサイエンスは引き続き多くの業界で原動力であり、洞察を提供します それはより良い決定と最適化された結果につながる可能性があります。それは進化のままです 最新の技術の進歩を組み込んだフィールド。 "" "
2。文ベースのチャンキング
この方法は、自然な文の境界に基づいてテキストをチャンクします。各チャンクには、セマンティックユニットを保存するセット数の文が含まれています。
使用する時期:
一貫したアイデアを維持することは非常に重要であり、中間の途中で分割すると意味が失われます。
利点:
- 文レベルの意味を保存します。
- より良いコンテキスト保存。
短所:
- 文の長さは異なるため、不均一なチャンクサイズ。
- 文章が長すぎると、モデルのトークン制限を超える可能性があります。
スパシーをインポートします nlp = spacy.load( "en_core_web_sm") def cente_chunk(テキスト): doc = nlp(テキスト) return [sent.text for sent in doc.sents] #文ベースのチャンキングの適用 cente_chunks = cente_chunk(sample_text) chank_chunksのチャンクの場合: 印刷(chunk、 '\ n --- \ n')
コード出力:
3。パラグラフベースのチャンキング
この戦略は、段落の境界に基づいてテキストを分割し、各段落をチャンクとして扱います。
使用する時期:
各段落に完全なアイデアまたは議論が含まれるレポートやエッセイなどの構造化されたドキュメントに最適です。
利点:
- 自然な文書セグメンテーション。
- 段落内でより大きなコンテキストを保存します。
短所:
- 段落の長さは異なり、不均一なチャンクサイズになります。
- 長い段落はまだトークンの制限を超える可能性があります。
def paragraph_chunk(テキスト): 段落= text.split( '\ n \ n') 段落を返します #段落ベースのチャンキングの適用 paragraph_chunks = paragraph_chunk(sample_text) パラグラフのチャンクの場合: 印刷(chunk、 '\ n --- \ n')
コード出力:
4。セマンティックベースのチャンキング
この方法では、機械学習モデル(変圧器など)を使用して、意味の意味に基づいてテキストをチャンクに分割します。
使用する時期:
複雑な技術文書など、最高レベルのコンテキストを保存することが重要です。
利点:
- 文脈的に意味のあるチャンク。
- 文間のセマンティックな関係をキャプチャします。
短所:
- 計算高価な高度なNLPモデルが必要です。
- 実装するのがより複雑です。
def semantic_chunk(text、max_len = 200): doc = nlp(テキスト) チャンク= [] current_chunk = [] doc.sentsで送信: current_chunk.append(sent.text) len( '' .join(current_chunk))> max_len: chunks.append( '' .join(current_chunk)) current_chunk = [] current_chunkの場合: chunks.append( '' .join(current_chunk)) チャンクを返します #セマンティックベースのチャンキングの適用 semantic_chunks = semantic_chunk(sample_text) semantic_chunksのチャンクの場合: 印刷(chunk、 '\ n --- \ n')
コード出力:
5。モダリティ固有のチャンキング
この戦略は、さまざまなコンテンツタイプ(テキスト、画像、表)を個別に処理します。各モダリティは、その特性に基づいて独立してチャンクされます。
使用する時期:
PDFSなどの多様なコンテンツタイプや、混合メディアを備えた技術マニュアルを含むドキュメントの場合。
利点:
- 混合メディアドキュメント用に合わせて。
- さまざまなモダリティのカスタム処理が可能になります。
短所:
- 実装および管理する複雑な。
- モダリティごとに異なる処理ロジックが必要です。
def modality_chunk(テキスト、画像=なし、表=なし): #この関数は、あなたが事前に処理されたテキスト、画像、およびテーブルを持っていることを前提としています text_chunks = paragraph_chunk(テキスト) return {'text_chunks':text_chunks、 'images':images、 'Tables':Tables} #モダリティ固有のチャンキングの適用 Modality_Chunks = modality_chunk(sample_text、images = ['img1.png']、tables = ['table1']) print(modality_chunks)
コード出力:サンプルテキストにはテキストモダリティのみが含まれていたため、以下に示すように1つのチャンクのみが取得されます。
6。スライディングウィンドウチャンキング
スライディングウィンドウチャンキングは重複するチャンクを作成し、各チャンクがコンテンツの一部を次のコンテンツと共有できるようにします。
使用する時期:
法律文書や学術文書など、チャンク間のコンテキストの継続性を確保する必要がある場合。
利点:
- チャンク全体にコンテキストを保存します。
- チャンク境界での情報損失を減らします。
短所:
- 複数のチャンクでコンテンツを繰り返すことにより、冗長性を導入する場合があります。
- より多くの処理が必要です。
def sliding_window_chunk(text、chunk_size = 100、overlap = 20): tokens = text.split() チャンク= [] 範囲(0、len(トークン)、chunk_size-オーバーラップ)のiの場合: chunk = '' .join(tokens [i:i chunk_size])) chunks.append(チャンク) チャンクを返します #スライドウィンドウチャンクの適用 sliding_chunks = sliding_window_chunk(sample_text) sliding_chunksのチャンクの場合: 印刷(chunk、 '\ n --- \ n')
コード出力:画像出力はオーバーラップをキャプチャしません。マニュアルテキスト出力も参照用に提供されています。テキストの重複に注意してください。
--- sliding_window_chunkの適用--- チャンク1: はじめにデータサイエンスは科学を使用する学際的な分野です 知識と洞察を抽出する方法、プロセス、アルゴリズム、およびシステム 構造化されたデータと非構造化データから。統計、コンピューターから引き出します 科学、機械学習、および発見するさまざまなデータ分析技術 パターン、予測を行い、実用的な洞察を導き出します。データサイエンスはできます ヘルスケア、財務、マーケティングなど、多くの業界に適用される、 そして、それが組織がデータ駆動型の決定を下すのに役立つ教育、最適化 プロセス、および顧客の行動を理解します。ビッグデータの概要ビッグデータは参照しています 増え続ける速度で成長する、大規模で多様な情報セットに。 情報の量、速度が含まれます -------------------------------------------------------------- チャンク2: 絶えず増加する速度で成長する大規模で多様な情報セットを指します。 情報の量、速度または速度が含まれます 作成および収集、およびカバーされるデータポイントの多様性または範囲。 データサイエンス方法データサイエンスに使用されるいくつかの重要な方法があります。 1。回帰分析2。分類3。クラスタリング4。ニューラルネットワーク データサイエンスの課題 - データ品質:データ品質の低下は 誤った結論。 - データプライバシー:敏感なプライバシーを確保します 情報。 - スケーラビリティ:大規模なデータセットを効率的に処理します。結論 データサイエンスは引き続き運転です -------------------------------------------------------------- チャンク3: 機密情報のプライバシーを確保します。 - スケーラビリティ:巨大な処理 データセットを効率的に。結論データサイエンスは引き続き原動力です 多くの業界では、より良い決定につながる可能性のある洞察を提供し、 最適化された結果。それは最新のものを組み込んだ進化する分野のままです 技術の進歩。 --------------------------------------------------------------
7。階層的なチャンク
階層的なチャンクは、セクション、サブセクション、段落などの複数のレベルでドキュメントを分解します。
使用する時期:
階層を維持することが不可欠な学術論文や法的テキストなどの高度に構造化された文書の場合。
利点:
- ドキュメント構造を保存します。
- 複数のレベルの粒度でコンテキストを維持します。
短所:
- 実装するのがより複雑です。
- 不均一なチャンクにつながる可能性があります。
def hierarchical_chunk(text、section_keywords): セクション= [] current_section = [] text.splitlines()の行の場合: 存在する場合(section_keywordsのキーワードのキーワード): current_sectionの場合: sections.append( "\ n" .join(current_section))) current_section = [line] それ以外: current_section.append(line) current_sectionの場合: sections.append( "\ n" .join(current_section))) セクションを返します #階層チャンキングの適用 section_keywords = ["はじめに"、 "概要"、 "メソッド"、 "結論"]] hierarchical_chunks = hierarchical_chunk(sample_text、section_keywords) hierarchical_chunksのチャンクの場合: 印刷(chunk、 '\ n --- \ n')
コード出力:
8。コンテンツに気をつけてチャンキング
この方法は、コンテンツの特性に基づいてチャンキングを適応させます(例えば、パラグラフレベルでのチャンキングテキスト、別々のエンティティとして表)。
使用する時期:
電子書籍や技術マニュアルなどの異種コンテンツを持つドキュメントの場合、チャンクはコンテンツの種類によって異なる必要があります。
利点:
- さまざまなコンテンツタイプに柔軟で適応可能。
- 複数の形式にわたるドキュメントの整合性を維持します。
短所:
- 複雑で動的なチャンキングロジックが必要です。
- 多様なコンテンツ構造を持つドキュメントの実装が困難です。
def content_aware_chunk(テキスト): チャンク= [] current_chunk = [] text.splitlines()の行の場合: if line.startswith(( '##'、 '###'、 'introdution'、 '結論')): current_chunkの場合: chunks.append( '\ n'.join(current_chunk)) current_chunk = [line] それ以外: current_chunk.append(line) current_chunkの場合: chunks.append( '\ n'.join(current_chunk)) チャンクを返します #コンテンツアウェアチャンクの適用 content_chunks = content_aware_chunk(sample_text) content_chunksのチャンクの場合: 印刷(chunk、 '\ n --- \ n')
コード出力:
9。テーブルアウェアチャンク
この戦略は、それらを独立したチャンクとして抽出し、それらをMarkdownやJSONなどの形式に変換して処理を容易にすることにより、ドキュメントテーブルを具体的に処理します
使用する時期:
財務報告や技術文書などの表形式データを含む文書の場合、テーブルには重要な情報が含まれています。
利点:
- 効率的なダウンストリーム処理のためにテーブル構造を保持します。
- 表形式データの独立した処理が可能になります。
短所:
- 変換中にフォーマットが失われる可能性があります。
- 複雑な構造を持つテーブルの特別な取り扱いが必要です。
PDとしてパンダをインポートします def table_aware_chunk(テーブル): table.to_markdown()を返す #サンプルテーブルデータ 表= pd.dataframe({ 「名前」:[「ジョン」、「アリス」、「ボブ」]、 「年齢」:[25、30、22]、 「職業」:[「エンジニア」、「ドクター」、「アーティスト」] }) #テーブルアウェアチャンクの適用 table_markdown = table_aware_chunk(テーブル) 印刷(table_markdown)
コード出力:この例では、テーブルが考慮されました。テーブルのみがコード出力に充電されていることに注意してください。
10。トークンベースのチャンキング
トークンベースのチャンキングは、単語や文ではなく、固定数のトークンに基づいてテキストを分割します。 NLPモデル(たとえば、Faceの変圧器を抱きしめる)のトークンザーを使用します。
使用する時期:
トークン制限を備えたトランスベースのモデルなど、トークンで動作するモデル(GPT-3またはGPT-4など)。
利点:
- トランスベースのモデルでうまく機能します。
- トークンの制限が尊重されることを保証します。
短所:
- トークン化は、文章を分割したり、コンテキストを破壊したりする場合があります。
- 常に自然言語の境界と整合するとは限りません。
変圧器からインポートgpt2tokenizer tokenizer = gpt2tokenizer.from_pretrained( "gpt2") def token_based_chunk(text、max_tokens = 200): tokens = tokenizer(text)["input_ids"] chunks = [tokens [i:i max_tokens] for i in range(0、len(tokens)、max_tokens)]]]] チャンクのチャンクのために[tokenizer.decode(チャンク)を返す] #トークンベースのチャンキングの適用 token_chunks = token_based_chunk(sample_text) token_chunksのチャンクの場合: 印刷(chunk、 '\ n --- \ n')
コード出力
11。エンティティベースのチャンキング
エンティティベースのチャンキングレバレッジという名前のエンティティ認識(NER)という名前のレバレッジは、人、組織、場所などの認識されたエンティティに基づいてテキストをチャンクに分割します。
使用する時期:
特定のエンティティが履歴書、契約、法律文書などのコンテキスト単位として維持するために重要な文書の場合。
利点:
- 名前のエンティティをそのままにしておきます。
- 関連するエンティティに焦点を当てることにより、検索の精度を向上させることができます。
短所:
- 訓練されたNERモデルが必要です。
- エンティティは重複する可能性があり、複雑な塊の境界につながる可能性があります。
def entity_based_chunk(テキスト): doc = nlp(テキスト) entities = [ent.text for ent in doc.ents] リターンエンティティ #エンティティベースのチャンキングの適用 entity_chunks = entity_based_chunk(sample_text) print(entity_chunks)
コード出力:この目的のために、入力の特定のNERモデルをトレーニングすることが理想的な方法です。
12。トピックベースのチャンキング
この戦略は、テキストをセグメント化するために、Latent Dirichlet割り当て(LDA)やその他のトピックモデリングアルゴリズムなどの手法を使用して、トピックに基づいてドキュメントを分割します。
使用する時期:
ニュース記事、研究論文、多様な主題を含むレポートなど、複数のトピックをカバーするドキュメント。
利点:
- グループに関連するグループ。
- 特定のトピックに基づいて、集中的な検索に役立ちます。
短所:
- 追加の処理(トピックモデリング)が必要です。
- 短いドキュメントや重複するトピックでは正確ではない場合があります。
sklearn.feature_extraction.textからImport countvectorizerから sklearn.decompositionからインポートlatentdirichletallocationから npとしてnumpyをインポートします def topic_based_chunk(text、num_topics = 3): #テキストをチャンキングのために文に分割します 文= text.split( '。') #文章をvectorizeします vectorizer = countvectorizer() cente_vectors = vectorizer.fit_transform(sentences) #トピックモデリングにLDAを適用します LDA = latentdirichletallocation(n_components = num_topics、random_state = 42) lda.fit(cente_vectors) #トピックワード分布を取得します topic_word = lda.components_ vocabulary = vectorizer.get_feature_names_out() #各トピックの一番の単語を特定します トピック= [] topic_idxの場合、トピックの列挙(topic_word): top_words_idx = topic.argsort()[:-6:-1] topic_keywords = [vocabulary [i] for top_words_idx] topics.append( "topic {}:{}"。format(topic_idx 1、 '、' .jein(topic_keywords)))) #トピックでチャンクを生成します chunks_with_topics = [] 私の場合、列挙の文(文): topic_assignments = lda.transform(vectorizer.transform([cente]))) assigned_topic = np.argmax(topic_assignments) chunks_with_topics.append((topics [assigned_topic]、cente))) chunks_with_topicsを返します #トピックベースのチャンクを取得します topic_chunks = topic_based_chunk(sample_text、num_topics = 3) #結果を表示します トピックについては、topic_chunksのchunk: print(f "{トピック}:{chunk} \ n")
コード出力:
13。ページベースのチャンキング
このアプローチは、各ページがチャンクとして扱われるPDFまたはフォーマットされたドキュメントに一般的に使用されるページ境界に基づいてドキュメントを分割します。
使用する時期:
PDFSや印刷対応のレポートなどのページ指向のドキュメントの場合、ページの境界がセマンティックの重要性を持っています。
利点:
- PDFドキュメントで簡単に実装できます。
- ページの境界を尊重します。
短所:
- ページは自然なテキストブレークに対応できない場合があります。
- コンテキストはページ間で失われる可能性があります。
def page_based_chunk(ページ): #前処理されたページリストに基づいて分割(PDFページテキストのシミュレーション) ページを返します #サンプルページ pages = ["Page 1 content"、 "Page 2 Content"、 "Page 3 Content"]]] #ページベースのチャンキングの適用 page_chunks = page_based_chunk(ページ) page_chunksのチャンクの場合: 印刷(chunk、 '\ n --- \ n')
コード出力:サンプルテキストにはページ番号に基づいて分離がないため、このスニペットのコード出力は範囲外です。読者はコードスニペットを撮影し、ドキュメントで試して、ページベースのチャンク出力を取得できます。
14。キーワードベースのチャンキング
この方法は、トピックシフト(「はじめに」、「結論」などを示す事前定義されたキーワードまたはフレーズに基づいてドキュメントをチャンクします。
使用する時期:
科学論文や技術仕様など、明確な構造に従う文書に最適です。
利点:
- キーワードに基づいて自然なトピックブレークをキャプチャします。
- 構造化されたドキュメントに適しています。
短所:
- 定義されたキーワードのセットが必要です。
- 構造化されていないテキストに適応できません。
def keyword_based_chunk(テキスト、キーワード): チャンク= [] current_chunk = [] text.splitlines()の行の場合: 存在する場合(キーワードのキーワードのキーワードの並んでいます): current_chunkの場合: chunks.append( '\ n'.join(current_chunk)) current_chunk = [line] それ以外: current_chunk.append(line) current_chunkの場合: chunks.append( '\ n'.join(current_chunk)) チャンクを返します #キーワードベースのチャンキングの適用 キーワード= ["はじめに"、 "概要"、「結論 "、「メソッド」、「課題」]] keyword_chunks = keyword_based_chunk(sample_text、keywords) keyword_chunksのチャンクの場合: 印刷(chunk、 '\ n --- \ n')
コード出力:
15。ハイブリッドチャンク
ハイブリッドチャンキングは、コンテンツの種類とドキュメント構造に基づいて複数のチャンキング戦略を組み合わせています。たとえば、テキストは文によって充電されますが、テーブルと画像は個別に処理されます。
使用する時期:
技術レポート、ビジネスドキュメント、製品マニュアルなど、さまざまなコンテンツタイプを含む複雑なドキュメントの場合。
利点:
- 多様なドキュメント構造に非常に適応可能。
- さまざまなコンテンツタイプを粒状制御できます。
短所:
- 実装するのがより複雑です。
- 各コンテンツタイプを処理するためのカスタムロジックが必要です。
def hybrid_chunk(テキスト): パラグラフ= paragraph_chunk(テキスト) hybrid_chunks = [] 段落の段落について: hybrid_chunks = cente_chunk(段落) hybrid_chunksを返します #ハイブリッドチャンクの適用 hybrid_chunks = hybrid_chunk(sample_text) hybrid_chunksのチャンクの場合: 印刷(chunk、 '\ n --- \ n')
コード出力:
ボーナス:ノートブック全体が、読者がコードを使用し、チャッキング出力を簡単に視覚化できるようにしています(ノートブックリンク)。自由に閲覧して、これらの戦略を試して、次のRAGアプリケーションを構築してください。
次に、いくつかのチャンキングトラフのオフを検討し、ユースケースシナリオについてアイデアを得ようとします。
さまざまなシナリオの最適化
検索された生成(RAG)パイプラインを構築する場合、特定のユースケースとドキュメントタイプのチャンキングを最適化することが重要です。さまざまなシナリオには、ドキュメントのサイズ、コンテンツの多様性、取得速度に基づいて要件が異なります。これらの要因に基づいて、いくつかの最適化戦略を検討しましょう。
大規模なドキュメントのチャンク
アカデミックペーパー、法的テキスト、または政府のレポートなどの大規模な文書は、多くの場合数百ページにまたがって、多様な種類のコンテンツ(テキスト、画像、表、脚注)を含んでいます。このような文書のチャンキング戦略は、関連するコンテキストのキャプチャをキャプチャすることと、高速かつ効率的な検索のためにチャンクサイズを管理しやすくすることとのバランスをとる必要があります。
重要な考慮事項:
- セマンティックの凝集:文ベース、パラグラフベース、または階層的チャンクなどの戦略を使用して、セクション全体でコンテキストを保持し、セマンティックコヒーレンスを維持します。
- モダリティ固有の取り扱い:表、図、または画像を備えた法的文書の場合、モダリティ固有およびテーブル認識チャンキング戦略により、重要な非テキスト情報が失われないようにします。
- コンテキストの保存:条項間のコンテキストが重要な法的文書の場合、スライディングウィンドウチャンキングは継続性を確保し、重要なセクションを壊すことを防ぐことができます。
大規模な文書のための最良の戦略:
- 階層的なチャンキング:ドキュメント構造のさまざまなレベルにわたってコンテキストを維持するために、ドキュメントをセクション、サブセクション、および段落に分割します。
- スライディングウィンドウチャンク:テキストの重要な部分がチャンク間で失われないようにし、重複するセクションの間にコンテキスト流体を維持します。
ユースケースの例:
- 法的文書の検索:法的調査のために構築されたRAGシステムは、スライド窓または階層的なチャンキングに優先順位を付けて、条項と法的先例が正確かつまとまりに取得されるようにする可能性があります。
チャンクサイズ、検索速度、精度の間のトレードオフ
チャンクのサイズは、検索速度と結果の精度の両方に直接影響します。より大きなチャンクは、より多くのコンテキストを維持する傾向があり、検索の精度を改善しますが、より多くのメモリと計算が必要なため、システムを遅くすることができます。逆に、小さなチャンクは、より速い検索を可能にしますが、重要な文脈情報を失うリスクがあります。
キートレードオフ:
- より大きなチャンク(例:500-1000トークン):より多くのコンテキストを保持し、特に複雑な質問に対して、ラグパイプラインでより正確な応答につながります。ただし、検索プロセスを遅くし、推論中により多くのメモリを消費する場合があります。
- 小さいチャンク(例:100〜300トークン):検索のより速いとメモリの使用量が少ないが、重要な情報がチャンク全体に分割されるため、潜在的に低い精度を分ける可能性があります。
最適化戦術:
- スライドウィンドウチャンク:小さなチャンクの利点とコンテキストの保存を組み合わせて、重複するコンテンツが速度を失うことなく精度を向上させることを保証します。
- トークンベースのチャンキング:トークン制限があるトランスモデルを操作する場合に特に重要です。検索を効率的に保ちながら、チャンクがモデルの制約に適合するようにします。
ユースケースの例:
- 高速FAQシステム:FAQシステムなどのアプリケーションでは、質問が短く、速度が深いセマンティック理解よりも優先されるため、小さなチャンク(トークンベースまたは文ベース)が最適に機能します。検索速度が主な関心事であるため、この場合、より低い精度のトレードオフは許容されます。
さまざまな戦略のユースケース
各チャンキング戦略は、さまざまな種類のドキュメントと検索シナリオに適合するため、特定の方法をいつ使用するかを理解することで、ラグパイプラインのパフォーマンスを大幅に改善できます。
小さなドキュメントまたはFAQ
FAQやカスタマーサポートページなどの小さなドキュメントの場合、検索速度が最重要であり、完全なコンテキストを維持する必要はありません。文ベースのチャンキングやキーワードベースのチャンキングなどの戦略はうまく機能します。
- 戦略:文ベースのチャンキング
- ユースケース: FAQ検索。ここでは、迅速で短い回答が標準であり、コンテキストは長い通路に及ぶことはありません。
ロングフォームドキュメント
研究論文や法的文書などの長い形式の文書の場合、コンテキストがさらに重要であり、セマンティックまたは階層境界の境界による分解が重要になります。
- 戦略:階層的またはセマンティックベースのチャンキング
- ユースケース:法的文書検索。条項または引用の正確な検索を確保することが重要です。
混合コンテンツドキュメント
画像、テーブル、テキストなどの混合コンテンツタイプ(科学レポートなど)のドキュメントでは、各タイプのコンテンツが最適な結果のために個別に処理されるようにするために、モダリティ固有のチャンキングが重要です。
- 戦略:モダリティ固有またはテーブル認識チャンキング
- ユースケース:科学レポートで、テーブルと図がドキュメントの情報に重要な役割を果たす場所。
マルチトピックドキュメント
電子書籍やニュース記事などの複数のトピックやセクションをカバーするドキュメントは、トピックベースのチャンキング戦略の恩恵を受けます。これにより、各チャンクが一貫したトピックに焦点を当てることが保証されます。これは、特定のトピックを取得する必要があるユースケースに最適です。
- 戦略:トピックベースのチャンキング
- ユースケース:ニュース検索またはマルチトピックの研究論文。各チャンクは、正確でトピック固有の検索のために焦点を絞ったトピックを中心に展開します。
結論
このブログでは、検索された世代(RAG)パイプライン内のチャンキングの重要な役割を掘り下げました。チャンクは、大きなドキュメントを小さくて管理可能な部分に変換する基礎プロセスとして機能し、モデルが関連情報を効率的に取得および生成できるようにします。各チャンク戦略には、独自の利点と短所が提示されているため、特定のユースケースに基づいて適切な方法を選択することが不可欠です。さまざまな戦略が検索プロセスにどのように影響するかを理解することにより、RAGシステムのパフォーマンスを最適化できます。
適切なチャンキング戦略を選択すると、ドキュメントタイプ、コンテキストの保存の必要性、検索速度と精度のバランスなど、いくつかの要因に依存します。アカデミックペーパー、法的文書、または混合コンテンツファイルを使用している場合でも、適切なアプローチを選択すると、RAGパイプラインの有効性が大幅に向上する可能性があります。チャンキング方法を反復して改良することにより、ドキュメントの種類とユーザーのニーズの変更に適応し、検索システムが堅牢で効率的なままであることを確認できます。
キーテイクアウト
- 適切なチャンキングは、RAGシステムの検索精度とモデル効率を向上させるために不可欠です。
- ドキュメントの種類と複雑さに基づいてチャンク戦略を選択して、効果的な処理を確保します。
- メソッドを選択する際のチャンクサイズ、検索速度、および精度の間のトレードオフを検討してください。
- FAQ、アカデミックペーパー、混合コンテンツドキュメントなどの特定のアプリケーションにチャンク戦略を適合させます。
- 進化する文書のニーズとユーザーの期待を満たすために、チャンク戦略を定期的に評価および改良します。
よくある質問
Q 1。NLPのチャンキングテクニックは何ですか?A. NLPのチャンキングテクニックには、コンテキストと関連性を維持しながら、処理効率を高めるために、大きなテキストをより小さく管理可能な部分に分解することが含まれます。
Q 2。ドキュメントに適したチャンク戦略を選択するにはどうすればよいですか?A.チャンク戦略の選択は、ドキュメントの種類、その構造、特定のユースケースなど、いくつかの要因に依存します。 For example, fixed-size chunking might be suitable for smaller documents, while semantic-based chunking is better for complex texts requiring context preservation. Evaluating the pros and cons of each strategy will help determine the best approach for your specific needs.
Q 3. Can chunking strategies affect the performance of a RAG pipeline?A. Yes, the choice of chunking strategy can significantly impact the performance of a RAG pipeline. Strategies that preserve context and semantics, such as semantic-based or sentence-based chunking, can lead to more accurate retrieval and generation results. Conversely, methods that break context (eg, fixed-size chunking) may reduce the quality of the generated responses, as relevant information may be lost between chunks.
Q4。 How do chunking techniques improve RAG pipelines?A. Chunking techniques improve RAG pipelines by ensuring that only meaningful information is retrieved, leading to more accurate and contextually relevant responses.
Q. What is Chunking in RAG?A. Retrieval-Augmented Generation (RAG) pipelines, chunking is the process of breaking down large documents into smaller, manageable pieces (chunks). This is necessary because large language models (LLMs) have token limits. Chunking ensures the model can handle the text while preserving context and meaning for accurate retrieval and response generation.
The media shown in this article is not owned by Analytics Vidhya and is used at the Author's discretion.
以上が例外的なラグシステムを構築するための15のチャンキングテクニックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











メタのラマ3.2:マルチモーダルとモバイルAIの前進 メタは最近、ラマ3.2を発表しました。これは、モバイルデバイス向けに最適化された強力なビジョン機能と軽量テキストモデルを特徴とするAIの大幅な進歩です。 成功に基づいてo

ねえ、忍者をコーディング!その日はどのようなコーディング関連のタスクを計画していますか?このブログにさらに飛び込む前に、コーディング関連のすべての問題について考えてほしいです。 終わり? - &#8217を見てみましょう

今週のAIの風景:進歩、倫理的考慮、規制の議論の旋風。 Openai、Google、Meta、Microsoftのような主要なプレーヤーは、画期的な新しいモデルからLEの重要な変化まで、アップデートの急流を解き放ちました

Shopify CEOのTobiLütkeの最近のメモは、AIの能力がすべての従業員にとって基本的な期待であると大胆に宣言し、会社内の重大な文化的変化を示しています。 これはつかの間の傾向ではありません。これは、pに統合された新しい運用パラダイムです

導入 Openaiは、待望の「Strawberry」アーキテクチャに基づいて新しいモデルをリリースしました。 O1として知られるこの革新的なモデルは、推論能力を強化し、問題を通じて考えられるようになりました

導入 鮮やかな絵画や彫刻に囲まれたアートギャラリーを歩くことを想像してください。さて、各ピースに質問をして意味のある答えを得ることができたらどうでしょうか?あなたは尋ねるかもしれません、「あなたはどんな話を言っていますか?

SQLの変更テーブルステートメント:データベースに列を動的に追加する データ管理では、SQLの適応性が重要です。 その場でデータベース構造を調整する必要がありますか? Alter Tableステートメントはあなたの解決策です。このガイドの詳細は、コルを追加します

私のコラムに新しいかもしれない人のために、具体化されたAI、AI推論、AIのハイテクブレークスルー、AIの迅速なエンジニアリング、AIのトレーニング、AIのフィールディングなどのトピックなど、全面的なAIの最新の進歩を広く探求します。
