導入
開発者とデータアナリストがモデルを評価する方法を完全に変える可能性のあるPythonパッケージを作成しようとしていると想像してください。この旅行は、さまざまなメトリックやエッジの状況を管理できる柔軟なぼろきれ評価ツールである、簡単な概念から始まります。詩でパッケージを初期化することから、堅実な評価者クラスを作成し、この投稿に飛び込むときにコードをテストすることになります。パッケージの作成方法、BLEUとRougeのスコアを計算し、オンラインで投稿する方法に関する知識を得ることができます。最後に、一般の人々が使用できる作業ツールを持っていることに加えて、Pythonパッケージングとオープンソースの貢献について、より多くの洞察を得ることができます。
学習成果
- 詩を使用してPythonパッケージを初期化して構成することを学びます。
- 複数のメトリックの評価クラスを開発および実装します。
- BleuやRougeスコアなどのメトリックを計算して評価します。
- テストを書き込み、実行して、コード機能と堅牢性を確保します。
- 分配やライセンスの取り扱いなど、PythonパッケージをPypiに構築および公開します。
この記事は、データサイエンスブログソンの一部として公開されました。
目次
- 詩でパッケージを初期化します
- コア評価者クラスの設計
- 評価者クラスの定義
- 評価メトリックの実装
- BLEUスコアの計算
- ルージュスコアの測定
- パッケージをテストします
- ホイールを構築します
- ソースおよびバイナリ分布の作成
- パッケージを公開します
- よくある質問
詩でパッケージを初期化します
これで、詩を使用して新しいPythonパッケージを初期化することから始めることができます。詩を選ぶ理由は次のとおりです。
- 複数の仮想環境を管理する必要性を削除します。
- ネイティブパッケージとレガシーパッケージの両方のあらゆる種類のPythonパッケージ形式をサポートしています。
- `poetry.lock`ファイルを介した依存関係でも適切なバージョンを保証します。
- Pypiは単一のコマンドで準備ができています。
ほぼすべてのOSのコマンドを使用して詩をインストールします。
curl -ssl https://install.python-poetry.org | Python3-
次に、次のコマンドを使用して、ボイラープレートを使用して新しいリポジトリを作成できます。
詩new package_name
Enterを押してデフォルトとして残すことができる一般的な質問はほとんどありません。次に、これに似たフォルダー構造に着地します。
詩 - デモ pyproject.toml ├├。Readme.md poety_demo │└ク。__init__.py tests └└。。__init__.py
構造は問題ありませんが、公式のPythonドキュメントで説明されている「フラット」レイアウトと比較して「SRC」レイアウトを使用できます。ブログの残りの部分では、「SRC」レイアウトに従うことになります。
コア評価者クラスの設計
パッケージの中心には、Python Evaluatorパッケージに電源を入れるすべてのソースコードが含まれています。これには、私たちが望むすべてのメトリックによって継承される基本クラスが含まれています。したがって、このクラスは、建設中に最も堅牢で最大限の注意を払わなければなりません。このクラスには、基本的な初期化に必要なロジック、メトリックの結果を取得する方法、およびユーザー入力を処理するための別の方法が容易に消耗品を使用するための別の方法があります。
これらのすべての方法では、独自の範囲と適切なデータ型を定義する必要があります。データ型にもっと焦点を合わせる理由は、Pythonが動的にタイプされているためです。したがって、これらは実行時にのみエラーを引き起こすため、変数を適切に使用する必要があります。そのため、専用のタイプチェックコンパイラを使用するのではなく、これらの微細なエラーをキャッチするためのテストスイートが必要です。 Pythonで適切なタイピングを使用する場合は、よく適しています。
評価者クラスの定義
これで、すべての評価者クラスが含まれている必要があるものと、それが最も重要な理由を見たので、同じものの実装に残されています。このクラスを構築するために、Pythonが提供するABC - 抽象的な基本クラスを継承しています。このクラスを選択する理由は、評価者の基本クラスを構築できるすべての具体的な機能が含まれているためです。次に、評価者クラスの入力と出力を定義しましょう。
- 入力:候補者[文字列のリスト]、参照[文字列のリスト]
- 方法:「パディング」(候補者と参照の長さが同じであることを確認するため)、「get_score」(評価メトリックの最終結果を計算する方法)
#src/evaluator_blog/evaluator.py 警告をインポートします インポートユニオンのタイピングから、リスト ABCインポートABCから、AbstractMethod クラスBaseeValuator(ABC): def __init __(self、bestondates:list、references:list) - > none:none:none: self.candidates =候補 self.References =参照 @StaticMethod defパディング( 候補者:リスト[str]、参照:リスト[str] ) - > union [list [str]、list [str]]: """_まとめ_ args: 候補者(リスト[STR]):LLMから生成された応答 参照(リスト[str]):測定する応答 返品: Union [list [str]、list [str]]:「候補者」と「参照」の等しい長さを保証します "" " _msg = str( "" " 参照と候補者の長さ(仮説)は同じではありません。 "" " )) 警告.warn(_msg) max_length = max(len(候補者)、len(参照)) 候補者dextend([""] *(max_length -len(候補者))) references.extend([""] *(max_length -len(references)))) 候補者、参照を返します @StaticMethod def list_to_string(l:list) - > str: アサート( len(l)> = 1 )、「メッセージの長さが1以上であることを確認してください」 return str(l [0]) @AbstractMethod def get_score(self) - > float: "" " スコア関数の最終結果を計算する方法。 返品: 選択した評価メトリックの浮動小数点値。 "" "
ここでは、 `__init()__`メソッドには、評価者メトリックの候補と参照の基本要件である必要なパラメーターが含まれていることがわかります。
次に、「候補者」と「参照」の両方が、コールするたびにこれを初期化する必要がないため、「候補」と「参照」の両方が静的メソッドとして定義された同じ長さを含むために必要なパディングです。したがって、staticmethodデコレータには必要なロジックが含まれています。
最後に、 `get_score()`の場合、abstractMethodデコレータを使用します。つまり、ベース評価者クラスを継承するすべてのクラスには間違いなくこの方法が含まれている必要があります。
評価メトリックの実装
これで、ライブラリの実装、メトリックの評価の中心があります。現在、計算には、タスクを実行し、メトリックスコアを表示するそれぞれのライブラリを使用します。主に「候補」を使用します。つまり、LLM生成応答と「参照」、つまりグラウンドトゥルースを使用し、値をそれぞれ計算します。簡単にするために、BleuとRougeのスコアを計算します。このロジックは、市場で利用可能なすべてのメトリックに拡張可能です。
BLEUスコアの計算
バイリンガル評価の研究は、迅速で、安価で、言語に依存しない機械翻訳(候補者)の一般的な評価メトリックの1つです。手動評価と比較して、わずかなエラーがあります。機械の翻訳の近さをプロの人間の反応(参照)と比較し、評価を0-1の範囲のメトリックスコアとして返し、1に対するものは近い試合と呼ばれます。彼らは、候補者からの文でn-gram(n wordsのチャンク)を考慮します。例えば。 Unigrams(1グラム)は、候補者と参照からのすべての単語を考慮し、精密スコアと呼ばれる正規化されたスコアを返します。
ただし、同じ単語が複数回表示されているかどうかを考慮すると、通常は間違っている各外観の最終スコアを説明することを考えると、常にうまく機能するとは限りません。したがって、BLEUは修正された精度スコアを使用して、単語の一致数をクリップし、候補者の単語数で正規化します。ここでのもう1つのキャッチは、単語の順序を考慮していないことです。したがって、BLEUスコアは複数のn-Gramsを考慮し、1〜4グラムの精度スコアを他のパラメーターで表示します。
利点
- より速い計算と簡単な計算が含まれます。
- 広く使用され、ベンチマークの結果。
短所
- 翻訳の意味を考慮していません。
- 文の形式を考慮していません。
- それはバイリンガルですが、英語以外の言語に苦労しています。
- 人間の翻訳がすでにトークン化されている場合、スコアを計算するのは難しい。
#src/evaluator_blog/metrics/bleu.py インポートリストの入力から、呼び出し可能な、オプション src.evaluator_blog.evaluatorからImport baseevaluatorから nltk.translate.bleu_scoreからcorpus_bleuをインポート、smoothingfunction "" " NLTKからのブルー実装 "" " クラスBleuscore(baseevaluator): def __init __( 自己、 候補者:リスト[str]、 参照:リスト[str]、 ウェイト:オプション[list [float]] = none、 smoothing_function:optional [callable] = none、 auto_reweigh:optional [bool] = false、 ) - >なし: "" " からBLEUスコア(バイリンガル評価の研究)を計算します Papineni、Kishore、Salim Roukos、Todd Ward、Wei-Jing Zhu。 2002年。 「ブルー:機械翻訳の自動評価の方法。」 ACLの議事録。 https://aclanthology.org/p02-1040.pdf args: Weights(Optional [List [Float]]、オプション):各bleu_scoreに適用する必要があるウェイト。デフォルトはありません。 smoothing_function(オプション[callable]、optional):単語の確率質量分布を追加または調整することにより、トレーニングデータのスパースの問題を克服するための呼び出し可能な関数。デフォルトはありません。 auto_reweigh(オプション[bool]、オプション):n-grams フロート: "" " 指定された候補者と参照のBLEUスコアを計算します。 args: 候補者(リスト[str]):候補者の文のリスト 参照(リスト[str]):参照文のリスト Weights(Optional [List [Float]]、オプション):BLEUスコア計算の重み。デフォルトは(1.0、0、0、0)に smoothing_function(optional [function]):セグメントレベルのBLEUスコアのスムージング手法 返品: フロート:計算されたブルースコア。 "" " #候補者と参照の長さが等しいかどうかを確認します len(self.candidates)!= len(self.References)の場合: self.candidates、self.References = self.padding( self.candidates、self.References )) #ブルースコアを計算します return corpus_bleu( list_of_references = self.References、 仮説= self.candidates、 Weights = self.weights、 smoothing_function = self.smoothing_function、 auto_reweigh = self.auto_reweigh、 ))
ルージュスコアの測定
要点評価のためのリコール指向の研究は、モデル生成された要約を複数の人間の要約と比較するための一般的な評価メトリックの1つです。素朴な方法では、マシンとヒト生成された要約の両方のnグラムを比較します。これは、Rouge-N Recallスコアと呼ばれます。マシンのより関連性を確保するために、人間の要約に概要を生成するために、精密スコアを計算できます。精度とリコールの両方のスコアがあるため、F1スコアを計算できます。通常、「n」の複数の値を考慮することをお勧めします。ルージュの小さなバリアントは、単語のシーケンスを考慮し、LCSを計算するルージュ-Lスコアです(最も長い一般的なサブシーケンス)。同様に、精度とリコールスコアを取得できます。ここでのわずかな利点は、文の分子性を考慮し、関連する結果を生成することです。
利点
- n-gramsと最も長い一般的なサブシーケンスを比較することにより、自動テキストの要約の品質を評価するのに非常に効果的です。
- ルージュはあらゆる言語に適用でき、多言語のテキスト分析と評価に汎用性があります。
短所
- ルージュは、より深い意味の意味と一貫性を捉えていない可能性のある表面レベルのテキストマッチング(n-grams)に焦点を当てています。
- ルージュの精度は、参照要約の品質と代表性に大きく依存します
#src/evaluator_blog/metrics/rouge.py 警告をインポートします インポートリスト、ユニオン、DICT、呼び出し可能、タプル、オプションのタイピングから from ..Valuator Import baseevaluator rouge_scoreからrouge_scorerをインポートします クラスRougesscore(BaseeValuator): def __init __( 自己、 候補者:リスト、 参照:リスト、 rouge_types:optional [union [str、tuple [str]]] = [ 「rouge1」、 「rouge2」、 「ルーゲル」、 「ルーゲルサム」、 ]、、 use_stemmer:optional [bool] = false、 split_summaries:optional [bool] = false、 トークンザー:オプション[callable] = none、 ) - >なし: super().__ init __(候補者、参照) #デフォルトの `rouge_types`がすべて、その他のユーザーが指定しました ISInstance(rouge_types、str)の場合: self.rouge_types = [rouge_types] それ以外: self.rouge_types = rouge_types #「use_stemmer」を有効にして、単語の接尾辞を削除してマッチング機能を改善します self.use_stemmer = use_stemmer #enabledの場合、「rougelsum」の文の間にnewlinesを追加するかどうかをチェックします self.split_summaries = split_summaries #ユーザーが定義されている場合、または `rouge_scorer`デフォルトを使用する場合は` tokenizer`を有効にします #https://github.com/google-research/google-research/blob/master/rouge/rouge_scorer.py#l83 トークネイザーの場合: self.tokenizer =トークンザー それ以外: self.tokenizer = none _msg = str( "" " デフォルトのトークンザーを利用します "" " )) 警告.warn(_msg) def get_score(self) - > dict: "" " 返品: DICT:対応するメトリックの評価のJSON値 "" " スコアラー= rouge_scorer.rougescorer( rouge_types = self.rouge_types、 use_stemmer = self.use_stemmer、 トークネイザー= self.tokenizer、 split_summaries = self.split_summaries、 )) return scorer.score(self.list_to_string(self.candidates)、self.list_to_string(self.References)))
パッケージをテストします
実際の使用の前にソースファイルが準備されたので、コードの動作を確認する必要があります。そこで、テストフェーズが登場します。 Pythonライブラリフォーマット/コンベンション/ベストプラクティスでは、 `Tests/`という名前のフォルダーの下にすべてのテストを書きます。この命名規則により、開発者はこのフォルダーがその重要性を持っていることを簡単に理解できます。複数の開発ツールがありますが、タイプのチェック、エラー処理などを使用してライブラリを制限できます。これは、チェックとテストの最初のラウンドに対応しています。しかし、エッジのケースと例外を確保するために、UnitestとPytestasを使用することができます。とはいえ、「Unittest」ライブラリを使用して基本的なテストを設定するだけです。
効果的な単体テストを作成します
「Unittest」に関して知っておくべき重要な用語は、テストケースとテストスイートです。
- テストケース:テストの最小単位では、出力のセットに対して入力を評価します。
- テストスイート:テストケース、スイート、またはその両方のコレクション。テストを集約して一緒に動作するために使用されます。
- 命名規則:これは、ファイル名と関数名に「tests_`」を付けたものでなければなりません。その理由は、パーサーがそれらを検出し、テストスイートに追加するためです。
ホイールを構築します
ホイールは基本的に、コマンド `pip install
詩のビルド
フォルダーのルート内の `dist/`フォルダー内のホイールとzipファイルを生成します。
dist/ package_name-0.0.1-py3-none-any.whl package_name-0.0.1.tar.gz
Aliter、同等のPythonコマンドは、 `build`パッケージをインストールし、フォルダーのルートからビルドコマンドを実行しています。
python3 -m pipインストール - アップグレードビルド python3 -m build
ソースおよびバイナリ分布の作成
ソースとバイナリの分布の作成に注目しましょう。
ソースディストリビューション(SDIST)
「sdist」は、PIPや詩などの外部ツールから構築するソースコードとメタデータを含むパッケージのソース分布です。 「sdist」は「bdist」の前に構築する必要があります。 「PIP」がビルド分布が見つからない場合、ソース分布はフォールバックとして機能します。次に、ホイールを構築し、パッケージ要件をインストールします。
バイナリ分布(BDIST)
`bdist`には、ターゲットデバイスの正しい場所に移動する必要がある必要なファイルが含まれています。最もサポートされている形式の1つは「.whl」です。 Pythonファイルをコンパイルしていないことに注意してください。
ライセンス
パッケージを外部の世界にオープンソーシングしている間、コードを再利用できる程度を示すライセンスを持つことを常にお勧めします。 GitHubでリポジトリを作成している間、そこでライセンスを選択するオプションがあります。使用オプションを備えた「ライセンス」ファイルを作成します。どのライセンスを選択するかわからない場合は、この外部リソースは救助に最適です。
パッケージを公開します
これで、パッケージを外部の世界に公開するために必要なすべての要件があります。したがって、1つのコマンドですべての手順を抽象化するパブリッシュコマンドを使用しています。
test.pypi.org
パッケージがどのように機能するか、またはテストの目的で確信が持てない場合は、公式リポジトリに直接アップロードするのではなく、test.pypi.orgに公開することをお勧めします。これにより、すべての人と共有する前にパッケージをテストする柔軟性が得られます。
pypi.org
公式のPythonパッケージには、Pythonコミュニティが発行するすべてのプライベートおよびパブリックソフトウェアが含まれています。著者や組織は、公式の中央リポジトリを通じてパッケージを共有するのに役立ちます。パッケージを世界に公開するのに必要なのは、この単一のコマンドだけです。
Poetry Publish - -Build -Username $ pypi_username - password $ pypi_password
結論
この記事の終わりまでに、数百万が使用する準備ができたPythonパッケージを正常に公開しました。詩を使用して新しいパッケージを初期化し、ユースケースに取り組み、テストを書き、パッケージを作成し、Pypiリポジトリに公開しました。これにより、あなた自身にもっと価値が追加され、それらがどのように構造化されているかについてのさまざまなオープンソースPythonパッケージリポジトリを理解するのにも役立ちます。最後になりましたが、これはほんの始まりに過ぎず、可能な限り拡張可能にすることができます。オープンソースのPythonパッケージと分布を参照し、同じものからインスピレーションを得ることができます。
キーテイクアウト
- 詩を使用したマスターPythonパッケージの作成と管理。
- 多様なユースケースの評価メトリックを実装およびカスタマイズします。
- ユニットテストフレームワークを備えた堅牢なPythonパッケージを構築およびテストします。
- パッケージをPypiに公開し、配布形式を理解してください。
- オープンソースのパッケージ開発とライセンス慣行に関する洞察を得る。
よくある質問
Q1。この記事の目的は何ですか?A.この記事は、Pythonパッケージの作成と公開を支援し、さまざまな評価メトリックにコミュニティが使用できるRAG評価ツールに焦点を当てています。
Q2。 Pythonパッケージを管理するために詩を使用する必要があるのはなぜですか?A.詩は、バージョン制御、仮想環境、およびタスクを単一のツールに統合し、開発と配布を容易にすることにより、依存関係管理とパッケージングを簡素化します。
Q3。記事ではどのような評価メトリックがカバーされていますか?A.記事では、参照テキストと比較して機械で生成されたテキストの品質を評価するために一般的に使用されるメトリックであるBLEとルージュのスコアを計算する方法を詳しく説明しています。
Q4。 Pythonパッケージの機能をテストするにはどうすればよいですか?A. UnittestやPytestなどのフレームワークを使用してパッケージをテストして、コードが期待どおりに機能し、エッジケースを処理し、公開前に自信を提供することを確認できます。
Q5。 Pythonパッケージを公開するための手順は何ですか?A.詩を使用してパッケージを構築するか、テストしてtest.pypi.orgでテストし、詩の公開コマンドを使用して公式のpypi.orgリポジトリに公開して、一般に公開します。
この記事に示されているメディアは、Analytics Vidhyaが所有しておらず、著者の裁量で使用されています。
以上が詩でぼろきら評価者Pythonパッケージを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

