解説

AMI SURPRISED

ねえねえ、智也くん!これ、面白そうな論文のタイトル見つけたんだけど…『Beyond Language Boundaries: Uncovering Programming Language Families for Code Language Models』…プログラミング言語の家族ってなに?

TOMOYA NEUTRAL

ああ、その論文か。要するに、C言語とかPythonとか、いろんなプログラミング言語があるけど、それらがどれくらい似ているか、まるで言語の家系図みたいな関係をAIを使って自動的に見つけようって研究だよ。

AMI SURPRISED

家系図?プログラミング言語にも血縁関係があるの?

TOMOYA NEUTRAL

血縁じゃないけど、構造や書き方が似てる言語はあるだろ?CとC++とか、JavaとC#とか。この研究は、そういう「似てる度合い」を、AIにコードの断片をたくさん読ませて、数学的に計測して、グループ分けしたんだ。

AMI HAPPY

ふーん。で、どうやって「似てる」って測るの?人間が「この文法似てるね」って判断するんじゃないの?

TOMOYA NEUTRAL

そこがこの論文の面白いところ。まず、「変数を定義する」「条件分岐する」「繰り返し処理する」みたいな、プログラミングの基本的な動作を21個決める。で、LLMに「Pythonで変数定義するコード書いて」「Javaで変数定義するコード書いて」って、全部の言語で同じ動作のコードを生成させるんだ。

AMI SURPRISED

同じことをするコードを、いろんな言語で用意するってこと?

TOMOYA NEUTRAL

そう。で、そのコード片を別のLLMに入れて、数値のベクトル、つまり「埋め込み」に変換する。似た意味のコードは、ベクトル空間で近い位置に来るはずだろ?それを言語ごとに集めて平均とか取って、「C言語のベクトル」「Pythonのベクトル」みたいなものを作る。

AMI HAPPY

なるほど!で、そのベクトル同士が近い言語が「親戚」ってわけか。で、結果はどうだったの?やっぱりCとC++は近かった?

TOMOYA NEUTRAL

うん。C、C++、Java、Swiftは近いクラスタを形成した。あと、意外な発見もあって、Goっていう言語が、多くの言語と高い類似性を持つ「中心的な言語」、いわば社交的な優等生みたいなポジションだった。逆に、PythonとJavaは思ったより遠かった。

AMI SURPRISED

へえ!で、そんな家系図がわかって何が嬉しいの?

TOMOYA NEUTRAL

そこがこの研究の本質的な貢献だよ。この関係性を使って、AIの学習の仕方を賢くできる。例えば、Swiftを学ばせたい時に、データが少なくても、似てるJavaのデータで先に学習させてからSwiftに移ると、効率が良くなる。これが「転移学習」の応用だ。

AMI HAPPY

なるほど、似てる言語からコツを学べってことね!他には?

TOMOYA NEUTRAL

あとは、学習の順番を工夫する「カリキュラム学習」。似てる言語から順番に学ばせると、混乱せずに効率的にマルチリンガルになれる。あと、Goが中心的な言語ってわかったから、例えばC++をPythonに翻訳するAIを作る時、いきなり翻訳するんじゃなくて、C++→Go→Pythonって、Goを経由させると精度が上がるかもしれない。

AMI SURPRISED

すごい!実際に実験で効果はあったの?

TOMOYA NEUTRAL

あった。コードの要約や生成といったタスクで、特にデータが少ない言語に対して、提案した方法で学習させたAIは性能が大きく向上した。Swiftのコード要約タスクでは、Javaから知識を転移させたことで、評価指標が約20%も上がった。

AMI HAPPY

20%!それはすごい効果だね。これって、将来どういうことに役立つと思う?

TOMOYA NEUTRAL

新しいプログラミング言語が生まれた時、学習データが少なくても、似てる言語のデータでAIを育てられるから、すぐにその言語をサポートできるAIが作れる。あと、人間が言語を選ぶ時も、「Goはいろんな言語と相性がいいから、AIと一緒に作業する時は便利かも」みたいな新しい判断材料になるかもしれない。

AMI HAPPY

プログラミング言語の性格診断みたいだね!でも、全部の言語を調べたわけじゃないし、この「似てる度」は絶対的なものじゃないよね?

TOMOYA NEUTRAL

そうだね。これが課題で、調べた19言語に限った話だし、使ったLLMの特性にも左右される。あと、コードの「意味」だけでなく、「文化」や「コミュニティでの使われ方」みたいな要素は測れてない。将来は、もっと多くの言語や、違う観点での類似性を調べていく必要があると思う。

AMI HAPPY

ふむふむ…。じゃあ、私と智也くんの会話もベクトル化したら、どれくらい似てるか測れるかな?

TOMOYA NEUTRAL

…それはまったく別の研究テーマだよ、亜美さん。僕たちの会話は、どう見ても「似てる」とは言い難いし。

要点

プログラミング言語間の深い言語的関係(類似性)を、LLMを用いて自動的に発見する手法を提案した。

21の基本的な言語的特徴(変数定義、制御構造など)を定義し、LLMで各言語のコードサンプルを生成。それらを埋め込みベクトル化し、類似度行列を作成して階層的クラスタリングを行うことで、言語の「家族」(類似言語群)を明らかにした。

分析の結果、C、C++、Java、Swiftなどが近い関係にあるクラスタを形成し、Goが多くの言語と高い類似性を持つ「中心的な言語」であることが判明した。

発見された言語間の関係性を活用して、多言語コードLLMの学習を最適化する3つの戦略を提案:1) 類似言語間での転移学習、2) 言語的近さに基づくカリキュラム学習、3) 中心的な言語を利用した中間コード翻訳。

4つのコード知能タスクでの実験により、提案手法が多言語LLMの性能を大幅に向上させることを実証した。例えば、JavaからSwiftへの転移学習で、コード要約タスクのBLEU-4スコアが19.83%向上。

参考論文: http://arxiv.org/abs/2512.19509v1