【IT】Facebook、プログラムコードを別のプログラミング言語に翻訳する「TransCoder AI」を開発

1: 田杉山脈 ★ 2020/06/17(水) 21:18:57.52 ID:CAP_USER

FacebookはC++、Java、Pythonなどの高水準言語で書かれたプログラムコードを別のプログラミング言語に変換するニューラルトランスコンパイラを開発したという。このシステムは教師なし学習を採用しており、同社は従来よりもかなり効率が改善したとしている。

既存のプログラムコードを別の言語に移行するには、両方の言語について専門的な知識が必要な上、コストがかかってしまいがちだ。たとえばオーストラリアのコモンウェルス銀行はプラットフォームをCOBOLからJavaに移行するために5年の歳月と約7億5,000万米ドルを費やした。

Facebookは教師なし学習というアプローチ法に取り組み、C++、Java、Python間でソースコードを変換することができる「TransCoder」を開発した。トレーニングには280万件以上のオープンソースリポジトリからなるGitHubコーパスを使用した。TransCoderは元のプログラムコードを別の言語へ変換し、変換したプログラムコードを元の言語へ再度変換することを繰り返して学習している。

TransCoderのパフォーマンス評価にはGeeksforGeeks(コーディングの問題点や解決方法を集めたオンラインプラットフォーム)から抽出したC++、Java、Pythonの関数852個を使用した。Facebookによると、最も評価の高かったバージョンのTransCoderは、厳密に言えば同一の関数を生成していないことが多かったが、計算精度が高かった。以下にTransCoderが期待される結果を返した割合をまとめる。

C++からJavaへの変換:74.8%
C++からPythonへの変換:67.2%
JavaからC++への変換:91.6%
PythonからJavaへの変換:56.1%
PythonからC++への変換:57.8%
JavaからPythonへの変換:68.7%
TransCoderが各言語に特有のシンタックスを理解するだけでなく、言語のデータ構造やメソッドも理解したことが証明されたと研究者らは述べている。

専門知識を持たなくても、TransCoderを使えばあらゆるプログラミング言語で容易にソースコードを生成できます。しかも商業用のソリューションを大幅に上回っています。

AIによるコード生成システムを開発しているのはFacebookだけではない。今年行われたMicrosoftのカンファレンス「Build」では、OpenAIが英文で書かれたコメントから関数を生成するモデルをデモンストレーションした。2年前にはライス大学の研究者が「意図」を読み取ってコードを生成する「Bayouというシステムを作っている。

Intel Labsの主任研究者兼ディレクターのJustin Gottschlich氏はVentureBeatのインタビューに対してこう語った。

これらはソフトウェア開発の無駄を取り除いてくれます。バグ対応の手間が省けるので、プロダクティビティの加速化に役立ちます。そして新たな職を生み出します。なぜならプログラミングをしたことのない人々でもこれらのインターフェイスを通じてクリエイティブな直観を形にすることができるからです。
https://thebridge.jp/2020/06/facebooks-transcoder-ai-converts-code-from-one-programming-language-into-another

2: 名刺は切らしておりまして 2020/06/17(水) 21:21:48.61 ID:pdMnAXm5
もうやりたい事を日本語で文章書いたら動けよ

37: 名刺は切らしておりまして 2020/06/17(水) 23:30:52.79 ID:4AGSfSaK
>>2
漢字Talk時代のApple Scriptが日本語表記okだった気がする

4: 名刺は切らしておりまして 2020/06/17(水) 21:32:25.52 ID:3bcWTHJP
こういうのって違う言語に変換してから元の言語にもう一回変換しても同じ動きするのかな
それか俺が書いた無駄な部分が最適化されてたりして

5: 名刺は切らしておりまして 2020/06/17(水) 21:32:49.72 ID:DdYJsufQ
>言語のデータ構造やメソッドも理解した
まじかよ

6: 名刺は切らしておりまして 2020/06/17(水) 21:33:26.30 ID:Cnw6NGdX
SE時代、似たようなやつをリプレースの時作ったわ

