Paddlenlp は Windows でローカルにセマンティック検索システムを構築します

Paddlenlp は Windows でローカルにセマンティック検索システムを構築します

1. 動作環境

  1. ソフトウェア環境:
  • Python >= 3.8.16

  • パドレンLP = 2.5.2

  • パドルパドル-GPU =2.4.2.post112

  • パドルOCR = 2.6.1.3

  • numpy = 1.24.3

  • opencv-contrib-python =4.6.0.66

  • CUDA バージョン: 11.2

  • cuDNN バージョン 8.2

  • win11

  1. ハードウェア環境:
  • NVIDIA RTX 3050 4GB

  • 第 11 世代インテル® Core™ i7-11800H @ 2.30 GHz 2.30 GHz

  1. 依存インストール:

    まずPaddlePaddleをインストールする必要があります。PaddlePaddleのインストールについては公式のインストールドキュメントを参照してください。

    次の依存関係をインストールします。

    git clone https://github.com/tvst/htbuilder.git
    cd htbuilder/
    python setup install
    

    パイプラインのソースコードをダウンロードします。

    # pip 一键安装
    pip install --upgrade paddle-pipelines -i https://pypi.tuna.tsinghua.edu.cn/simple
    # 或者源码进行安装最新版本
    cd ${
          
          HOME}/PaddleNLP/pipelines/
    pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    python setup.py install
    
    # 下载pipelines源代码
    git clone https://github.com/PaddlePaddle/PaddleNLP.git
    cd PaddleNLP/pipelines
    

    [注意] 以下の処理はすべてパイプラインのルートディレクトリで実行するだけでよく、ディレクトリにジャンプする必要はありません。

2. データの説明

Paddlenlp には、DuReader-Robust データ セットに基づいてセマンティック検索システムを構築するためのプリセット コード サンプルが用意されており、次のコマンドを通じてセマンティック検索システムの効果をすぐに体験できます (GPU を推奨)

python examples/semantic-search/semantic_search_example.py --device gpu

CPU マシンしか持っていない場合は、Paddle の CPU バージョンをインストールした後、--device パラメーターで CPU を指定できますが、実行には時間がかかります。

python examples/semantic-search/semantic_search_example.py --device cpu

3. Web視覚的意味検索システムの構築

  1. ANNサービスを開始する

    1. elasticsearch-8.3.2をダウンロード、インストール、解凍するには、公式ドキュメントを参照してください

    2. ES サービスを開始し、xpack.security.enabled次のように false に設定します。

      pack.security.enabled: false
      

      見つからない場合は、elasticsearch/config ディレクトリの elasticsearch.yml に手動で追加できます。

      次に、bin ディレクトリ内の elasticsearch.bat をダブルクリックして開始します。

    3. ES サービスが正常に開始されていることを確認します。

      curl http://localhost:9200/_aliases?pretty=true
      

      注: ES サービスのデフォルトの開始ポートは 9200 です。

  2. 文書データはANNインデックスライブラリに書き込まれます

    # 以DuReader-Robust 数据集为例建立 ANN 索引库
    python utils/offline_ann.py --index_name dureader_robust_query_encoder --doc_dir data/dureader_dev
    

    パラメータの意味の説明

    • index_name: インデックスの名前
    • doc_dir: txtテキストデータのパス
    • host: ElasticsearchのIPアドレス
    • port: Elasticsearchのポート番号
    • delete_index: 既存のインデックスとデータを削除するかどうか。ES データをクリアするために使用されます。デフォルトは false です。

    次のコマンドを使用してデータを表示できます。

    # 打印几条数据
    curl http://localhost:9200/dureader_robust_query_encoder/_search
    
  3. Rest API モデル サービスを開始する

    # 指定语义检索系统的Yaml配置文件,Linux/macos
    export PIPELINE_YAML_PATH=rest_api/pipeline/semantic_search.yaml
    # 指定语义检索系统的Yaml配置文件,Windows powershell
    $env:PIPELINE_YAML_PATH='rest_api/pipeline/semantic_search.yaml'
    # 使用端口号 8891 启动模型服务
    python rest_api/application.py 8891
    

    開始後、curl コマンドを使用して、正常に実行されるかどうかを確認できます。

    curl -X POST -k http://localhost:8891/query -H 'Content-Type: application/json' -d '{"query": "衡量酒水的价格的因素有哪些?","params": {"Retriever": {"top_k": 5}, "Ranker":{"top_k": 5}}}'
    
  4. WebUIを開始する

    # 配置模型服务地址, Linux/macos
    export API_ENDPOINT=http://127.0.0.1:8891
    # 配置模型服务地址, windows
    $env:API_ENDPOINT='http://127.0.0.1:8891'
    # 在指定端口 8502 启动 WebUI
    python -m streamlit run ui/webapp_semantic_search.py --server.port 8502
    

    次に、ブラウザでhttp://127.0.0.1:8502にアクセスします。

建設の過程でいくつかの落とし穴がありました。

