Which is better for deep learning: Python or MATLAB?

# はじめに
「Deep learningをやりたいけど、PythonがMATLAB、どっちがいいの？」
「画像処理をやりたいけど（略）」
「自然言語処理をやりたいけど（略）」
「ゲームを作りたいけど（略）」
・・・

プログラミングでなにかしたい！と思ったときにはこんなことをまず考えますよね？

諸般の事情でMATLAB以外のプログラミング言語を使わざるを得ないケースや他の言語に目移りするケースもしばしば。
> 諸般の事情によりSimulink内でC言語を使わざるを得ないケース*というのが大人にはあります。
> ([MATLAB/Simulink Advent Calendar 2021| 1日目](https://qiita.com/motorcontrolman/items/756f175c0675f564790f)

> 最近はPythonでもMATLABでもGPU処理のアドオンやライブラリが出てきて、以前よりもGPUの活用がしやすくなっています。
> ([MATLAB/Simulink Advent Calendar 2021| ２日目](https://qiita.com/tommyecguitar/items/e268b012adea814beda1) by @tommyecguitarさん](https://qiita.com/tommyecguitar)

本記事では上述の疑問を解決してくれるシステムを紹介します。
（もちろん、**MATLABが最強！！**ですけど）

# CoQAS (Comparative Question Answering System)
「どのプログラミング言語を使ったらいいかわからない！」
そんな疑問にお答えするのが**CoQAS (Comparative Question Answering System)**[^CoQAS]です.

CoQASは、「XとYのどちらが良いか？（*Which is better, X or Y?*）」のような比較質問（Comparative question）に回答してくれます。

<img width="500" alt="Figure of the comparative QA workflow" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167418/64073183-d4a9-bc73-d6f5-b8094b46fd01.png">

（図は論文[^CoQAS]より引用）

CoQASは以下の３つのコンポーネントから構成されます。

- **自然言語処理理解モジュール**
- **Comparative Argumentative Machine**
- **自然言語生成モジュール**


### 自然言語処理モジュール (Natural language understanding module, NTU module)
ユーザが入力した文（user textual query）から比較対象（object）、観点（aspect）、述語(predicate)を特定します。
例えば、*Which is better for deep Learning: Python or MATLAB?* という文では、object は *Python* と *MATLAB*、aspect は *deep learning*、predicate は *better* です。

NTU module では、object と aspect　を特定するタスクを、系列ラベリング（sequence labeling）とみなし、入力である質問文に含まれるトークンを分類します。
論文では、BiLSTM[^BiLSTM]、BiLSTM-CRF、ELMO[^ELMO]、BERT[^BERT]、RoBERTa[^RoBERTa] による性能を比較検討しています。
後述の[ CoQASのonline demo ](#online-demo)では、その中で性能が最高だったRoBERTaが採用されています。


#### Comparative Argumentative Machine (CAM)
２つのモノ（object）を比較するシステムです[^CAM] [^CAM_web]。
与えられたモノに関する情報をウェブページから抽出、順位付けして出力します。
Live demoを[オンラインで利用](http://ltdemos.informatik.uni-hamburg.de/cam/)することができます。


#### 自然言語生成モジュール (Natural language generation module, NTG module)
CAMの出力をもとに、簡潔で意味の通った答えを生成します。
論文では、4つの手法を比較検討しています。

1. 事前学習モデルに基づく手法: CTRLモデル[^CTRL]を使って文を生成する
1. 文検索に基づく手法: CAMによる検索結果の上位３つの文を出力する
1. 文書検索に基づく手法: CAMの出力で最上位の文を含む文書における周りの3つの文を出力する
1. テンプレートに基づく手法: CAMの結果から objects、 aspects、 predicate を抽出して事前に設定したテンプレート（*I would prefer to use Object1 because it is Predicate1 and Predicate 2...*）に当てはめて出力する。

後述の[ CoQASのonline demo ](#online-demo)では、事前学習モデルに基づく手法（CTRL）、文検索に基づく手法（CAM）、文書検索に基づく手法（Snippet）が採用されています。


# Online demo
[プロジェクトページ](https://skoltech-nlp.github.io/coqas)から、 online demo が利用できます。
使い方はかんたん。

1. ブラウザに表示されるテキストボックスに質問を書く
1. 言語生成モジュール（NTG module)を決定する
1. Answerボタンを押す


では、最初に挙げたいくつかの疑問を解決しましょう。
今回は Python と MATLAB を比較対象にします。
* 生成結果は毎回変化するので、複数の結果を載せています
* 今回は、論文で文の流暢さ(Answer fluency)が高いとされていたCTRLを使用しました。

### 「Deep learningをやりたいけど、PythonがMATLAB、どっちがいいの？」
Answer: 場合による。
<img width="700" alt="Which is better for deep learning 1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167418/bdc0e877-94e1-e7b0-be82-159b1679ca64.png">
<img width="700" alt="Which is better for deep learning 2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167418/9019b964-cd1a-aa6c-6033-d35d4cf16bd4.png">

<img width="700" alt="Which is better for deep learning 3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167418/113f1d0d-db7b-aa5e-095d-4da40b01274c.png">

### 「画像処理をやりたいけど、PythonがMATLAB、どっちがいいの？」
Answer: 場合による。
<img width="700" alt="Which is better for image processing" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167418/c7f01871-927e-657f-4139-b5d3eb19f1be.png">

### 「自然言語処理をやりたいけど、PythonがMATLAB、どっちがいいの？」
Answer: 場合による。
<img width="700" alt="Which is better for natural language processing" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167418/b04ec63d-1bf6-fc0a-02c0-a03740b69529.png">

### 「ゲームを作りたいけど、PythonがMATLAB、どっちがいいの？」
Answer: 場合による。
<img width="700" alt="Which is better for natural language processing" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167418/d22c775e-28b7-f1a0-1bb8-efb584940cb9.png">


~~どっちがいいか、答えてないやん！！~~

# さいごに
２つのモノを比較する疑問に対して回答するCoQASをざっと紹介しました。
CoQASの結果は（おそらく）ウェブページの検索数に基づいています。
（詳細はCAMの論文[^CAM]にありますが、ちゃんと読めてません・・・）
なので、**MATLAB が Python よりも良い！**という記事を増やせば、同様のウェブページベースのシステムであれば MATLAB を推薦するようになるはずです。
（最初に書いたように、「もちろん、**MATLABが最強！！**です」というスタンスに基づいています）
MATLABの記事増加 → CoQASがMATLABを推薦 → MATLAB利用者増加→MATLABの記事増加 ... というループが回るようになるといいなあ。



### コメント
- [実装コード]（https://github.com/skoltech-nlp/coqas）が Python (Jupyter Notebook) だったので、ちょっと残念でした。![Screenshot 2021-12-11 20.02.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167418/2d530e45-5aaa-e2e3-dad2-f15f4a8ee2df.png)
- Webページベースなので、質問に答えない場合が多い。詳細は不明だが、結果が得られないことがよくある。
- タイトル（*Which Is Better for Deep Learning: Python or MATLAB? Answering Comparative Questions in Natural Language*）につられて勢いでAdvent calendarに登録してしまいましたが、QA関連の論文は読んだことがなかったので良い勉強になりました。
- 自然言語処理系の学会では、このようなアプリケーションを提案する研究を発表するセッション（System Demonstrations）があります。理論はもちろん大事ですが、実装して実際に触れる形になっていると個人的にポイント高いです。MATLABでもアプリケーション作成が簡単にできるので、活用していきたいですね。


[^CoQAS]: [Chekalina, Viktoriia, Alexander Bondarenko, Chris Biemann, Meriem Beloucif, Varvara Logacheva, and Alexander Panchenko. 2021. “Which Is Better for Deep Learning: Python or MATLAB? Answering Comparative Questions in Natural Language.” In Proceedings of the 16th Conference of the European Chapter of the Association for Computational Linguistics: System Demonstrations, 302–11. Online: Association for Computational Linguistics.](https://aclanthology.org/2021.eacl-demos.36/)
[^CAM]: [Schildwächter, Matthias, Alexander Bondarenko, Julian Zenker, Matthias Hagen, Chris Biemann, and Alexander Panchenko. 2019. “Answering Comparative Questions: Better than Ten-Blue-Links?” In Proceedings of the 2019 Conference on Human Information Interaction and Retrieval, 361–65. CHIIR ’19. New York, NY, USA: Association for Computing Machinery.](https://dl.acm.org/doi/10.1145/3295750.3298916)
[^BiLSTM]: [Arora, Jatin, Sumit Agrawal, Pawan Goyal, and Sayan Pathak. 2017. “Extracting Entities of Interest from Comparative Product Reviews.” In Proceedings of the 2017 ACM on Conference on Information and Knowledge Management, 1975–78. CIKM ’17. New York, NY, USA: Association for Computing Machinery.](https://dl.acm.org/doi/10.1145/3132847.3133141)
[^ELMO]: [Peters, Matthew, Mark Neumann, Mohit Iyyer, Matt Gardner, Christopher Clark, Kenton Lee, and Luke Zettlemoyer. 2018. “Deep Contextualized Word Representations.” In Proceedings of the 2018 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long Papers). Stroudsburg, PA, USA: Association for Computational Linguistics. https://doi.org/10.18653/v1/n18-1202.](http://dx.doi.org/10.18653/v1/n18-1202)
[^BERT]: [Devlin, Jacob, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. 2019. “BERT: Pre-Training of Deep Bidirectional Transformers for Language Understanding.” In Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long and Short Papers), 4171–86. Minneapolis, Minnesota: Association for Computational Linguistics.](https://aclanthology.org/N19-1423/)
[^RoBERTa]: [Liu, Yinhan, Myle Ott, Naman Goyal, Jingfei Du, Mandar Joshi, Danqi Chen, Omer Levy, Mike Lewis, Luke Zettlemoyer, and Veselin Stoyanov. 2019. “RoBERTa: A Robustly Optimized BERT Pretraining Approach.” arXiv [cs.CL]. arXiv. http://arxiv.org/abs/1907.11692.](https://arxiv.org/abs/1907.11692)
[^CAM_web]: [cam | Comparative Argument Machine](https://uhh-lt.github.io/cam/)
[^CTRL]: [Keskar, Nitish Shirish, Bryan McCann, Lav R. Varshney, Caiming Xiong, and Richard Socher. 2019. “CTRL: A Conditional Transformer Language Model for Controllable Generation.” arXiv [cs.CL]. arXiv. http://arxiv.org/abs/1909.05858.](https://arxiv.org/abs/1909.05858)