【AI×音声】文字起こし要約サービスを作って「緊急事態宣言」を3行にまとめてみた。

## はじめに

先日、[コエカラ（Coecara）](https://coecara.com/)という機械学習を使った音声文字起こしサービスを作りました。コードはオープンソースとして公開しています。

機能は、音声をリアルタイムで文字起こしをして、自動要約してくれます。

|![hero.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142797/a8316fdb-1092-2c29-beb1-eeac03a6c5e1.png)|
|:-:|

### サービスURL👇
[https://coecara.com/](https://coecara.com/)
PC版のChromeとEdgeのみ対応です。


### レポジトリ
- https://github.com/coecara/app (フロントエンド)
- https://github.com/coecara/summarize-api (API)

## 要約してみる

えっと、動機としては面白そうだから作ってみたのですが、せっかくなので世の中の為になるような内容を、要約してみたいと思います。

連日、新型コロナが大変ですね。最近また「緊急事態宣言」が発令されました。

この「緊急事態宣言」、TVなどでは紹介されて知ってはいるのですが、政府の公式な情報を直接得たことがなかったので、[新型コロナウイルス感染症緊急事態宣言｜内閣官房新型コロナウイルス感染症対策推進室](https://corona.go.jp/emergency/) の下の動画を文字起こしして、3行にまとめてみました。（厳密には緊急事態宣言ではありませんが、、笑）

[![緊急事態宣言を受けて
](http://img.youtube.com/vi/2Sb36bcKJys/hqdefault.jpg)](https://www.youtube.com/watch?v=2Sb36bcKJys)

### 文字起こし結果
> 新型コロナウイルス感染症対策担当大臣の西村康稔です今回の緊急事態宣言を受け分科会の会長と共に皆様にメッセージをお届けします分科会なおみですここに来て若い人の場合息苦しさなど呼吸器症状を訴えても訴えても入院ができず自宅療養になることが多くなりましたそれだけ今医療が逼迫しています話す時はできますかを着用し配色や飲み会は客の目を含めえんきてください若い人はあまり重症化しませんが感染すると後遺症に苦しむ人もいます皆さん自身を守るために気をつけてくださいそうすれば同時にお年寄りそして2の日本の医療を守ることにもつながります是非よろしくお願いします東京の新規感染者数は1日で2500人に迫っていますこれは2週間前の姿でクリスマスのころの活発な活動の結果でもありますこの水準が2週間続けば400人に1人が感染するという極めて深刻な状況です今すぐ対策を強化する必要がありますとにかく不要不急の外出や移動県をまたぐ移動も含め控えてください特に20時以降については仕事も含め外出の自粛を設定してください飲食店の20時までの営業時間短縮もお願いいたします応じていただいた飲食店の皆様には月額換算で180万円に増額した今日料金をお支払いいたします出勤者数を7割削減するためテレワークの強力な推進をお願い致します今すぐ対策を強化することでその結果は2週間後に出てきますそれを1ヶ月継続することで必ず感染拡大を止めることができます皆様には大変なご不便をおかけしますけれども感染対策へのご協力是非ともよろしくお願いいたします

### 要約結果

> 1.  ここに来て若い人の場合息苦しさなど呼吸器症状を訴えても訴えても入院ができず自宅療養になることが多くなりましたそれだけ今医療が逼迫しています。
> 2.  そうすれば同時にお年寄りそして2の日本の医療を守ることにもつながります。
> - 今すぐ対策を強化することでその結果は2週間後に出てきます。

![screenshot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142797/1d65607c-00f5-6339-8f46-fda54acc1786.png)

うーん、要約の精度がまだ、甘いですね…汗

## 課題と改善策

- 文節ごとに分割：文字起こしした文章には句読点が含まれません。内部的に句読点で文節ごとに区切っているので、話し言葉の語尾のリストを増やす事で精度を上げたいです。
- 最大文字数以上の文の排除：長くて多くの意味が含まれる文が抽出されているので最大文字数を設定する事で防げそうです。


他にも色々と精度はあげれそうですが、思いつかないのでみなさんのPRをお待ちしています！笑


## サーバーレス

フロントは React で、文字起こしの部分は、ブラウザAPIの [SpeechRecognition](https://developer.mozilla.org/ja/docs/Web/API/SpeechRecognition) (ChromeとEdegeのみ対応)を使っています。デプロイ先は Netlify です。

バックエンドは、API Gateway と Lambda のサーバーレスの構成です。 ビルドしたMecabを Amazon EFSにおいてLambdaにマウントしています。

要約アルゴリズムは、LexRank + tf-idfです。


## 参考
下記を参考にさせて頂きました…！ 

特に要約アルゴリズムは @takumi_TKHS さんと @naotaka1128 さんの記事を参考にさせて頂きました。ありがとうございます!

- [自動要約アルゴリズムLexRankを用いたECサイトの商品価値の要約 - Qiita](https://qiita.com/takumi_TKHS/items/4a56ac151c60da8bde4b)
- [【転職会議】Pythonで自然言語処理を用いてクチコミを要約してみる - Qiita](https://qiita.com/naotaka1128/items/bdaff71379a8bf231b64)
- [AWS Lambda with EFS で MeCab, NEologd & CaboCha を動かす （2020年7月時点） - Qiita](https://qiita.com/rtaguchi/items/f2b39572299b5399df76)
- [yoidea/bragging-detector: 自慢を検知する装置](https://github.com/yoidea/bragging-detector)

## まとめ
LexRankを使った要約アルゴリズムはの情報はネット上にあったのですが、実際にAPIとして運用するためのコードはあまりなかったのでオープンソースにしました。

###  サービスURL👇

https://coecara.com/
PC版のChromeとEdgeのみ対応です。

###  レポジトリ
- https://github.com/coecara/app (フロントエンド)
- https://github.com/coecara/summarize-api (API)


ぜひバグや、要約精度の改善手法などあればIssueでフィードバック頂けると嬉しいです!（PRもお待ちしています!笑）