コード検索やコード理解を目的とした事前学習済みモデルをXで見かけたので試してみました。こういう特化型モデルは興味深いです。いろいろと作って使えるときっと楽しいでしょう。モデル有難く動かしてみました。
企業の文章だと似たような文章ばかりのものがあります。うまくデータセットを整えることが出来たら、微妙な文章でも差異を求められるモデルができるのでしょうか。
試してみたので、メモとして残します。
https://t.co/2MxkmQdxbo をアップロードしましたSentenceTransformersでファインチューニングしています。普段の方法で計算すると平均MRRが0.97を超えてしまった(難しいほうでも0.84)感じです
— Shuu (@shuu0212114) 2025年3月25日
もうこの方法では評価できないのでベンチマークを見よう見まねで試してみました
Cosine類似度
code_snippet_1 = """
def add(a, b):
return a + b
"""code_snippet_2 = """
def sum_numbers(x, y):
return x + y
"""
Cosine Similarity: 0.6156
code_snippet_1 = """
func (v *View) Render(m ...string) trees.Markup {
if len(m) <= 0 {
m = []string{"."}
}
"""code_snippet_2 = """
def sum_numbers(x, y):
return x + y
"""
Cosine Similarity: 0.0063
検索
# サンプルのコードスニペットとそのコメント(要約)のデータセット
dataset = [
{
"code": """
def add(a, b):
return a + b
""",
"comment": "2つの数値を加算して結果を返す関数です。"
},
{
"code": """
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
""",
"comment": "再帰的にnの階乗を計算する関数です。"
},
{
"code": """
def is_even(n):
return n % 2 == 0
""",
"comment": "与えられた数が偶数かどうかを判定する関数です。"
}
]
テスト対象
def sum_numbers(x, y):
return x + y
生成されたコメント: 2つの数値を加算して結果を返す関数です。
類似度スコア: 0.6156468987464905
今回使ったコード