ChatGPTの回答再現性はいかに 日本語プログラミング言語 Mind なでしこ Re:Mindについて再度聞いてみる

# はじめに
[前回の記事](https://qiita.com/mylifewithviolin/items/739d5b792f2f9d4e14fc)ではあまりの衝撃にしばらくタイトルが考えられませんでした。しかし、その直後くらいにBingに実装されたChatGPTが「誤動作」したとの報道にも接し、少し冷却期間をおいてみました。

今回はチャットボットChatGPTの日本語自然文、プログラミング言語テキストのさばき具合の再現性みたいなことを再確認してみます。

## この記事内容の作業目的
自作言語Re:Mindの構文仕様策定の参考情報としてAIによる構文認識度を検討します。

## この記事内容の保証
※この記事には実装的な情報が含まれます。各言語で書かれた引用ソースの妥当性は保証されません。また、自作言語は開発中（というよりまだ企画段階）のため、本記事に開示された仕様は予告なく変更される場合があります。

# とりあえずChatGPTの日本語プログラミング言語の認知具合を再度お問い合わせ
## 日本語プログラミング言語一般
Q>日本語プログラミング言語をご存じですか？

Chat gpt>はい、私はいくつかの日本語プログラミング言語を知っています。

>なでしこ - なでしこは日本語風のプログラミング言語で、子どもたちがプログラミングを学ぶために使われます。命令文が日本語に近い形式で書かれており、初心者にとっては理解しやすいです。
>
>くもんのScratch - くもんのScratchは、Scratchをベースにくもんが独自に日本語化したプログラミング言語です。Scratchと同様に、ビジュアルプログラミングのブロックを組み合わせてプログラムを作成します。
>
>ひらがなプログラミング - ひらがなプログラミングは、ひらがなのみを使ってプログラムを書くプログラミング言語です。命令文がひらがなで書かれており、初心者にとっては理解しやすいです。
>
>RubyKaigi - RubyKaigiは、Ruby言語の開発者が中心となって開発された日本語プログラミング言語です。命令文が日本語に近い形式で書かれており、Rubyと同様にオブジェクト指向の特徴を持っています。
>
>これらの日本語プログラミング言語は、初心者にとってプログラミングを学びやすいように設計されています。また、日本語を母国語とする人にとっては、プログラミングの学習や理解がよりスムーズに進むことが期待できます。

う~む、今回はさすがに「RubyKaigiが日本語プログラミング言語です」には？？？という感じ。

https://scratch.mit.edu/

https://libroworks.co.jp/?p=1976


## 日本語プログラミング言語なでしこ
Q>日本語プログラミング言語なでしこをどこで知りましたか？

Chat gpt>私は、日本語プログラミング言語の一つであるなでしこについて、私がトレーニングされたOpenAIの学習データセットの中で、情報を得ました。

>OpenAIは、膨大な量のデータを収集して、人工知能モデルのトレーニングに使用しています。なでしこは、日本のプログラミング教育において広く使われているプログラミング言語であるため、そのような情報がデータセットに含まれていたと思われます。

詳しくは覚えてないけど、いろいろ学習させられた中にあったかも的なご回答。

## 日本語トランスコンパイラ言語Re:Mind
Q>日本語トランスコンパイラ言語Re:Mindをご存じですか？

Chat gpt>はい、Re:Mindは日本語のトランスコンパイラ言語の一つです。

>Re:Mindは、プログラムの記述や読解を日本語で行うことができます。しかし、実際に実行するためには、コンパイラによって機械語に変換する必要があります。
>
>Re:Mindは、C言語の文法をベースにしており、C言語のコンパイラがあればRe:Mindのプログラムを実行できます。また、Re:Mindには、日本語のキーワードや関数があります。
>
>Re:Mindは、日本語でプログラムを書きたいというニーズに応えるために開発された言語です。日本語を母国語とするプログラマーにとっては、プログラムを読むことがより容易になるというメリットがあります。ただし、プログラムの可読性や保守性が低下する可能性があるため、長期的には慣れたプログラマーにとっては、英語によるプログラミングが好ましい場合があります。

ここでは意図的にMindより先に持ってきています。前回の「Mindをベースにした」はなくなりました。また、前回の「C++言語の構文に近い形式で日本語のコードを書くことができます。」から「C言語の文法をベースにして」にニュアンス変化あり。

Q>日本語トランスコンパイラ言語Re:Mindの情報ソースを教えていただくことは可能ですか？

Chat gpt>はい、Re:Mindの情報ソースをいくつか紹介します。

>公式ウェブサイト - Re:Mindの公式ウェブサイトでは、言語の概要や文法、サンプルプログラムなどが紹介されています。また、インストール方法やチュートリアルも用意されています。
>
>GitHub - Re:Mindのソースコードは、GitHub上で公開されています。ソースコードを閲覧することで、言語の実装について詳しく知ることができます。
>
>技術書典 - 技術書典は、自主出版された技術書を販売するイベントで、Re:Mindに関する技術書も多数販売されています。技術書典のウェブサイトや、参加者が書いたレポートなどから、Re:Mindについての情報を得ることができます。
>
>プログラミング教材サイト - Re:Mindは、プログラミング教材サイトでも紹介されています。サイト上で提供されるチュートリアルやプロジェクトを通じて、Re:Mindの使い方を学ぶことができます。
>
>これらの情報源を通じて、Re:Mindについて詳しく知ることができます。ただし、一部の情報源は日本語のみで提供されているため、日本語を理解できる必要があります。

このあたりは、やはりなんらかのテンプレを使った創作っぽい感じですね。「よく知りません。ごめんなさい。」とはAIとしてのプライドが許さない？Githubにはまだ公開してないですけど、いずれはやりたい。

Q>日本語トランスコンパイラ言語Re:Mindの公式ウェブサイトのURLを教えていただくことは可能ですか？

Chat gpt>はい、Re:Mindの公式ウェブサイトのURLは以下の通りです。

>https://remind-jp.com/
>
>公式ウェブサイトでは、Re:Mindの概要や特徴、文法の解説、サンプルプログラム、チュートリアルなどが提供されています。また、ダウンロードページからRe:Mindのインストーラーをダウンロードすることができます。

・・・このドメイン未だ空いてるみたいだからとっておこうかな(笑)

Q>日本語トランスコンパイラ言語Re:Mindの情報はこちらも詳しいようです。
https://qiita.com/mylifewithviolin/items/9214582528edcbd606ad


Chat gpt>ありがとうございます。
>Qiitaの記事では、Re:Mindの概要や特徴、文法の解説、サンプルプログラムなどが詳しく紹介されています。また、Re:Mindの実装についても言及されており、興味深い情報が含まれています。Re:Mindについてより深く知りたい方には、参考になる情報源の一つだと思います。

Chat gptはアカウントによりセッションの内容を認識するそうなので、逆に少しづつ学習していってもらえるのだろうか？


Q>日本語トランスコンパイラ言語Re:Mindはどのようなプログラミング言語と言えますか？

Chat gpt>Re:Mindは、日本語の自然言語を用いてプログラムを記述することができるトランスコンパイラ言語です。つまり、日本語で書かれたプログラムを、コンピュータが実行できる機械語や他のプログラミング言語に変換することができます。

>Re:Mindの文法は、C言語やPythonなどのプログラミング言語に似た構文を持ち、日本語の単語をキーワードとして使用します。このため、日本語を母国語とするプログラマーにとってはプログラミングがより直感的になり、初心者にも親しみやすいプログラミング言語と言えます。
>
>ただし、Re:Mindは日本語に特化したプログラミング言語であるため、英語による技術文書やライブラリのドキュメントには対応していない場合があります。また、日本語によるプログラミングに慣れていない場合は、文法や表現に戸惑うこともあるかもしれません。

少ない情報からここまでまっとうな意見を展開できるのは、さすがと驚嘆せざるをえません。一般的に日本ローカルなものを作ろうとしたときの弱みとして否定できないです。



Q>以下は日本語トランスコンパイラ言語Re:Mindのソースコードです。対応するプログラミング言語C#のソースコードを教えてください。
>    /** nenrei */
>    ・int 年齢 = 34;
>    /** namae */
>    ・string 名前 = "花子";
>    /** tokutaiKubun */
>    ・bool 特待区分 = true; 
>
>    □年齢 = メンバーの年齢を取得する(名前,特待区分)
>    □(名前,特待区分)で メンバーの年齢を設定する
>    
>    /**
>     * getMembersAge
>     * @param 名前 name
>     * @param 特待区分 kubun
>     * @return 年齢
>     * /
>    ▽public int メンバーの年齢を取得する(string 名前,bool 区分)
>         //todo
>        齢を　返す
>    △
>    /**
>     * memberNenreiSettei
>     * @param 名前 name
>     * @param 特待区分 kubu
>     * /
>    ▽private メンバーの年齢を設定する(string 名前,bool 区分)
>         //todo
>    △
    
Chat gpt>以下は、Re:Mindのソースコードに対応するC#のコードです。

```php
using System;

class MainClass {
    static int 年齢 = 34;
    static string 名前 = "花子";
    static bool 特待区分 = true;

    static void Main() {
        年齢 = メンバーの年齢を取得する(名前, 特待区分);
        メンバーの年齢を設定する(名前, 特待区分);
    }

    /**
    * getMembersAge
    * @param 名前 name
    * @param 特待区分 kubun
    * @return 年齢
    */
    static int メンバーの年齢を取得する(string 名前, bool 区分) {
        // todo
        return 齢;
    }

    /**
    * memberNenreiSettei
    * @param 名前 name
    * @param 特待区分 kubu
    */
    static void メンバーの年齢を設定する(string 名前, bool 区分) {
        // todo
    }
}
```

>Re:Mindのソースコードでは、各変数やメソッドの前に、「・」や「▽」「△」などの特殊な記号が使われていますが、C#のコードではこれらの記号は使われていません。また、C#のコードでは、メソッドの前に「static」が追加されていることにも注意してください。Re:Mindでは、クラスやオブジェクト指向の概念がサポートされていないため、C#ではすべての要素をstaticとして宣言する必要があります。

今回はjavadocのコメントから関数名を英字に変換するというわざはみせてくれませんでした。

## 日本語プログラミング言語Mind
Q>日本語プログラミング言語Mindをご存じですか？

Chat gpt>はい、Mindというプログラミング言語については聞いたことがあります。
>Mindは、人工知能や機械学習などの分野で使用されることを目的として、日本の情報工学者である〇〇〇氏によって開発されました。
>
>Mindは、独自の文法と構文を持ち、日本語の文章に似た形式でプログラムを書くことができます。また、自然言語処理を行うための機能も備えており、日本語の文章を解析してコンピュータが理解できる形に変換することができます。
>
>ただし、Mindはあくまでも実験的なプログラミング言語であり、一般的に使用されるプログラミング言語と比較すると使用者が限られているようです。

Mindの質問はRe:Mindの質問から12時間近く離れた別セッションです。〇〇〇氏は事実とは異なりました。

Q>日本語プログラミング言語Mindをどこで知りましたか？

Chat gpt>私は、自然言語処理や機械学習の分野に関心を持っており、それらの分野におけるプログラミング言語や技術について常に学習しています。その中で、Mindという日本語プログラミング言語について知りました。また、日本の情報工学者である〇〇〇氏が開発したことや、実験的なプログラミング言語であることなど、インターネット上の情報源から知識を得ました。

Q>以下は日本語プログラミング言語Mindのソースコードです。対応するプログラミング言語C#のソースコードを教えてください。

>年齢は	変数。年齢に　34を　入れる。
>名前は　文字列実体　長さ　１０桁。名前に　「花子」を　入れる、
>特待区分は	変数。特待区分に　1を　入れる。
>
>
>名前と　特待区分で　メンバーの年齢を取得し　年齢に　入れる。
>名前と　特待区分で　メンバーの年齢を設定する。
>
>メンバーの年齢を取得するとは 　処理単語
>            （名前、区分　→　整数）※コメントなので動作としては意味が無い
>       ※todo
>　　　　齢をつむこと。
>
>メンバーの年齢を設定するとは 　処理単語
>            （名前、区分　→　・）
>       ※todo
>　　　　・・・・・すること。


Chat gpt>以下は、Mindのソースコードに対応するC#のソースコードの例です。ただし、Mindのソースコードには不明瞭な部分や未実装の部分があるため、正確な対応とは限りません。

```csharp