7: 名刺は切らしておりまして 2020/06/17(水) 21:36:12.34 ID:5d0pB2R+
99%変換できても残りの1%がバグになるんなら使い物にはならないんじゃね

8: 名刺は切らしておりまして 2020/06/17(水) 21:37:59.39 ID:MQDPCWjT
対応言語を一周して同じ動きになってから発表しろよ。

9: 名刺は切らしておりまして 2020/06/17(水) 21:46:22.86 ID:SwSN/ozR
むしろ、ルールベースで出来ないの?

10: 名刺は切らしておりまして 2020/06/17(水) 21:50:57.29 ID:5KHHmIK4

オーストラリアのコモンウェルス銀行はプラットフォームをCOBOLからJavaに移行するために5年の歳月と約7億5,000万米ドルを費やした。

コボルをJavaにロジックそのままで移行するのはバカ

11: 名刺は切らしておりまして 2020/06/17(水) 22:00:17.25 ID:L6Jj4+oZ
prologから javascriptに変換してから誇ってもらおうか!

12: 名刺は切らしておりまして 2020/06/17(水) 22:01:09.34 ID:OxKVR8gF

>>1
>C++からJavaへの変換:74.8%
>C++からPythonへの変換:67.2%
>JavaからC++への変換:91.6%
>PythonからJavaへの変換:56.1%
>PythonからC++への変換:57.8%
>JavaからPythonへの変換:68.7%

解散

14: 名刺は切らしておりまして 2020/06/17(水) 22:02:55.00 ID:uosQIoSu
よし、COBOLを一括変換だな

15: 名刺は切らしておりまして 2020/06/17(水) 22:08:05.60 ID:LYXQviAg
これでバグが出たら地獄見る気がする

16: 名刺は切らしておりまして 2020/06/17(水) 22:10:01.63 ID:0AJ0qp+Y
そして、致命的な不具合が発生しても一生修復できないプログラム完成

17: 名刺は切らしておりまして 2020/06/17(水) 22:10:02.82 ID:wq05Rhfq
~%変換とか意味ないから。
100%じゃないとゴミですよ。

18: 名刺は切らしておりまして 2020/06/17(水) 22:29:29.92 ID:fhl8TdVp
>>1
夏が近づいてきたな
肝試しはこのジェネレータの出力コードにきまり

19: 名刺は切らしておりまして 2020/06/17(水) 22:30:17.51 ID:d0jLNknO
C++ソースをアセンブラに翻訳してみてもらいたい。

32: 名刺は切らしておりまして 2020/06/17(水) 23:17:40.60 ID:29WCXgwe
>>19
馬鹿発見

39: 名刺は切らしておりまして 2020/06/17(水) 23:40:03.84 ID:Bq7nXeKX
>>19
仮にアセンブラをアセンブリに読み替えたとしてもコンパイラの役割だろそれは

20: 名刺は切らしておりまして 2020/06/17(水) 22:30:33.79 ID:iSLbcHy0
競技プログラミングぐらいなら
100%変換可能だろ

21: 名刺は切らしておりまして 2020/06/17(水) 22:37:05.91 ID:YA0LBWXl
バグも翻訳中に直してくれるの?

22: 名刺は切らしておりまして 2020/06/17(水) 22:41:36.07 ID:D3u6MgW+
自然言語をプログラム言語に翻訳できる日も近い

24: 名刺は切らしておりまして 2020/06/17(水) 22:49:36.56 ID:HASRNfE3

アスペは文章を全部頭に入れてから考えるのが苦手

嫌われる要素しかない人間、それがアスペルガー症候群

25: 名刺は切らしておりまして 2020/06/17(水) 22:49:46.01 ID:FhO6EsCB
c++とjavaは文法が似てるだけあって精度が高い
pythonはかなり違うし動的型付けやから変換しんどそう

26: 名刺は切らしておりまして 2020/06/17(水) 22:52:15.95 ID:SVKGpFpI
単純なコード以外無理そう

27: 名刺は切らしておりまして 2020/06/17(水) 22:56:31.69 ID:g7+gg0e7
クレーム対応部門だけが生き残るのか。
超専門用語「仕様です」のみって言う対応マニュアルが配られて・・・

