2017年8月から仕事において、AIMLと言う言語でコーディングする機会を頂いたことから少し調べてみました。この言語に触れるのは勿論初めて、名前も初👂、正式名称を和訳すると「人工知能モデリング/マークアップ言語」で第一印象は格好いい、頭が良さそうな?名前と言ったとこでしょうか。Wikipediaには下記の様に記載されています。

What’s AIML?

Artificial Intelligence Markup Language(アーティフィシャル・インテリジェンス・マークアップ・ランゲージ、AIML、エーアイエムエル)とは、自然言語ソフトウェアエージェント構築のためのXMLを応用したマークアップ言語である。AIMLはRichard Walleceと世界的なフリーソフトウェア・コミュニティにより、1995年から2002年にかけて開発された。当初の目的はELIZA(イライザ:初期の素朴な自然言語処理プログラムの1つ)を高度に拡張した”A.L.I.C.E.”(Artificial Linguistic Internet Computer Entity:自然言語処理を行うおしゃべりボットの1つ)と呼ばれるシステム向けであり、・・・(後略)「Wikipediaより抜粋」

仕事では「音声対話アプリケーションのデータ構築・検証」と言うことで、Wikipediaにも「XMLを応用したマークアップ言語」とある様に個人的にはXMLの親戚?の様な認識でしたが、独自に拡張した仕様だったこともあり通常より複雑だったかもしれません。音声対話アプリケーションは所謂、チャットボット(Chatbot:会話ロボット)のことです。また、最近良く耳にするAI(Artificial Intelligence:人工知能)とは別に「人工無脳」と言う言葉があります。人工知能は頻繁に聞きますが人工無脳は全くと言っていいほど聞きません。人工知能は「人工的な知能」と言うことで知的で賢いニュアンスがありますが、人工無能は「人工的な無能?」と言うことでイメージは言わずもがな・・・。そもそも言葉の定義が根本的に異なります。こちら⇨会話できるコンピューターは人工知能なのか? 人工無脳との違いは?の記事に分かり易い解説がありました。

要するに、

会話の文脈までを理解出来る(思考力有り)なら人工知能で、理解出来なければ人工無脳
自己学習出来る(機械学習有り)なら人工知能で、学習出来なければ人工無脳

とのことです。

AIML Tutorial

ネット上の情報量が少なく、「AIML」でググっても検索結果2ページからはほぼ英文の記事でチュートリアル(学習サイト)も全然無いですが、唯一とも言うべきチュートリアルがありました。日本語に翻訳してもいいですが正確に和訳されないことが多々あるので箇所によっては原文のまま解釈した方が良さそうです。また、こちらのサイト、怪しげな広告が表示されていたりアクセス出来なくなることがあります。下のキャプチャを撮った際もしばらくサイトにアクセス出来ず、広告が全て消えていて不自然な広告のスペースだけが残っています。少し問題有りのサイトなのかもしれません。

http://www.w3ii.com/en-US/aiml/default.html

他にもチュートリアルを探したところ、ありましたが中身は上記と同一でした。こちら⇩は特に問題なさそうです。

https://www.tutorialspoint.com/aiml/index.htm

Home/Introduction

Homeの頁ではAIMLはArtificial Intelligence Modelling Languageの略とありますが、Introductionの頁ではArtificial Intelligence Markup Languageの略とあり、どちらが正かは謎です。そして、AIMLの記述において共通して使用される最も基本的なタグが以下4つで、基本的に1つのAIMLファイルは<aiml>〜</aiml>の開始タグと終了タグが1セット、残りの3つのタグが1セット以上の構成から成ります。

1.<aiml>〜</aiml>:所謂、開始タグと終了タグです
2.<category>:知識単位を定義したものとありますが、次の<pattern>タグと<template>タグを1組とした単位と捉えた方が分かり易いかもしれません
3.<pattern>:ユーザー発話を定義します。実際には文言だけでなくIDの指定も可能で、タグ名と同じ言い方だと抽象的で分かり難い表現になりますが、タグ名の通りユーザー側の発話の"パターン"を定義します
4.<template>:<pattern>タグとは反対にbot(システム)側の応答を、条件分岐などを含め様々なロジックと共に定義します

上記4つの基本的なタグの他に、<star>タグから<condition>タグのような種類があります。

Environment Setup

環境設定です。Step 1で「Set up Java Development Kit (JDK)」とあるのでJDKが必要な様です。

Step 1 – Set up Java Development Kit (JDK)

ここではMacなので、ターミナルから下記コマンドでJDKを確認します。

Step 2 – Set up Program AB

次に、Program ABと言うzipファイルをDownloadします。下記リンク先より最上部の最新バージョンprogram-ab-0.0.4.3.zipをDownloadします。

https://code.google.com/archive/p/program-ab/downloads

First Application

botsディレクトリ配下にtestディレクトリ、testディレクトリ配下にaiml、aimlif、config、sets、mapsのディレクトリを作成します。

ソースファイルを用意します。aimlディレクトリにtest.aiml、aimlifディレクトリにtest.aiml.csvを作成します。

プログラム実行前に、program-ab-0.0.4.3/run.shのbot=superの箇所をbot=testに修正します。

プログラムを実行します。

動確します。Hello Aliceと入力してEnterでHello Userと応答します。また、byeの場合はI have no answer for that.と返ります。

また、「Basic Tags」の頁の「<pattern> tag」の項目にも記載されている様に大文字、小文字は区別しません。

今回、たまたま仕事のご縁でチャットボットの開発と、このAIMLと言うマークアップ言語でのコーディングに初めて携わり、2017年8月から2018年5月まで都内某プロジェクト内のAIMLチームにてAIMLマークアップエンジニアとしてひたすら毎日コーディングに明け暮れました。使用していたエディタはAtomだけで、実装、改修を合わせると行数にして合計は優に1万は軽く超えていたかと思います。XMLがベース故に根底はデータ構築を主としたマークアップ(コーディング)かと思いますが、分岐処理もあったりとプログラミング言語の要素も含んでいると感じました。因みに、自身が担当していたAIMLと連携を取っていた言語はJavaでしたので、<template>タグ内ではJavaのシステムへのリクエスト、レスポンス、同一AIMLファイル内での別categoryへの遷移、他AIMLファイルへの遷移、エラー処理など、上記チュートリアルに出てくるcategory(正確には<template>タグの中身)とは当然ですが比較にならないくらい複雑でした。何はともあれエンジニアとして新たに非常に良い経験をさせて頂いた10ヶ月間でした。