データクレンジング作業を手軽に。リクルートのAI「A3RT」固有表現抽出APIを使ってみる

このエントリーをはてなブックマークに追加

機械学習では、データを扱う中で最適な成果を得るために、 特定の単語を除去するデータクレンジングが必要です。

例えば、ニュース記事を芸能・スポーツといった内容に分けて分類する際、日付や価格、人名といった学習に必要でない情報を取り除く場合があります。

そのためにはプログラムで固有表現を抽出し、特定の単語を除去する必要がありますが、データクレンジングもAPIでさらに簡単になりそうです。

今回は、株式会社リクルートテクノロジーズが開発し、リクルートグループ内で使われている内製AIのAPI群A3RTのNamed Entity APIを使い、固有表現抽出してみました。

APIで8種類の固有表現を抽出・分類。データクレンジングがラクになる

Named Entity APIは、文章の中から固有表現を抽出します。

抽出される固有表現の分類は、下記の8種類。

  • ART:人工物 (例:ピラミッド、憲法)
  • DAT:日付 (例:今年、1月1日)
  • LOC:地名 (例:北海道、アメリカ)
  • MNY:金額 (例:250円、3万円)
  • ORG:組織 (例:リクルート、県立高校)
  • PNT:割合 (例:5割引き、3割6分5厘)
  • PSN:人名 (例:佐藤太郎、渡辺花子)
  • TIM:時間 (例:1時、夕方)

この8種類は1999年に日本で開催された情報抽出・情報検索のワークショップIREX で定義されたもので、日本語固有表現抽出手法において標準的に用いられています。

分類予測結果は、これら固有表現の種類に接頭辞として「B-」「I-」が付与されたラベルが返されます。「B-XXX」は固有表現の始まり、「I-XXX」は固有表現が続いていることを意味します。固有表現に該当しない単語は、「O(オー)」で表現されます。

それでは、記事から一部抜粋したこちらの文章を例にみてみます。

アイデアコンテスト自体は1月12日の表彰で終了となりますが、優秀アイデア賞受賞者は別途、試作品コンテストに無審査で参加できる権利がもらえます。優秀アイデア賞受賞者のなかで試作品コンテストにも参加する場合、試作品作成費が最大50万円支援されるので、アイデアを形にしたい人にはうってつけです。

※現在のNamed Entity APIの制限事項は、送信できる最大文字数は500文字です。英文字・半角・全角スペース・タブ・半角アンパサンド(&)・改行・特殊文字には対応していません。

APIによる解析結果がこちら。

{
  "status": 0, 
  "message": "ok", 
  "sentence": "['アイデア', 'コンテスト', '自体', 'は', '1', '月', '12', '日', 'の', '表彰', 'で', '終了', 'と', 'なり', 'ます', 'が', '、', '優秀', 'アイデア', '賞', '受賞', '者', 'は', '別途', '、', '試作', '品', 'コンテスト', 'に', '無', '審査', 'で', '参加', 'できる', '権利', 'が', 'もらえ', 'ます', '。', '優秀', 'アイデア', '賞', '受賞', '者', 'の', 'なか', 'で', '試作', '品', 'コンテスト', 'に', 'も', '参加', 'する', '場合', '、', '試作', '品', '作成', '費', 'が', '最大', '50', '万', '円', '支援', 'さ', 'れる', 'ので', '、', 'アイデア', 'を', '形', 'に', 'し', 'たい', '人', 'に', 'は', 'うってつけ', 'です', '。']", 
  "result": "['O', 'O', 'O', 'O', 'B-DAT', 'I-DAT', 'I-DAT', 'I-DAT', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-ART', 'I-ART', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-MNY', 'I-MNY', 'I-MNY', 'I-MNY', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']"
}

「1月12日」はDAT(日付)、「アイデア賞」はART(人工物)、「最大50万円」はMNY(金額)に分類されました。1月12日はDAT、最大50万円はMNYと正しく分類されています。

アイデア賞はARTに分類されましたが、アイデアコンテストは固有表現に値しない単語とされています。また、アイデア賞という言葉は2回出てきていますが、ARTに分類されたのは1回目のみでした。

続いて、こちらの文章でも試してみます。

イオンは、ユーザーの問い合わせに対して人手での対応をせずに、チャットボットで代替する選択を取りました。注目すべきは、24時間365日即時対応な点、4,000品目という非常に多い品数の中からワインを提案できる点にあると思います。

解析結果がこちら。

{
  "status": 0, 
  "message": "ok", 
  "sentence": "['イオン', 'は', '、', 'ユーザー', 'の', '問い合わせ', 'に対して', '人手', 'で', 'の', '対応', 'を', 'せ', 'ず', 'に', '、', 'チャットボット', 'で', '代替', 'する', '選択', 'を', '取り', 'まし', 'た', '。', '注目', 'す', 'べき', 'は', '、', '24', '時間', '365', '日', '即時', '対応', 'な', '点', '、', '4', ',', '000', '品目', 'という', '非常', 'に', '多い', '品数', 'の', '中', 'から', 'ワイン', 'を', '提案', 'できる', '点', 'に', 'ある', 'と', '思い', 'ます', '。']", 
  "result": "['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-DAT', 'I-DAT', 'I-DAT', 'I-DAT', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']"
}

「24時間365日」はDAT(日付)に正しく分類されています。

ORG(組織 )に分類されるはずの「イオン」やART(人工物)に分類されるはずの「チャットボット」「ワイン」が固有表現に値しない単語とされています。

Named Entity APIの固有表現抽出の仕組み

Named Entity APIでは、Conditional Random Fields(CRF)Recurrent Neural Network(Bidirectional LSTM)と呼ばれる機械学習手法を組み合わせることにより固有表現抽出を実現しています。

辞書のように固有表現にあたる単語を割り当てているのではなく、膨大な量の文章を教師データとし、文章中の単語・品詞の並び・関係性などを学習することで、文章内の固有表現を予測しています。そうすることで、辞書に載っていない固有表現に対応できないという問題を防ぎます。

Conditional Random Fields(CRF)

文章に最適な構造を割り当て、品詞の分類を行う手法です。

入力 :私は猫が好きだ。
構造割り当て:私 / は / 猫 / が / 好き / だ。
品詞の分類 : 名詞 / 助詞 / 名詞 / 助詞 / 動詞 / 助動詞

Recurrent Neural Network(Bidirectional LSTM)

RNNは時系列を扱うことのできるニューラルネットワークです。
その中でもBidirectional LSTMは、過去の情報と未来の情報から予測を行う仕組みを持っています。

固有表現抽出で目的に合わせたデータクレンジングができる

今回利用したNamed Entityは、固有名詞を8種類の固有表現に分類してくれるため、

  • SNSで注目度の高い地名や組織を探す
  • 資料に出てくる日付と時間だけ削除する
  • 人名を削除する

というように、特定の固有表現に対する処理も行うことができそうです。

ただし、現状では

  • 英文字
  • 半角
  • 全角スペース
  • タブ
  • 半角アンパサンド(&)
  • 改行
  • 特殊文字

には対応していないため、利用できる文章は限られます。

今回利用したNamed Entity APIはA3RT公式ページから実際にデモを試すことができます。興味がある方はぜひ試してみてください。

>> Named Entity API