2008年以来、私は共有ライドバンを擁護しました。これは、「Robotjitney」と呼ばれる「後に「Vansit」と呼ばれ、都市交通の未来として擁護しました。 私はこれらの車両を21世紀の次世代トランジットソリューション、スルパとして予見します

チェックアウトエクスペリエンスに革命をもたらす Sam's Clubの革新的な「Just Go」システムは、既存のAIを搭載した「スキャン&ゴー」テクノロジーに基づいて構築され、ショッピング旅行中にメンバーがサムズクラブアプリを介して購入をスキャンできるようになりました。

GTC 2025でのNvidiaの強化された予測可能性と新製品のラインナップ AIインフラストラクチャの重要なプレーヤーであるNvidiaは、クライアントの予測可能性の向上に焦点を当てています。 これには、一貫した製品配信、パフォーマンスの期待を満たすこと、および

GoogleのGemma 2:強力で効率的な言語モデル 効率とパフォーマンスで祝われるGoogleのGemmaファミリーは、Gemma 2の到着とともに拡大しました。この最新リリースは2つのモデルで構成されています。

データエピソードを率いるこの主要なのは、主要なデータサイエンティスト、天体物理学者、TEDXスピーカーであるカークボーン博士を特徴としています。 ビッグデータ、AI、および機械学習の有名な専門家であるボルネ博士は、現在の状態と将来のトラジェについて非常に貴重な洞察を提供しています

このスピーチには、人工知能が人々の運動をサポートするのに非常に優れている理由を示すエンジニアリングに関するバックグラウンド情報には、非常に洞察に満ちた視点がいくつかありました。 各寄稿者の観点からコアアイデアを概説し、スポーツにおける人工知能の適用の調査の重要な部分である3つの設計側面を実証します。 エッジデバイスと生の個人データ 人工知能に関するこのアイデアには、実際には2つのコンポーネントが含まれています。1つは大きな言語モデルを配置する場所に関連しており、もう1つは人間の言語と、リアルタイムで測定したときにバイタルサインが「表現」する言語の違いに関連しています。 アレクサンダー・アミニはランニングとテニスについて多くのことを知っていますが、彼はまだ

Caterpillarの最高情報責任者であり、その上級副社長であるJamie Engstromは、28か国の2,200人以上のITプロフェッショナルのグローバルチームを率いています。 彼女の現在の役割で4年半を含むCaterpillarで26年間、Engst

Google Photosの新しいUltra HDRツール:クイックガイド Google Photosの新しいUltra HDRツールで写真を強化し、標準画像を活気に満ちた高ダイナミックレンジの傑作に変換します。ソーシャルメディアに最適なこのツールは、あらゆる写真の影響を高め、


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。
