ChatScriptは、もともとチャットボットの作成用に設計された自然言語エンジンと対話管理システムの組み合わせですが、現在ではさまざまな形式の自然言語処理にも使用されています。C ++で書かれています。このエンジンはSourceForge [1]とGitHub [2]のオープンソースプロジェクトです。
ChatScriptはブルース・ウィルコックスによって書かれ 、2011年に最初にリリースされました。これは、ChatScriptで書かれたSuzetteが4人の審査員のうち1人を騙して2010年のローブナー賞を受賞した後のことでした。[3]
特徴
一般的に、ChatScript は極めて簡潔に作成することを目的としています。これは、手動で作成されたチャットボットのスケーラビリティが、スクリプトをどれだけ速く作成できるかによって制限されるためです。
ChatScript は対話型の会話用に設計されているため、ボレー全体にわたってユーザーの状態を自動的に維持します。ボレーとは、ユーザーが一度に入力する任意の数の文と、チャットボットの応答のことです。
スクリプトの基本要素はルールです。ルールは、タイプ、ラベル (オプション)、パターン、および出力で構成されます。ルールには 3 つのタイプがあります。Gambits は、チャットボットが会話を制御しているときに言う可能性のあるものです。Rejoinders は、チャットボットが言ったことと結びついたユーザーの発言に応答するルールです。Responders は、チャットボットが言ったことと必ずしも結びついていない任意のユーザー入力に応答するルールです。パターンは、ルールが実行される条件を説明します。パターンは、非常に単純なものから非常に複雑なもの (Regex に似ていますが、NL を対象としています) まであります。通常、意味を共有する単語のリストである概念セットが頻繁に使用されます。ChatScript には約 2000 の定義済み概念が含まれており、スクリプト作成者は独自の概念を簡単に作成できます。ルールの出力では、ユーザーに送信されるリテラル単語と一般的な C スタイルのプログラミング コードが混在します。
ルールはトピックと呼ばれるコレクションにまとめられます。トピックにはキーワードを含めることができ、これによりエンジンはユーザー入力に基づいてトピック内の関連するルールを自動的に検索できます。
サンプルコード
トピック: ~食べ物( ~果物 果物 食べ物 食べる)
t: あなたの好きな食べ物は何ですか?
a: (~フルーツ) 私もフルーツが好きです。
a: (~metal) ヘビーメタルを食べるより、ヘビーメタルの音楽を聴く方が好きです。
?: WHATMUSIC ( << どんな音楽が好きですか >>) 私はロック音楽が好きです。
s: ( 私は * ~like * _~music_types) ^if (_0 == country) {私はカントリーが好きではありません。} else {私も好きです。}
~ で始まる単語は概念セットです。たとえば、~fruit は既知のすべての果物のリストです。単純なパターン (~fruit) は、チャットボットが好きな食べ物を尋ねた直後に果物が言及された場合に反応します。WHATMUSIC というラベルの付いたルールの少し複雑なパターンでは、what、music、you、および「好き」を意味する単語またはフレーズがすべて必要ですが、順序は問いません。レスポンダーには 3 つのタイプがあります。?: ルールはユーザーの質問に反応します。s: ルールはユーザーの発言に反応します。u: ルールはどちらにも反応します。
ChatScript コードは、標準の if-else、ループ、ユーザー定義の関数と呼び出し、および変数の割り当てとアクセスをサポートします。
データ
ChatScript の一部のデータは一時的なもので、現在のボレーが終了すると消えます。その他のデータは永続的で、明示的に削除されるまで永久に残ります。データは 1 人のユーザーに対してローカルにすることも、ボット レベルですべてのユーザー間で共有することもできます。
内部的にはすべてのデータはテキストとして表され、必要に応じて自動的に数値形式に変換されます。
変数
ユーザー変数にはいくつかの種類があります。トピックまたは関数に完全にローカルな変数は一時的です。グローバル変数は一時的または永続的として宣言できます。変数は通常、単に使用することで宣言され、その型はプレフィックス ($、$$、$_) によって決まります。
$_local = 1は1が割り当てられるローカル一時変数です
$$global1.value = “hi”はJSONオブジェクトである一時的なグローバル変数です
$global2 += 20は永続的なグローバル変数です
事実
変数に加えて、ChatScript はファクト (一時的または永続的なデータの 3 つ組) をサポートします。関数は、一部のフィールドに特定の値を持つファクトを照会して、メモリ内データベースのように動作させることができます。ファクトの取得は非常に高速かつ効率的で、使用可能なメモリ内ファクトの数は、ChatScript エンジンを実行しているマシンの使用可能なメモリに大きく制限されます。ファクトはレコード構造を表すことができ、ChatScript が内部的に JSON を表す方法です。情報のテーブルを定義して、適切なファクトを生成できます。
表: ~発明者(^誰^何)
createfact(^誰が発明した^何を)
データ:
「ヨハネス・グーテンベルク」「印刷機」
「アルバート・アインシュタイン」 [「相対性理論」光子「一般相対性理論」]
上記の表は、人々とその発明品(1 行に 1 つ)を結び付けており、アインシュタインは自分が行ったことのリストを取得しています。
外部コミュニケーション
ChatScript には Curl ライブラリが埋め込まれており、JSON 形式のデータを Web サイトに直接読み書きできます。
サーバ
ChatScript エンジンは、ローカル モードまたはサーバー モードで実行できます。
POSタグ付け、解析、オントロジー
ChatScript には、オントロジーを含む英語のWordNetのコピーが組み込まれており、概念宣言によって独自のオントロジーを作成および拡張します。英語の pos タグ付け機能とパーサーを備えており、他の多くの言語の pos タグ付けのために TreeTagger との統合をサポートしています (TreeTagger の商用ライセンスが必要です)。
データベース
内部ファクト データベースに加えて、ChatScript はスクリプトによるアクセス用にPostgreSQL、MySQL、MSSQL、MongoDB をサポートしていますが、必要に応じて中央ファイルシステムとしてもサポートしているため、ChatScript を水平方向に拡張できます。一般的な使用例は、集中型データベースを使用してユーザー ファイルをホストし、複数のサーバーを使用して ChatScript エンジンを拡張することです。
JavaScript
ChatScript には、DukTape、ECMAScript E5/E5.1 互換性も組み込まれており、一部のセマンティクスは ES2015+ から更新されています。
スペル修正
ChatScript には自動スペルチェック機能が組み込まれており、スクリプト内で単純な単語の置き換えやコンテキストに応じた変更として拡張できます。適切な単純なルールを使用すると、完全な法的単語を他の単語に変更したり、削除したりできます。たとえば、~electronic_goods というコンセプトがあり、Radio Shack (店舗名) の入力が電子製品として検出されないようにするには、入力を Radio_Shack (単一の単語) に変更するか、単語はそのままにしてコンセプトの検出をブロックすることができます。
これは、音声テキスト変換コードが不完全であっても、その一般的な欠陥を理解しており、スクリプトでそれを補うことができる場合に特に便利です。
制御フロー
チャットボットの制御フローは、制御スクリプトによって管理されます。これは、エンジンの API 関数を呼び出す、単なる通常のルールのトピックです。したがって、制御はスクリプト作成者によって完全に構成可能です (エンジンへのイントロスペクションを可能にする関数が存在します)。特別な処理のために、前処理制御フローと後処理制御フローのオプションが用意されています。
参考文献
- ^ ChatScript、SourceForge
- ^ [1]、GitHub
- ^ 受賞チャットボットが会話を導く、ニューサイエンティスト、2010年10月27日
外部リンク
- GitHub上の ChatScript
