Spaces:
Running
on
Zero
Running
on
Zero
import gradio as gr | |
import torch | |
from sentence_transformers import SentenceTransformer | |
from torch.nn.functional import cosine_similarity | |
from spaces import GPU | |
# モデルの読み込み | |
model = SentenceTransformer("Shuu12121/CodeCloneDetection-ModernBERT-Owl") | |
model.eval() | |
# 閾値設定(安定性の高い0.9推奨) | |
THRESHOLD = 0.9 | |
def detect_clone(code1, code2): | |
if not code1.strip() or not code2.strip(): | |
return "❌ どちらのコードも入力してください", "" | |
with torch.no_grad(): | |
embeddings = model.encode([code1, code2], convert_to_tensor=True) | |
sim_score = cosine_similarity(embeddings[0].unsqueeze(0), embeddings[1].unsqueeze(0)).item() | |
result = ( | |
f"🟢 類似度: {sim_score:.4f}\n→ これらのコードは **クローン** と判定されます。" | |
if sim_score >= THRESHOLD | |
else f"🔴 類似度: {sim_score:.4f}\n→ これらのコードは **クローンではありません**。" | |
) | |
return result, sim_score | |
# Javaクローン例(ファイル読み込み) | |
java_code1 = """\ | |
public static String readFileToString(File file, Charset encoding) throws IOException { | |
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding))) { | |
StringBuilder sb = new StringBuilder(); | |
String line; | |
while ((line = reader.readLine()) != null) { | |
sb.append(line).append("\\n"); | |
} | |
return sb.toString(); | |
} | |
}""" | |
java_code2 = """\ | |
public static String readFileToString(File file, Charset encoding) throws IOException { | |
byte[] bytes = java.nio.file.Files.readAllBytes(file.toPath()); | |
return new String(bytes, encoding); | |
}""" | |
# Gradioインターフェースの作成 | |
demo = gr.Interface( | |
fn=detect_clone, | |
inputs=[ | |
gr.Textbox(label="コードスニペット1", lines=12, value=java_code1), | |
gr.Textbox(label="コードスニペット2", lines=8, value=java_code2), | |
], | |
outputs=[ | |
gr.Markdown(label="判定結果"), | |
gr.Number(label="Cosine Similarity") | |
], | |
title="Code Clone Detection with ModernBERT-Owl 🦉", | |
description="Shuu12121/CodeModernBERT-Owl によって構築された Sentence-BERT モデルを使用し、コードクローンを検出します。これは Java における意味的に同等なファイル読み込み関数の例です。" | |
) | |
if __name__ == "__main__": | |
demo.launch() | |