28: 名刺は切らしておりまして 2020/06/17(水) 22:57:57.63 ID:FhO6EsCB

教師なしの学者機能だから延々とコード変換を繰り返して精度を上げていくんだろうな

こいつの変換精度でクソコードかどうか判定できそう

29: 名刺は切らしておりまして 2020/06/17(水) 23:04:26.39 ID:ydGIzguN
そうだね。本当に理解できたのなら、変換成功率は100%になるはず。

30: 名刺は切らしておりまして 2020/06/17(水) 23:13:28.31 ID:OXRRxryj
>PythonからC++への変換:57.8%
だめじゃん

31: 名刺は切らしておりまして 2020/06/17(水) 23:15:17.25 ID:DktoS3Cl
変換するくらいなら作り直す

33: 名刺は切らしておりまして 2020/06/17(水) 23:18:36.43 ID:Bg7swl4C
ちゃんと動くまで勝手にやってくれるなら素晴らしい

34: 名刺は切らしておりまして 2020/06/17(水) 23:21:35.43 ID:gKEBQvmu
COBOLからJavaとかならNTTデータがやってなかったっけ?

35: 名刺は切らしておりまして 2020/06/17(水) 23:26:46.68 ID:dJKSzFhH
勝手に要求仕様書を読んで、勝手に理解して、勝手にテストしてくれるAIが欲しいw
システム作るところが楽しいんだから、楽しみを奪わないで欲しいw

36: 名刺は切らしておりまして 2020/06/17(水) 23:28:44.19 ID:oAp0YOOF
元のソースコードが完璧ならいずれ出来そうだけど、たいていのプログラムはバグを抱えてるからソレが悪さして訳分からん不具合抱えて動作すらしなさそう

38: 名刺は切らしておりまして 2020/06/17(水) 23:38:48.39 ID:upPVLLb6
自動変換は変数名がどうなるか分からず変な変数名になる恐れがあるな。

40: 名刺は切らしておりまして 2020/06/17(水) 23:40:46.65 ID:nUTYiDSL

C系とかメモリ管理がエグいのはまず無理だろうな。

あと、クソソースは変換後もクソソースw
そう考えたらクソソースを改善してくれるAIの方が使えるわ。
内容を本当に把握できてるならだけど。

41: 名刺は切らしておりまして 2020/06/18(木) 00:05:01.81 ID:cTBLwak2
C#↔VB.NETを100%変換頼むわ

42: 名刺は切らしておりまして 2020/06/18(木) 00:06:26.49 ID:Mash+A4a
変換率100行かないなら、どんだけテストしなきゃいけないのか

43: 名刺は切らしておりまして 2020/06/18(木) 00:07:35.37 ID:CQNMge/7
要するにまだ全然使い物にならんってことね。
10万行程度の小規模なシステムでも99%の精度じゃ1000行間違えてるってことだし。
99.99%の精度が出てやっと10行まで抑え込める。

44: 名刺は切らしておりまして 2020/06/18(木) 00:20:39.26 ID:l47ar4Dh
変換したのを逆変換したら元に戻るのかな

45: 名刺は切らしておりまして 2020/06/18(木) 00:28:05.93 ID:vQXLdcI0
PythonからVBAへの変換やってほしい
もうVBAとか触りたくないねんけど
あれ作れこれ作れってあとからあとからマクロ要望出てきてもうやだ

46: 名刺は切らしておりまして 2020/06/18(木) 00:28:19.35 ID:vJHpgiyf
変数や関数名が001aとかになってそう

52: 名刺は切らしておりまして 2020/06/18(木) 02:17:43.37 ID:rKmEs2BE
>>46
センター試験の問題のようにか

47: 名刺は切らしておりまして 2020/06/18(木) 00:30:08.05 ID:MAIOwiHT

テストコード込のコードの前提で、AIでテストを完全にパスするまで再帰してくれたらええのに

逆の発想で、クラスとメソッドのスケルトンとテストコードから、中身を自動実装するAIあったらええのに

