リクルートのデータテクノロジーラボ部が提供する「A3RT(ANALYTICS & ARTIFICIAL INTELLIGENCE API VIA RECRUIT TECHNOLOGIES)」のひとつである文章の要約を行うAPI「Text Summarization API」を使って、大変な文献調査を捗らせることに挑戦してみたいと思います。

チャレンジ&ナレッジ最終更新日: 20220607

文章要約API「Text Summarization API」を使って学校の課題を捗らせたい

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

リクルートのデータテクノロジーラボ部が提供する「A3RT(ANALYTICS & ARTIFICIAL INTELLIGENCE API VIA RECRUIT TECHNOLOGIES)」のひとつに、文章の要約を行うAPI「Text Summarization API」があります。
学校の課題や研究において、避けては通れないのが文献調査。小学校での読書感想文から大学での先行調査まで…先人に学ぶことの重要性はもちろん理解していますが、さまざまな文献を読み、まとめる作業は簡単ではありません。
この文章要約APIを見つけたとき、「これを使えばもっと楽に学校の課題ができるのでは…?!」と思いました。そこで、今回はこの文章要約APIを使って、大変な文献調査を捗らせることに挑戦してみたいと思います。

A3RTのText Summarization APIとは?

“A3RT”.Recruit Co., Ltd.
https://a3rt.recruit.co.jp/

冒頭でも説明した通り、「A3RT」はリクルートのデータテクノロジーラボ部が提供するAI・機械学習関連のAPIです。今回取り上げる文章要約API以外にも以下のような様々なAPIが提供されており、いずれも手軽に利用することができます。

  • Listing API:リスト生成をするためのAPI
  • Image Influence API:画像と画像に対応する点数を用意すると、未知の画像が自分好みかどうかを点数で把握できるモデルが作成可能なAPI
  • Text Classification API:章の分類を行うAPI
  • Text Suggest API:文章の自動生成および入力補助を実現するAPI
  • Proofreading API:文章として怪しい箇所を検知するAPI
  • Talk API: Chatbotを作成するためのAPI
  • Image Generate API:オリジナルの画像を生成するAPI
  • Image Search API:画像とテキストの相互検索API
  • SQL Suggest API:日本語の質問文をSQLに変換するプロダクト
  • Named Entity API:固有表現抽出機能を実現したAPI

公式サイトによると、文章要約APIである「Text Summarization API」はDoc2Vecを用いて文章ごとの意味を分類し、特徴的な文章を抽出してくれるそうです。

“Text Summarization API | PRODUCT | A3RT”.Recruit Co., Ltd.
https://a3rt.recruit.co.jp/product/TextSummarizationAPI/

ちなみに、Doc2Vecとは文章をベクトル化する手法のこと。単語をベクトル化する手法のWord2Vecを応用した技術です。

「Text Summarization API」を使ってみる

APIキーを取得する

Text Summarization APIを使用するにはAPI KEYを取得します。
上記ページの一番下にある「API KEY 発行」ボタンをクリックします。

「API KEY 発行」をクリック「API KEY 発行」をクリック

次の画面でメールアドレス入力してを「送信」をクリックします。

メールアドレスを入力して「送信」をクリックメールアドレスを入力して「送信」をクリック

「送信」を押した後、A3RTから届いたメールに書かれたメールアドレス確認URLをクリックすると、再度メールが届き、その中にAPI KEYが記載されています。

Azure NotebooksでAPIを利用する

データ分析ツールとして広く使われている「Jupyter Notebook」で、Text Summarization APIを使ってみようと思います。

※今回はAnacondaを利用して、Pythonの環境を構築しています。
Anacondaをインストールすると標準でJupyter Notebookが入っています。もし、Anacondaの環境構築をされていない方は下記の記事を参考にしてください。

“Pythonとエクセルでレコメンドを実装”
https://www.pc-koubou.jp/magazine/22437

環境構築が完了したら、Jupyter Noteboookを起動したいと思います。

起動するには、スタートメニューからAnaconda3(64bit)のファイルを検索して、下図の赤い枠で囲われてるJupyter Noteboook(anaconda3)を選択します。

コマンドプロンプトとからでも、Jupyter Notebookを起動することができます。コマンドプロンプト上で下記のコマンドを実行してください。

jupyter notebook

Jupyter Notebookを起動すると、下図のような画面が開きます。

「New」から「Folder」をクリックして新しいフォルダーを作成します。

