LoginSignup
9
5

More than 5 years have passed since last update.

Watson Conversationの「システム・エンティティ」の日本語対応の様子を調べた(2017/09月時点)

Last updated at Posted at 2017-09-12

はじめに

Watson Conversationにシステム・エンティティが追加され日本語もサポートされましたが、ドキュメントの例文が英語しかないので、「日本語でどんな表現が使えるの?」を調べてみました。

  • 「個人的にやってみたら、2017/09月時点ではこうだった」という結果です
  • 今後も引き続き機能強化・改善されると思います
  • 日本語環境での結果です

システム・エンティティとは?

Watson Conversationでの「エンティティ」(~を、に相当するもの)は基本、文脈に沿って抜き出したい内容をご自身でエンティティとして定義する必要があります。しかし「日付」や「時刻」などの汎用・共通的なものまでユーザー側で定義するのは大変ですので、Watson側で提供することにしたのが「システム・エンティティ」です。要はいちいち定義しなくても使えるエンティティです。

image

現時点では以下のシステム・エンティティが利用可能です。今回は日本語対応が興味の対象なので1-5のみ使っています。

# 種類 エンティティ 日本語対応
1 日付 @sys-date
2 時刻・時間 @sys-time
3 数値 @sys-number
4 通貨 @sys-currency
5 パーセント @sys-percent
6 場所 @sys-location ×(英語のみ-Beta)
7 人名 @sys-person ×(英語のみ-Beta)

認識したシステム・エンティティは①ノードでの条件判定で指定 したり ②コンテキストに保管 して利用できます。

【インテント=予約で日付も一緒に指定があった場合の例】
image

【レスポンスの条件にも指定できます】
image

【スロットでも使えます】
image

なお、認識したエンティティには各々「属性(Attribute)」があり、様々な表現で判定やレスポンス中に記述できます。例えば以下は「通貨(@sys-currency)」での属性の例です。(詳しくはドキュメントをご参照ください)

Attribute Type 意味 例) 「1000円」を認識すると
@sys-currency string 通貨数量 1000
@sys-currency.literal string 入力 1000円
@sys-currency.numeric_value number 通貨数量 1000
@sys-currency.location array 入力中で出現する開始・終了位置 [0,5]
@sys-currency.unit string ISO通貨コード JPY

ドキュメント:
System entity details
Supported Languages

システム・エンティティの有効化

システム・エンティティは
- デフォルトでは無効化されていますので使う際は有効化します
- ワークスペース単位・カテゴリー単位で使う・使わないを指定できます

image

日本語を扱う場合はワークスペースを作成する際に「Japanese」を選択します

image

調査方法

日本語環境で色々な表現(文)を入力して、認識するか?どう認識したか?を調査しました。
- 簡単なツールを作成して、まとめて確認しました
- 「個人的にやってみたら、2017/09月時点ではこうだった」という結果
- =「仕様」とは言えませんし、先々機能強化で変わるかもしれません
- 記事では「主だった結果・所見」だけ記載します。明細は別ページ「参考資料」に掲載します。

image

なお、作ったアプリはBluemixの提供するGitLabに置いておきますので、cloneすればご自身のPC環境でも動かせます。よろしければご利用ください。

調査結果や印象

全般

特に「日本語特有の表現をどこまで許容するか?」に興味があったのですが、結果から見ると、まあいい線行ってました。例えば以下などは大筋オッケーでした。

  • 漢用数字(例. 一/二/三/百/千)
  • 全角・半角
  • 言葉での表現    (例. 明日、今、来年、月曜)
  • 相対的な時間軸の表現 (例. 次の月曜)

今回のテストでは「こんな入力、普通しないだろ!」というものもやってみたので「認識できない」「誤って認識した」ものもありますが、まあ普通の(=素直な)表現の対話であれば大丈夫かな、という印象を持ちました。

