コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

自然言語理解した

自然言語完全に理解してしまった

■ はじめに

自然言語
自然言語(しぜんげんご、英: natural language)とは、人間によって日常の意思疎通のために用いられる、文化的背景を持って自然に発展してきた言語である。分類として、音声言語と文字言語、口頭言語と書記言語、口語と文語といったような分類があるが、いずれも似ているようだが着目点や対比軸が異なる分類である。
Wikiより

はい、自然言語ってこういうやつです。対話が可能な人間が行うコミュニケーションのための言語です。それを今更理解したということは僕が人間でない可能性が微レ存……?


まあ、そういうのどうでもいいか。つい先日、Yahoo! のWeb API眺めていたらテキスト解析APIに「自然言語理解」の項目あったのでつい魔が差してこんな導入を書いてしまいました。

自然言語理解】
自然言語理解(しぜんげんごりかい、英: Natural language understanding, NLU)は人工知能自然言語処理の一分野であり、コンピュータに自然言語を理解(読解)または意図を抽出させるという試みである。

ニュース収集、テキスト分類、音声アクティベーションアーカイブなどの大規模コンテンツ解析といった様々な応用があるため、商業化の面でも関心が強い分野である。
Wikiより

ちなみに、自然言語理解ってこういう分野です。そのスジの人にはNLUとか略されます。僕の中では、チャットボットの受け答えをより人間らしくするための技術っていう認識。細かい技術的な話はなんか哲学っぽい話なんでいったんスルー。

参考
テキスト解析:自然言語理解 - Yahoo!デベロッパーネットワーク

・ 使い方

https://jlp.yahooapis.jp/NLUService/V1/analyze?appid={あなたのアプリケーションID}&intext={テキスト}
例:
intext = 新宿の天気
{
   "result": {
       "intext": "新宿の天気",
       "method": "WEATHER",
       "nvm_that": "新宿",
       "param_method_subcat": "GENERAL",
       "param_place": "新宿",
       "status": "200",
       "var_intext": "新宿の天気",
       "var_intext_normalized": "新宿の天気",
       "var_intext_timestamp": "1514364931",
       "var_test_btsc": "31"
   }
}   

とりあえずの使い方はこんな感じだそうです。


なんかつくる

まあ、NLUを一から作るとかそういう話でなくAPI使いたいだけなので簡単なサンプルでも作ります。今回はPHPで遊びます。

<?php
    $apikey = "あなたの取得したAPIキー";

    $file = fopen("./stdin.txt", "r"); // サンプル:富士山の高さは?
    $stdin = trim(fgets($file));
    echo $stdin.PHP_EOL;

    $url = "https://jlp.yahooapis.jp/NLUService/V1/analyze?appid=".$apikey."&intext=".$stdin;
    $say = json_decode(@file_get_contents($url), true);

    if(isset($say["result"]["param_text"])){
      echo $say["result"]["param_text"].PHP_EOL;
    }

    print_r($say);

Windouws上の標準入力時の文字コードの扱いどうなってんのかよくわかんなかったからテキストファイルから入力値もってくることにした。これどうなってんですかWindowsの仕様わからなすぎて、それの検証記事だけで2記事ぐらい書けそう……。やはりMicrosoftは悪、GAFAに入れぬ面汚しよ。

実行結果

C: >php ***.php
富士山の高さは?
3776mです。
Array
(
    [result] => Array
        (
            [var_test_btsc] => 20
            [var_intext] => 富士山の高さは?
            [method] => SAY
            [var_m4] => は
            [var_m0] => 富士山
            [var_cv1] => 0.95
            [var_m2] => 高
            [var_intext_timestamp] => 1555297640
            [param_text_tts] => 3776メートルです。
            [intext] => 富士山の高さは?
            [var_intext_normalized] => 富士山の高さは
            [param_text] => 3776mです。
            [var_m1] => の
            [var_n_tokens] => 5
            [status] => 200
            [var_m3] => さ
        )

)

とりあえず受け答えできた。出力がまだよくわかってないからチャットボット的なやつに投入するにはもう少しドキュメントの読み込み必要そう。

参考
テキスト解析:出力仕様 - Yahoo!デベロッパーネットワーク