新しく作成されたフォルダーだと分かりやすいように「Rename」クリックして名前を変更しておきます。

こちらはお好きな名前を入力してください。

名前を変更したら、新しく作ったフォルダーの中にクリックして入ります。

次の画面で、右側にある「New」から新しいファイルを作成します。「New」をクリックするとPython3 (ipykernel)と書いてある部分をクリックして、新規ノートブックを作成します。

新しいノートブックを作成したら、ファイルの名前を分かりやすいファイル名に変更します。
こちらも好きな名前で大丈夫です。
拡張子が.ipynbであることを確認して「File」から「Rename」をクリックしてください。

Jupyter Notebookでは、赤枠で囲まれたところに、コードを入力していき、上のメニューの中に入っている「Run」と書いてある実行ボタンをクリックするだけで、実行結果を確認することができます。

また、Python自体の環境を変更したい場合は、「Karnel」のところから、「Change Karnel」の中に他のPyhtonのバージョンが表示されるので、この中から変更することもできます。

実際に一度プログラム実行させてみます。下の枠の部分にコードを書いたら、プログラム実行ボタンの「Run」をクリックしてプログラムを実行してみます。

下に「Hello World」の表示が出たら、正常にプログラムが動いていることを確認できました。

Text Summarization APIにリクエストを送ってみる

それでは、実際にJupyter Notebookから先ほど申請したText Summarization APIにリクエストを投げてみたいと思います。

手始めに、「パソコン工房NEXMAG」の「パソコン工房NEXMAGとは」にあるテキストの要約をしてみたいと思います。

https://www.pc-koubou.jp/magazine/about より引用https://www.pc-koubou.jp/magazine/about より引用

“パソコン工房NEXMAGとは”
https://www.pc-koubou.jp/magazine/about

今回はHTTPライブラリの「Requests」を使ってText Summarization APIにリクエストを送ります。

“Requests: HTTP for Humans™ — Requests 2.23.0 documentation”.A Kenneth Reitz Project.2019.
https://requests.readthedocs.io/en/master/

Requestsのインストールはpipを使い、以下のコマンドで行います(環境によっては既にインストールされている場合があります)。

!pip install requests

準備が整ったら以下のように、APIキーや要約する文章などのパラメータを設定して、APIにリクエストを送ります。

import requests
import json

# エンドポイント
url = 'https://api.a3rt.recruit.co.jp/text_summarization/v1'

# APIキー
key = 'APIキー'

#要約する文章
sentence = '要約した文章。要約した文章。要約した文章。要約した文章。'

#パラメーターの設定
params = {
    'sentences': sentence,
    'apikey': key,
'linenumber': '1' #抽出文章数
}

#リクエスト
res = requests.post(url, data=params)
values = json.loads(res.text)

#レスポンスから要約されたテキストを取り出す
for summary in values["summary"]:
    print(summary)

これを実行すると、以下のように結果が出力されました。

抽出文章数を1〜3に変えた出力結果を比べてみます。

    抽出文章数:1

  • 新しい「コト」を分かりやすく解説するオンラインマガジンを目的に名づけられました
  • 抽出文章数:2

  • 新しい「コト」を分かりやすく解説するオンラインマガジンを目的に名づけられました
  • パソコン工房 NEXMAG(ネクスマグ)の記事の執筆は、開発や創作の現場で最先端を担うアーティストやクリエイターをはじめ、パソコンの「プロ」であるパソコン工房のスタッフ、パソコンの様々な情報に精通するライターなど、様々なジャンルにおいて活躍するメンバーで行っています
  • 抽出文章数:3

  • パソコン工房NEXMAGの名前の由来は、「Neo(新しい・近代)」とEXから始まる様々な単語「EXperience(体験)、EXtention(拡張)、EXpress(表現)、EXplore(探求)、EXtreme(先端)など」にMAGAZINE(雑誌)を組み合わせた造語です
  • 新しい「コト」を分かりやすく解説するオンラインマガジンを目的に名づけられました
  • パソコン工房 NEXMAG(ネクスマグ)の記事の執筆は、開発や創作の現場で最先端を担うアーティストやクリエイターをはじめ、パソコンの「プロ」であるパソコン工房のスタッフ、パソコンの様々な情報に精通するライターなど、様々なジャンルにおいて活躍するメンバーで行っています

これらを眺めてみると、抽出文章数が1の場合は「パソコン工房NEXMAG」の目的について触れている文章が抽出されており、結構良い感じに要約できたのではないでしょうか?

