
プロジェクト概要
Chinese Guba AI Detectorは、中国語AIテキストの二値分類ツールです。プロジェクトはhfl/chinese-roberta-wwm-extをベースとし、C-ReDコーパスを使用してファインチューニングされています。かつては株式掲示板テキストの研究目的の測定に使用されました。現在のリポジトリでは、学習、推論、テストのスクリプトと関連ドキュメントを公開しています。
このツールはモデルをローカルで読み込むため、外部APIを呼び出しません。特に注意が必要なのは、現在のリポジトリには学習済みの重みとトークナイザーファイルが含まれていない点です。利用者はモデルを自ら合法的に取得し、指定されたディレクトリに配置する必要があります。
重要な制限:これはC-ReD公式モデルではありません。今回のファインチューニングでは株式掲示板の投稿を使用しておらず、金融フォーラム分野における人手アノテーションのテストも実施していません。モデルのスコアはテキストの実際の著者の身元を証明するものではなく、個人の身元判断やコンテンツ処罰の唯一の根拠として扱ってはなりません。
主な機能
- UTF-8 CSV内の中国語テキストをAIテキストと人間テキストに二値分類します。
- AIカテゴリのsoftmaxスコアと、しきい値に基づく分類結果を出力します。
- デフォルトでは
帖子内容文本を読み込み、テキスト列と銘柄コード列のカスタマイズにも対応します。 股吧代码を6桁のテキストに正規化し、先頭のゼロを保持します。- 入力ファイル内のその他の列を保持し、テキスト内容を意図的に変更しません。
- 一時ファイルとアトミック置換により、出力ファイル破損のリスクを低減します。
- 整合性検証、上書き再計算、単一プロセス書き込み保護に対応します。
- 学習、単体テスト、公開コンテンツ監査のスクリプトを提供します。
実行環境のインストール
1. PythonとPyTorchの準備
プロジェクトのテスト環境はPython 3.10です。独立した仮想環境の使用を推奨します。CPUまたはCUDAデバイスに応じて、まずPyTorch公式の説明に従い、使用するデバイスに適したPyTorch 2.5.1をインストールしてください。
Windows PowerShellでリポジトリのルートディレクトリに移動し、仮想環境を作成して有効化します。
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txtCPUでも推論は実行できますが、通常はCUDA GPUの方が高速です。メモリ不足が発生した場合は、まず--batch-sizeをデフォルト値または大きな値から8または4に下げてください。
2. ローカルモデルの準備
合法的に取得した学習済みモデルをmodels/detectorに配置します。このディレクトリには次のファイルが必要です。
model.safetensorsconfig.jsontokenizer.jsontokenizer_config.jsonspecial_tokens_map.jsonvocab.txt
これらの重みとトークナイザーファイルは公開リポジトリに含まれていません。ディレクトリが不完全な場合、推論スクリプトはモデルを正常に読み込めません。
初回検出の実行
1. 入力CSVの準備
入力ファイルはUTF-8 CSVでなければなりません。デフォルトのテキスト列名は帖子内容文本、デフォルトの銘柄コード列名は股吧代码です。リポジトリが提供するサンプルはすべて架空のテキストであり、実在のユーザー、実在の投稿、人間またはAIの真値ラベルは含まれていません。
2. 一括推論の実行
モデルの準備が完了したら、リポジトリのルートディレクトリで次を実行します。
python scripts/predict.py --model-dir models/detector --input examples/synthetic_posts.csv --output outputs/demo.csv --batch-size 32このコマンドはmodels/detectorからローカルモデルを読み込み、サンプルCSVを読み取って、検出結果をoutputs/demo.csvに書き込みます。検出処理全体で外部APIは呼び出しません。
3. 出力フィールドの理解
出力ファイルには元の列が保持され、次のフィールドが追加されます。
- 是否AI生成:丸める前のモデルスコアがしきい値以上の場合は
1、それ以外は0です。空のテキストは空のまま保持されます。 - AI生成概率:AIカテゴリのsoftmaxスコアです。このスコアは確率校正されていないため、実際の確率と直接みなすことはできません。
- AI检测模型:公開モデル識別子です。ローカルモデルのパスは書き込みません。
- AI检测阈值:デフォルト値は
0.7です。これはプロジェクト設定であり、論文で最適と認定されたしきい値ではありません。 - AI检测状态:
okは検出が完了したこと、empty_textは入力テキストが空であることを示します。
カスタムCSV列の使用
テキスト列名がtext、銘柄コード列名がidの場合は、明示的に指定できます。
python scripts/predict.py --model-dir models/detector --input input.csv --output outputs/result.csv --text-column text --stock-column id入力ファイルに銘柄コード列がない場合は、空文字列を渡します。
python scripts/predict.py --model-dir models/detector --input input.csv --output outputs/result.csv --text-column text --stock-column ""銘柄コード列が存在する場合、プログラムは6桁のテキストに正規化し、先頭のゼロを保持します。入力内のその他の列はテキストとしてそのまま保持されます。
上書き、検証、並列処理
完全な結果の再生成
推論結果はまず一時ファイルに書き込まれ、成功後に対象ファイルへアトミック置換されます。同じコマンドを再実行した場合、入力、モデル、パラメーター、完全な出力の検証値がすべて一致したときに限り、既存の結果をスキップします。
既存の結果を無視して完全なファイルを再生成するには、--overwriteを追加します。
python scripts/predict.py --model-dir models/detector --input examples/synthetic_posts.csv --output outputs/demo.csv --batch-size 32 --overwrite処理の中断と並列タスク
中断後、プログラムは既存の行数を根拠に無条件で続きを書くのではなく、そのファイルの先頭から再計算します。同じ出力パスには同時に1つのプロセスしか書き込めません。並列処理を行う場合は、各プロセスに異なる入力ファイルと出力ファイルを割り当ててください。
長さ制限と結果の解釈
デフォルトでは、各テキストへの入力は最大256トークンで、超過部分は切り捨てられます。トークン数は漢字の文字数と一致しないため、この制限を256文字と解釈することはできません。
元の研究における一部の株式掲示板本文は、収集済みの約203文字の断片だけで構成されています。そのため、検出対象は元の本文の一部にすぎない可能性があります。結果を解釈する際は、テキストの切り捨て、分野の違い、コンテキストの欠落も同時に考慮してください。
AI生成概率は校正されていないsoftmaxスコアであり、デフォルトのしきい値0.7はプロジェクト設定にすぎません。しきい値を変更すると二値分類の結果は変わりますが、READMEでは、いずれのしきい値も論文で検証された最適値とはしていません。
C-ReDデータを使用したモデル学習
ライセンスの前提
学習前に、C-ReDデータの合法的な使用許諾を自ら確認して取得する必要があります。上流リポジトリには明確なライセンスが見つかっておらず、論文を引用しただけでデータの使用または再配布の許可を得たことにはなりません。本プロジェクトはC-ReDデータをミラーリングせず、リポジトリのMITライセンスもC-ReDデータおよびその派生重みに適用されません。
学習依存関係のインストール
python -m pip install -r requirements-train.txt学習の開始
合法的に取得したデータがdata/C-ReDに配置されていると仮定すると、次を実行できます。
python scripts/train.py --data-root data/C-ReD --output-dir models/detector --epochs 3 --batch-size 8 --eval-batch-size 16 --no-fp16学習プログラムはファイル名にCReD_を含むCSVを読み込み、その中のtext列とlabel列を使用します。元データのラベル定義は0=AI、1=人工ですが、学習時には0=人工、1=AIに変換されます。
学習プロトコルと過去の指標はMODEL_CARD.mdに記録されています。再学習時には完全な乱数シード初期化を使用しますが、過去の学習ではモデル初期化前にグローバルシードを明示的に設定していなかったため、以前の重みをビット単位で再現できる保証はありません。
テストとリリース監査
すべての単体テストを実行します。
python -m unittest discover -s tests -v単体テストでは架空のデータとモック推論を使用するため、モデルのダウンロードは必要ありません。実モデルのスモークテストで確認できるのは、モデルを読み込んで推論を実行できることだけであり、予測結果の正しさを証明するものではありません。
公開コンテンツ監査を実行します。
python scripts/audit_release.py公開リポジトリでは、ファイルのホワイトリストと機密情報パターンを使用して検査します。株式掲示板の元CSV、投稿者ID、ニックネーム、IP、投稿URL、論文パネル、商用データベース、キャッシュ、ログ、Notebook出力、学習中間チェックポイント、過去のGit履歴は、いずれもリポジトリに含めてはなりません。具体的な匿名化範囲はPRIVACY.md、公開手順はdocs/PUBLISHING.mdを参照してください。
高度な使用に関する推奨事項
- まず架空データで処理を検証する:環境、列名、モデルディレクトリ、出力パスが正しいことを確認してから、自分の合法的なデータを処理してください。
- メモリ不足時はバッチサイズを小さくする:まず
--batch-size 8または--batch-size 4を試してください。 - 出力パスの共有を避ける:並列タスクでは、単一プロセス書き込み制限に抵触しないよう、異なる出力ファイルを使用する必要があります。
- 実行パラメーターを保存する:モデル、入力、パラメーター、出力の検証値は結果の再利用に影響するため、いずれかを変更した後は出力を再確認してください。
- 長文の解釈には注意する:256トークンを超える内容は切り捨てられるため、モデルが末尾部分を見ていない可能性があります。
- スコアを身元証明として扱わない:softmaxスコアは校正されておらず、プロジェクトには金融フォーラム分野での人手アノテーションによる検証もありません。
- 重みを公開する前にライセンスを確認する:コードとドキュメントはMITライセンス、ベースモデルはApache-2.0ですが、C-ReDデータと派生重みについては別途許諾を確認する必要があります。
まとめ
Chinese Guba AI Detectorは、CSV推論、モデル学習、単体テスト、リリース監査を含む、ローカルで実行可能な中国語AIテキスト分類の一連の処理を提供します。実際に使用する際は、まずモデルまたは学習データを合法的に取得し、出力をテキスト著者の身元に関する確定的な証拠ではなく、研究目的のモデルスコアとして扱ってください。