48: 名刺は切らしておりまして 2020/06/18(木) 00:52:27.77 ID:2YU1lhVa
大手なら既にコンバージョンツールぐらい自前で持っている

49: 名刺は切らしておりまして 2020/06/18(木) 01:42:02.35 ID:oYo/HTdu
ポインタとかGCとか高階関数とか
言語によってない機能はどうすんだろ

50: 名刺は切らしておりまして 2020/06/18(木) 01:57:35.18 ID:ALUktBkW

>>1
PythonからJavaへの変換:56.1%
JavaからPythonへの変換:68.7%

PythonからJavaの変換率が悪いのはなんとなく分かるけど、
逆のパターンも出来が悪いのはなんでなのかね

Javaなんてきっちり書かせる系言語の最右翼じゃん

51: 名刺は切らしておりまして 2020/06/18(木) 02:12:59.23 ID:/CulPwXm

Intel Labsの主任研究者兼ディレクターのJustin Gottschlich氏が
インタビューで答えていることがなにひとつプログラム言語翻訳の成果ではなくて
面白い

>これらはソフトウェア開発の無駄を取り除いてくれます。
>バグ対応の手間が省けるので、プロダクティビティの加速化に役立ちます。
>そして新たな職を生み出します。
>なぜならプログラミングをしたことのない人々でもこれらのインターフェイスを通じてクリエイティブな直観を形にすることができるからです。

54: 名刺は切らしておりまして 2020/06/18(木) 02:46:14.54 ID:fHdxspix
>>51
プログラム言語翻訳の成果じゃん
どう読み間違えたんだ?

53: 名刺は切らしておりまして 2020/06/18(木) 02:27:48.77 ID:6LPa6V0x
モックの繊維だけみたら全部作ってくれればよいんやで

55: 名刺は切らしておりまして 2020/06/18(木) 03:00:21.95 ID:Csf8+adC
100%でないものなんて使い物にならないような
0
1%でも抜けあるなら、結局全部だれかがチェックしないと駄目やん

56: 名刺は切らしておりまして 2020/06/18(木) 03:08:47.06 ID:3JsGnrtI
英語の翻訳ソフトのように、プログラムの文法や構文・関数の意味を
視覚的に表してくれるソフトでねーかな

57: 名刺は切らしておりまして 2020/06/18(木) 03:11:56.21 ID:Csf8+adC
>>56
日本には作れる企業はまずないだろうな
欧米頼み

58: 名刺は切らしておりまして 2020/06/18(木) 03:19:05.76 ID:4aoA9w7m
変換後のコードは人が読めるような物なのか?

59: 名刺は切らしておりまして 2020/06/18(木) 05:30:27.92 ID:X/AAx9Ff
やろうと思えばプログラムコードを別のプログラミング言語に変換するのって100%の精度でできるだろ
役に立たなさすぎ

62: 名刺は切らしておりまして 2020/06/18(木) 06:16:21.05 ID:lfFb9pMV
>>59
各言語で仕様が異なるので、100%の精度はまず不可能です。

60: 名刺は切らしておりまして 2020/06/18(木) 05:36:29.34 ID:eu2Vosef
こんな制度でアホか
作るよりデバッグの方が大変なことが分かってないニワカだな
ミズホに素材を貰って学習しなおせよ

61: 名刺は切らしておりまして 2020/06/18(木) 05:51:22.10 ID:mztzMRkp
これ、コンパイラコンパイラをニュラル的に作ったという話だよね
機種依存的になることとインタプリタ系にはできないけど
吐き出すアセンブリ言語を教師データにすれば良いのではないか?

64: 名刺は切らしておりまして 2020/06/18(木) 08:13:19.56 ID:kBXR9y3N
変換できなかった部分とオリジナルの違いとか考えると全く使えんな

3: 名刺は切らしておりまして 2020/06/17(水) 21:28:36.18 ID:Xx+137s0
こういうのはだいたい、不具合でて直そうとしたら人には理解できなくて苦労する

引用元

管理人からひと言

100%じゃないと困る(´・ω・`)

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

フォローする