「パソコン工房NEXMAG」の紹介文は全部で6文と短めの文章ではあったものの、これは学校の課題で必要な文献調査にも役立つのではないかと期待が高まります。

学校の課題が捗るのか検証してみた

今回は、青空文庫にある小説の要約を行い、実際に学校の課題が捗りそうかどうかを調べてみます。

“青空文庫”
https://www.aozora.gr.jp/

以下が、今回要約する3つの小説です。

    こころ(夏目漱石)
    人間失格(太宰治)
    注文の多い料理店(宮沢賢治)

Text Summarization APIは要約できる1文の最大文章数は10なので、10行ずつに区切ったものから1文の要約文を抽出していきます。すると、それぞれ10分の1の文章数になることが期待されます。

こころ
https://1drv.ms/w/s!AoPIy2C3APRtbP1K4dhogsbPggw?e=T9LzQ9

人間失格
https://1drv.ms/w/s!AoPIy2C3APRtaoq4DxGYi22y5qI?e=Nvwzc2

注文の多い料理店
https://1drv.ms/w/s!AoPIy2C3APRta9sqIlIYCbbpSdI?e=Wb3WTP

各結果を見てもらうと分かりますが、要約というにはやはり長すぎる…かもしれません。

また、10文ずつの要約しかできないため、文章全体の意味をとらえることはできません。抽出された文章を読んでいくと、文章を斜め読みする感覚に近く、どのあたりにどんな内容が書かれているかの把握をするのには役立ちそうでした。

ちなみに、このようなやり方が適切か否かは分かりませんが、「人間失格」の文章から抽出した要約文をさらに要約する…という処理を繰り返し、3文にまとめたものが以下になります。

自分もまた、知らん振りをして寝ておればいいのに、いかにもその娘が何か自分に言ってもらいたげの様子なので、れいの受け身の奉仕の精神を発揮して、実に一言も口をききたくない気持なのだけれども、くたくたに疲れ切っているからだに、ウムと気合いをかけて腹這いになり、煙草を吸い、
互いに軽蔑しながら附き合い、そうして互いに自らをくだらなくして行く、それがこの世の所謂「交友」というものの姿だとするなら、自分と堀木との間柄も、まさしく「交友」に違いありませんでした
罪のアントがわかれば、罪の実体もつかめるような気がするんだけど、……神、……救い、……愛、……光、……しかし、神にはサタンというアントがあるし、救いのアントは苦悩だろうし、愛には憎しみ、光には闇というアントがあり、善には悪、罪と祈り、罪と悔い、罪と告白、罪と、……嗚呼、みんなシノニムだ、罪の対語は何だ

  • 自分もまた、知らん振りをして寝ておればいいのに、いかにもその娘が何か自分に言ってもらいたげの様子なので、れいの受け身の奉仕の精神を発揮して、実に一言も口をききたくない気持なのだけれども、くたくたに疲れ切っているからだに、ウムと気合いをかけて腹這いになり、煙草を吸い、
  • 互いに軽蔑しながら附き合い、そうして互いに自らをくだらなくして行く、それがこの世の所謂「交友」というものの姿だとするなら、自分と堀木との間柄も、まさしく「交友」に違いありませんでした
  • 罪のアントがわかれば、罪の実体もつかめるような気がするんだけど、……神、……救い、……愛、……光、……しかし、神にはサタンというアントがあるし、救いのアントは苦悩だろうし、愛には憎しみ、光には闇というアントがあり、善には悪、罪と祈り、罪と悔い、罪と告白、罪と、……嗚呼、みんなシノニムだ、罪の対語は何だ

文章構成把握に役立つText Summarization API

今回、A3RTの「Text Summarization API」を使って文章要約をしてみました。動機である「学校の課題を捗らせる」という観点については、そのまま要約文として使うことはできなかったものの、文章全体構成を把握して効率よく文献調査を行うという点では役に立ちそうでした。

A3RTには他にもさまざまなAPIが提供されているので、今後記事の企画としても試していきたいなと思います。みなさんも「Text Summarization API」をはじめ、気になるAPIがあれば手軽に試せるので、ぜひ動かしてみてください!

ranranプロフィール画像
ライタープロフィール ranran

株式会社メンヘラテクノロジー CEO
女性向けチャット相談サービス「メンヘラせんぱい」
作ってます
https://menhera-senpai.com/

記事を
シェア