🚀 CLAP: 自然言語監督による転移可能なバイナリコード表現の学習
CLAP(Contrastive Language - Assembly Pre - training)は、自然言語監督を通じてバイナリコード表現を学習するフレームワークです。バイナリコードと自然言語の説明をアライメントすることで、few - shotおよびzero - shotシナリオにおける分析性能を向上させます。自動的に1億9500万組のコードスニペットとその説明を生成できるデータセットエンジンを利用し、バイナリコード分析の分野で卓越した転移性を持つ手法を提供します。
🚀 クイックスタート
このドキュメントでは、CLAPモデルをセットアップし、ソートアルゴリズム、マルウェア、暗号アルゴリズムの細粒度分類などの様々なタスクに使用する方法を説明します。これらのタスクは追加のトレーニングなしで実行できます。
必要条件
システムにPythonとPyTorchがインストールされていることを確認してください。その後、pipを使用してTransformersライブラリをインストールします。
pip install transformers
トークナイザーとモデルの準備
必要なライブラリをインポートし、モデルとトークナイザーを初期化します。
import torch
from transformers import AutoModel, AutoTokenizer
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
asm_tokenizer = AutoTokenizer.from_pretrained("hustcw/clap-asm", trust_remote_code=True)
text_tokenizer = AutoTokenizer.from_pretrained("hustcw/clap-text", trust_remote_code=True)
asm_encoder = AutoModel.from_pretrained("hustcw/clap-asm", trust_remote_code=True).to(device)
text_encoder = AutoModel.from_pretrained("hustcw/clap-text", trust_remote_code=True).to(device)
使用例
細粒度ソートアルゴリズム分類(Zero - Shot)
- アセンブリ(asm)コードデータセットをロードします。ここでは、バブルソートに関連するアセンブリコードスニペットを含むJSONファイルを使用します。
with open("./CaseStudy/bubblesort.json") as fp:
asm = json.load(fp)
- 分類プロンプトを定義します。
prompts = [
"This is a function related to bubble sort",
"This is a function related to selection sort",
...
]
- アセンブリコードとプロンプトをエンコードし、分類を実行します。
asm_input = asm_tokenizer([asm], padding=True, return_tensors="pt").to(device)
asm_embedding = asm_encoder(**asm_input)
text_input = text_tokenizer(prompts, return_tensors='pt').to(device)
text_embeddings = text_encoder(**text_input)
logits = torch.einsum("nc,ck->nk", [asm_embedding.last_hidden_state, text_embeddings.last_hidden_state.T])
preds = torch.softmax(logits / 0.07, dim=1).squeeze(0).tolist()
for i, prompt in enumerate(prompts):
print(f"Probability: {preds[i]*100:.3f}%, Text: {prompt}")
マルウェア分類や暗号アルゴリズム識別などの他の分類タスクでも、それぞれのデータセットをロードし、関連する自然言語プロンプトを定義することで同じプロセスを繰り返します。
✨ 主な機能
CLAPは、自然言語監督を利用してバイナリコード表現を学習することで、以下のような機能を提供します。
- バイナリコードと自然言語説明のアライメントにより、few - shotおよびzero - shotシナリオでの分析性能向上。
- 自動的に大量のコードスニペットとその説明を生成するデータセットエンジンを利用した高い転移性。
- モデルはHugging Face Model Hubで公開されており、簡単に利用できます。

📦 インストール
インストール手順については、「クイックスタート」の「必要条件」と「トークナイザーとモデルの準備」を参照してください。
📚 ドキュメント
最新情報
- [2024/2/29] CLAPがHugging Face Model Hubで利用可能になりました([clap - asm](https://huggingface.co/hustcw/clap - asm) と [clap - text](https://huggingface.co/hustcw/clap - text))。
- [2024/2/28] CLAPが ArXiv に掲載されました。
📄 ライセンス
このプロジェクトはMITライセンスの下で公開されています。
📜 引用
この研究があなたの研究に役立った場合、スター🌟を付けて、以下のように引用していただけると幸いです。
@misc{wang2024clap,
title={CLAP: Learning Transferable Binary Code Representations with Natural Language Supervision},
author={Hao Wang and Zeyu Gao and Chao Zhang and Zihan Sha and Mingyang Sun and Yuchen Zhou and Wenyu Zhu and Wenju Sun and Han Qiu and Xi Xiao},
year={2024},
eprint={2402.16928},
archivePrefix={arXiv},
primaryClass={cs.SE}
}