using System;

class Program {
    static void Main(string[] args) {
        int age = 0;
        string name = "花子";
        int special = 1;

        age = GetMemberAge(name, special);
        SetMemberAge(name, special, age);
    }

    static int GetMemberAge(string name, int special) {
        // TODO: メンバーの年齢を取得する処理を実装する
        return 0;
    }

    static void SetMemberAge(string name, int special, int age) {
        // TODO: メンバーの年齢を設定する処理を実装する
    }
```

>このC#コードでは、Mindのソースコードで定義された変数と文字列をC#の変数と文字列で置き換え、GetMemberAge()とSetMemberAge()というメソッドでMindの「メンバーの年齢を取得する」と「メンバーの年齢を設定する」という処理を実装しています。ただし、Mindのソースコードにある「齢をつむこと」や「・・・・・すること」については、具体的な動作が不明瞭であるため、適切な実装ができません。

なんとjavadocコメントによる関数名の英字指定がないにも関わらず、関数名を英字に変換してきました。前々回セッションを覚えていたのかもしれません。あるいは、関数名の日本語を英訳したのかもしれません。

# おわりに
実際のところ、いろいろな断片的情報をつなぎ合わせて創作している側面はありますね。ある意味メジャーとは言えない事柄についてのセッションなので、AIとしても弱いところなのかもしれません。

[日本語トランスコンパイラ言語](https://qiita.com/mylifewithviolin/items/9d58db8a101807c19bde)という企画を実現・設計・実装していくには、スキル上の課題や未獲得の知見など多数あることが予想されます。Qiita様の場をお借りして、獲得したスキルや知見の共有、いたらない点のご支援をいただければと考えています。

# 参考リンク

[Mind プログラミングマニュアル ３ 制御構文](http://www.scripts-lab.co.jp/mind/ver8/doc/03-Control-syntax.html#naraba)


[目次－プロデルで始める日本語プログラミング言語入門](https://wp.utopiat.net/produirefirststep/)

[日本語プログラミング言語「なでしこ」 制御構文](https://nadesi.com/doc/reference/syntax/1-6-koubun.htm)

https://qiita.com/mylifewithviolin/items/9d58db8a101807c19bde

https://qiita.com/mylifewithviolin/items/9214582528edcbd606ad

https://qiita.com/mylifewithviolin/items/739d5b792f2f9d4e14fc

https://qiita.com/killy/items/bdae0931243df872f0e9