とはいえ以下のような注意点もありますので、エンティティを認識した後の「利用者への確認」(XXでよろしいですか?)は必要だと思います。

  • 独特の解釈ルール、癖 
    • 例)「1月に」→ 月初日~月末日までの「範囲」となる
    • 「来月の15日」→ 「来月」のみ認識され15日は無視される
  • 「誤認識」~文章で表現する以上、正確な認識には限界がある
    • 例) 「来月の第一月曜」→「来月」と「一月」と別々に認識される
    • 「この前の月曜」はOKだが「このまえの月曜」や「先日の月曜」はNG
    • 「10月1日から3日間」→「10月1日」と「今日から3日間(範囲)」と別々に認識される

◆「聞き方を工夫する」こともあるでしょう。例えば「いつがいいですか?」と聞いたら利用者は自由な表現・言い方で日付を指定してきますが、「YYYY/MM/DDの形式でお聞かせください」とお願いすれば合わせてくれる可能性が高いです。
◆認識した値の形式をSpELの正規表現でチェックする、なども可能でしょう。

以下、個別のエンティティについて記載します。

日付(@sys-date)

仕様サマリー

  • 認識フォーマットは YYYY-MM-DD
  • ①特定の日付を返す場合( 「今日」=>2017/09/01 )
  • ②日付の範囲を返す場合(「9月」=> 2017/09/01と2017/09/30の2つ)

利用に際しての注意点

  • API利用時、日付と時刻はデフォルトでは「UTC」ベースですので、「今日」や「今」は世界標準時刻で返ります。日本の現地時間で欲しい場合(普通は、そうでしょう)は /messageの contextでtimezoneを"Asia/Tokyo"か"Japan"に設定する必要があります
  • image
  • Dialogの「Try it out!」では上記対応済です

正しく認識できた表現の例

今日(実行日)=2017/09/08です

表現 認識結果 コメント
2017/09/08 2017/09/08 YYYY/MM/DD
2017年9月8日 2017/09/08 年月日表現
12/31 2017/12/31 年がなければ「今年」
一月十五日 2017/01/15 年がなければ「今年」
1月 2017/01/01と2017/01/31 範囲
2017年 2017/01/01と2017/12/31 範囲
平成30年1月1日 2018/01/01 和暦
昨日・きのう 2017/09/07  
今日・きょう 2017/09/08  
明日・あした 2017/09/07  
明後日・あさって 2017/09/10  
一昨日・おととい 2017/09/06  
1ケ月後 2017/10/08  
今週末 2017/09/09と2017/09/10 週末=土日
今週 2017/09/03と2017/09/09 日曜から土曜まで

注意を要する表現の例

表現 認識結果 コメント
15日 n/a 「いつの15日か」が特定できないので認識しない
再来月・さ来月 2017/10/01と2017/10/31 「来月」として認識
九月 2018/09/01と2018/09/30 来年の」9月
十月 2017/10/01と2017/10/30 今年の」10月
2月29日 2017/03/01 2017年はうるう年ではないので計算している
12/01/01 1970/12/01 年が2桁=1~12は月と認識
13/01/01 2013/01/01 年が2桁=13以上は年と認識
3か月 2017-12-08 「範囲」ではなく「3か月後の日」となる
来週の月曜から金曜まで 2017/09/11 「来週の月曜」のみ認識
来週の今日 :2017-09-10 と2017-09-16と2017-09-08 「来週」と「今日」を別々に認識
成人の日・クリスマス・大晦日 n/a 祝日や行事には未対応の模様

個別の実行結果は参考資料にあります。

時刻・時間(@sys-time)

仕様サマリー

  • 認識フォーマットは HH:MM:SS

利用に際しての注意点

  • @sys-dateと同様にデフォルトでは「UTC」ベース
  • 特定の「時刻」=「点」を表現するものであり(一分間・60分間などの)「時間の幅・範囲」のためのものではないように見受けられる

正しく認識できた表現の例

今(実行時間)=2017/09/11 12:16:42です

