LINEヤフー Tech Blog

LINEヤフー株式会社のサービスを支える、技術・開発文化を発信しています。

日本語形態素解析 Web API のユーザ辞書機能で解析結果をカスタマイズ

こんにちは。LINEヤフー株式会社で自然言語処理の開発を担当している牧野です。

今回は、Yahoo!デベロッパーネットワークから公開しているテキスト解析 Web API の「日本語形態素解析」で使えるようになった追加機能のユーザ辞書を紹介します。このユーザ辞書を使うと、自分だけのオリジナルの辞書で独自の解析が可能です。

また今回は、ユーザ辞書機能を工夫して使った簡易感情判定についても紹介します。

日本語形態素解析 Web API でできること

最初に、日本語形態素解析 Web API について簡単に紹介します。

日本語形態素解析 Web API は、日本語文を形態素に分割し、品詞の推定や活用処理、読みを付与することができます。形態素とは、日本語として意味を持つ最小単位のことです。「辞書に載っている単語」程度のイメージで捉えていただけると良いでしょう。

たとえば、「かわいい三毛猫を見た」という文の場合、「かわいい」「三毛猫」「を」「見た」など、形態素に分解できます。さらに「かわいい(形容詞)」「三毛猫(名詞)」「を(助詞)」「見た(動詞)」などの品詞の推定や、「三毛猫(みけねこ)」のような読み方の判別も可能です。

形態素解析の簡易イメージ

実際の Web API では下記のようなリクエスト、レスポンスとなります。

リクエスト(入力):

日本語形態素解析 Web API へのリクエスト例

レスポンス(出力):

日本語形態素解析 Web API からのレスポンス例

レスポンスでは、形態素に分割した結果に加え、読みや品詞も出力されていることがわかります。

追加機能「ユーザ辞書機能」とは

日本語形態素解析 Web API では、2023年3月に「ユーザ辞書機能」を追加しました。

この機能を使うと、新語やブランド名、専門用語など一般的な辞書に含まれていない用語や表現を自分自身で登録(ユーザ辞書のエントリとして追加)して、解析できます。さらに、形態素解析で生じるエラーもこの機能を使用して修正できます。

インストールして使う従来の形態素解析では、ユーザ辞書を使用する場合、その辞書を事前に指定の形式へ変換する必要がありました。しかし本機能では、リクエスト時にユーザ辞書のエントリを直接指定できるため、変換する必要はありません。

さらに、形態素解析の Web API でユーザ辞書を提供しているサービスは、他に少なく、この「ユーザ辞書機能」は非常にユニークな存在と言えます。

利用方法 - ユーザ辞書エントリを指定するだけ

ユーザ辞書機能を利用する際は、リクエストの params/context/entries 以下にユーザ辞書エントリを指定するだけで簡単に利用できます。これにより、ユーザ辞書を活用した形態素解析を実行できます。

以下で具体例を見てみましょう。

まずはユーザ辞書を指定しない場合の例です。

利用方法の例(ユーザ辞書を指定しない場合)

レスポンスを見ると「外/濠/公園」や「ワー/ケーション」のような解析になっています。

次に、これにユーザ辞書「外濠公園」「ワーケーション」の二つを指定してみます。

利用方法の例(ユーザ辞書にエントリを追加した例)

「外濠公園」や「ワーケーション」の区切りが正しくなりました。「外濠公園」 の読みが「はずごうこうえん」(正しくは 「そとぼりこうえん」と読みます) となっていますが、区切りのみ使いたい場合はこれで良いでしょう。

なおユーザ辞書エントリ(params/context/entries)にはカンマ区切りで読みも指定できます。読みも修正したい場合は、この方法を利用することができます。

利用方法の例(ユーザ辞書に読みも追加した例

これにより、「はずごうこうえん」「そとぼりこうえん」に読みも修正されました。

なおリクエスト時に指定するユーザ辞書エントリは、そのリクエストだけが有効です。他の呼び出しや次回以降の呼び出しには直接影響しないため、都度指定が必要です。またリクエストの最大サイズは 4KB のため、辞書のサイズにはご注意ください。

活用例 - ユーザ辞書を用いて簡易感情判定

ユーザ辞書機能を活用して、辞書の内容を工夫することにより、さまざまな目的に応じた活用が可能となります。今回はユーザ辞書に感情を表すエントリを設定し、形態素解析を行います。工夫として、「喜び、悲しみ、怒り、驚き、恐怖」などの感情タグをユーザ辞書の読み部分に設定します。

これにより、入力文章に何らかの感情が含まれているかを簡易的に判断することができます。下記では例として、「ぴえん」→「悲しみ」 など10個のエントリをユーザ辞書に追加してみました。

# リクエスト例
$ curl -s -X POST \
-H "Content-Type: application/json" \
"https://jlp.yahooapis.jp/MAService/V2/parse?appid=<あなたのClient ID(アプリケーションID)>" \
-d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "jlp.maservice.parse",
  "params": {
    "q": "店員さんの神対応にはキュンときた",
    "context": {
      "entries": [
        "イケてる,喜び",
        "ワロタ,喜び",
        "じわる,喜び",
        "神対応,喜び",
        "キュン,喜び",
        "しょぼん,悲しみ",
        "ぴえん,悲しみ",
        "キレる,怒り",
        "まじか,驚き",
        "ざわざわ,恐怖"
      ]
    }
  }
}' | jq -c '.result.tokens[] | select(.[1] | test("喜び|悲しみ|怒り|驚き|恐怖")) | .[0:2]'

# 出力結果
["神対応","喜び"]
["キュン","喜び"]
# リクエスト例
$ curl -s -X POST \
-H "Content-Type: application/json" \
"https://jlp.yahooapis.jp/MAService/V2/parse?appid=<あなたのClient ID(アプリケーションID)>" \
-d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "jlp.maservice.parse",
  "params": {
    "q": "台風のせいで運休ってぴえん",
    "context": {
      "entries": [
        "イケてる,喜び",
        "ワロタ,喜び",
        "じわる,喜び",
        "神対応,喜び",
        "キュン,喜び",
        "しょぼん,悲しみ",
        "ぴえん,悲しみ",
        "キレる,怒り",
        "まじか,驚き",
        "ざわざわ,恐怖"
      ]
    }
  }
}' | jq -c '.result.tokens[] | select(.[1] | test("喜び|悲しみ|怒り|驚き|恐怖")) | .[0:2]'

# 出力結果
["ぴえん","悲しみ"]

(注意) <あなたのClient ID(アプリケーションID)> と記載されている appid= パラメータには、ご自身で取得した Client ID を入力してください (発行方法)。なお、この事例では appid= パラメータに Client ID を指定してリクエストを行っていますが、User-Agent に指定する方法 もあります。

このようにユーザ辞書にエントリを追加すると、「ぴえん」や「神対応」など新語にも対応しつつ、どのような感情が含まれるのか簡易的に判定できます。他にも工夫次第で、NGワード検出や簡易分類などにも活用できます。

おわりに

日本語形態素解析 Web API で使えるようになったユーザ辞書機能について、利用方法や工夫した使い方を紹介しました。ユーザ辞書機能を使うと、辞書エントリの内容や工夫次第で自分流に解析をカスタマイズできますので、ぜひご活用ください。よろしくお願いします。


関連記事

これまでのテキスト解析 Web API の記事をまとめました。興味がある方はこちらもどうぞ。