意味検索システムはスムーズに動作しますが、ターミナル出力の文字化けが発生します。

  • 次のコマンドを使用して、オペレーティング システムのデフォルトのエンコードを zh_CN.UTF-8 に設定します。

    export LANG=zh_CN.UTF-8
    

faiss がインストールされているにもかかわらず、faiss が見つからないと表示される場合はどうすればよいですか?

別途 anaconda を使用してインストールすることをお勧めします (インストールチュートリアルについてはfaissを参照してください)。

# CPU-only version
conda install -c pytorch faiss-cpu

# GPU(+CPU) version
conda install -c pytorch faiss-gpu

パイプライン内のプリセット モデルを置き換えるにはどうすればよいですか?

システムプリセットモデルを置き換えた後は、モデルが異なるため、インデックスを再構築し、関連する設定ファイルを変更する必要があります。セマンティック インデックス作成を例にとると、2 か所を変更する必要があります。1 つ目はutils/offline_ann.py、もう 1 つは でrest_api/pipeline/semantic_search.yaml、再実行します。

最初に変更しますutils/offline_ann.py:

python utils/offline_ann.py --index_name dureader_robust_base_encoder \
                            --doc_dir data/dureader_dev \
                            --query_embedding_model rocketqa-zh-base-query-encoder \
                            --passage_embedding_model rocketqa-zh-base-para-encoder \
                            --embedding_dim 768 \
                            --delete_index

次に、rest_api/pipeline/semantic_search.yamlファイルを変更します。

components:    # define all the building-blocks for Pipeline
  - name: DocumentStore
    type: ElasticsearchDocumentStore  # consider using MilvusDocumentStore or WeaviateDocumentStore for scaling to large number of documents
    params:
      host: localhost
      port: 9200
      index: dureader_robust_base_encoder # 修改索引名
      embedding_dim: 768   # 修改向量的维度
  - name: Retriever
    type: DensePassageRetriever
    params:
      document_store: DocumentStore    # params can reference other components defined in the YAML
      top_k: 10
      query_embedding_model: rocketqa-zh-base-query-encoder  # 修改Retriever的query模型名
      passage_embedding_model: rocketqa-zh-base-para-encoder # 修改 Retriever的para模型
      embed_title: False
  - name: Ranker       # custom-name for the component; helpful for visualization & debugging
    type: ErnieRanker    # pipelines Class name for the component
    params:
      model_name_or_path: rocketqa-base-cross-encoder  # 修改 ErnieRanker的模型名
      top_k: 3

次に、再実行します。

# 指定语义检索系统的Yaml配置文件
export PIPELINE_YAML_PATH=rest_api/pipeline/semantic_search.yaml
# 使用端口号 8891 启动模型服务
python rest_api/application.py 8891

エラスティック検索ログにエラーが表示されるexception during geoip databases update

config/elasticsearch.yml を編集し、最後に以下を追加する必要があります。

ingest.geoip.downloader.enabled: false

Windows でフロントエンドを実行するとエラーが発生するrequests.exceptions.MissingSchema: Invalid URL 'None/query': No scheme supplied. Perhaps you meant http://None/query?

環境変数が有効になりません。環境変数をチェックして、PIPELINE_YAML_PATH と API_ENDPOINT が有効になっていることを確認してください。

方法: poweshell ターミナルを開き、次のように入力します。

$env:PIPELINE_YAML_PATH='rest_api/pipeline/semantic_search.yaml'
$env:API_ENDPOINT='http://127.0.0.1:8891'

Windows でアプリケーションを実行すると、次のエラーが発生しました。RuntimeError: (NotFound) Cannot open file C:\Users\my_name/.paddleocr/whl\det\ch\ch_PP-OCRv3_det_infer/inference.pdmodel, please confirm whether the file is normal.

これが、Windows システム ユーザーの名前が中国語で付けられる理由です。詳細な解決策については、この問題を参照してください。https://github.com/PaddlePaddle/PaddleNLP/issues/3242

バックグラウンド プログラムの実行中にエラーが発生しました:Exception: Failed loading pipeline component 'DocumentStore': RequestError(400, 'illegal_argument_exception', 'Mapper for [embedding] conflicts with existing mapper:\n\tCannot update parameter [dims] from [312] to [768]')

セマンティック検索を例にとると、これはモデルの次元が正しくないことが原因です。elastic searchテキスト ベクトルの次元がsemantic_search.yaml内にDocumentStore設定された次元と一致しているかどうかを確認してくださいembedding_dim。一致していない場合は、utils/offline_ann.pyインデックス構築メソッドを再利用してください。つまり、インデックスの構築に使用されるモデルがsemantic_search.yamlモデル セットと一致していることを確認してください。

注: 変更後にインデックスを再構築する場合は、必ず最初に以前のインデックスをすべて削除してください。そうしないと、インデックスが無効になります。次のコマンドを実行できます。

curl -XDELETE http://localhost:9200/dureader_robust_query_encoder

おすすめ

転載: blog.csdn.net/Jin1Yang/article/details/131093110