表現 認識結果 コメント
1:00 01:00:00 HH.mm.ss
23:59:59 23:59:59 HH.mm.ss
1時・一時 01:00:00 漢数字も認識
二時二分二秒 02:02:02 同上
午前9:00・AM9:00 09:00:00  
午後9:00・PM9:00 21:00:00  
9時半 09:30:00 時刻が数字なら「半」もOK
2017-09-11と12:16:42 日付と時刻の両方を認識
2時間後 14:17:45  
今晩 2017-09-11と18:00:00 「晩」は18:00らしい
2012/06/30 23:59:00 2012-06-30と23:59:00  

注意を要する表現の例

表現 認識結果 コメント
九時半 09:00:00 「九」が漢数字だと「半」が無視される
3時間の間 15:16:52 3時間「後」と認識
10時10分前 02:07:40 9:50ではなく10時間10分前の時刻になる
今から10分後 2017-09-11と12:17:44と01:00:00 「今」と「10分後」で別々に認識
1秒・1分 n/a 「1時間」は「1時間後」となるが分・秒等の「時間の幅」は認識しない
0.1分・0.1秒 00:01:00 1分と解釈。0.1秒は誤り

個別の実行結果は参考資料にあります。

数字(@sys-number)

ご説明

要は「数字」です

正しく認識できた表現の例

表現 認識結果 コメント
1000 1000  
1,000 1000 3桁カンマ
2万一千 21000  数字・漢数字および混在 
1.1 1.1 小数点
60兆・六十兆 60000000000000   
-1000 -1000  マイナス
-10,000 -10000  マイナスとカンマ

注意を要する表現の例

表現 認識結果 コメント
10,00 n/a カンマ位置が誤っていると認識しない
1.1 sys-time:01:01:00と sys-number:1.1 ( 1 ) numberは正しいが無効な時刻も同時に認識
1,000,000 1と0 全角と半角が混在すると誤り
ー1000 1000  全角マイナスは無視

個別の実行結果は参考資料にあります。

通貨(@sys-currency)

ご説明

  • 数値(@sys-number)から派生した通貨表現です
  • 数値と通貨単位から成ります

利用に際しての注意点

  • 現時点ではいくつか誤認識する問題があるようなので、(お金はセンシティブでもあり)@sys-currencyは要注意です。もし使うなら利用者に入力形式を指示したり、チェックを厳しくするなどのガードが必要かと思います。また①@sys-currencyではなく@sys-numberで代替する ②本来@sys-number@sys-currencyは一致するはずなので、同じかどうかチェックする などもあるでしょう。

うまく行った例

表現 認識結果 コメント
123,456円 123456 カンマもOK
10.12円 10.12 小数点もOK
100,00円 10000 カンマ誤り→@sys-numberはNGだが@sys-currencyは認識
九円 9 漢数字
百万円 1000000  
¥1,000 1000 全角円記号
$10.51・$10.51 10.51 半角・全角ドル記号
1米ドル・1ドル 1 ドル
1ユーロ・1人民元・1香港ドル 1 主要な通貨のみ対応

注意を要する表現の例

表現 認識結果 コメント
一円 n/a 二円~はOK. バグと思われる
1万円 110000 数字+千円/万円が誤り。バグと思われる
\1000 n/a 半角円記号は文字化けの可能性
¥1,000.99 100099 誤り。全角小数点が無視されている

個別の実行結果は参考資料にあります。

パーセント(@sys-percent)

ご説明

  • @sys-numberからの派生でパーセントを示す

うまく行った例

表現 認識結果 コメント
21%・21% 21 全角・半角とも認識
99.9999% 99.9999 小数点
21パーセント 21 文字表現
1-2% 1と2 -で2つ認識
100%から120パーセント 100と120 2つ同時に認識

注意を要する表現の例

表現 認識結果 コメント
1~2% 12 ~が無視され連結されている

個別の実行結果は参考資料にあります。

以上です

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5