2020年2月アーカイブ

機械学習のアルゴリズムがつくりだす状況を利用して、自然実験に近い分析をおこなった事例を紹介します。
このような事例を応用すれば、実際に実験をおこなわなくても介入効果などが分かるかもしれません。


はじめに

昨今、AI・機械学習の進歩のおかげで、様々な予測をおこなうことができるようになりました。
みなさんも機械学習を使った株価の予測などニュースでみかけることも増えたと思います。
株価だけでなく、交通量からチケットの売上・電力消費量etc......
なんでも予測されていますね。笑
このように2019年現在、たくさんの企業がなんらかの予測をするためにデータを集めています。


今回はこうした集めたデータを利用して、さらに分析をした事例を紹介します。
※正確に表現すると機械学習アルゴリズムが作った状況を利用して分析する事例です。


介入効果とは

介入効果と書くとピンと来ませんが、おこなったアクションに効果があったのかということです。

ある会社で商品の宣伝のために、全国でテレビCMをおこなったとします。
その結果、商品の売上が30%も上がりました! すごい! これからどんどんテレビCMを放送しよう!


本当にこれで良いでしょうか?


クリスマス時期のため売上が上がったかも...。(実際に多くの売上のデータでは季節調整がされています。)
もしくは、有名人がたまたまSNSでその商品の写真をupしたことで、若者を中心に大流行したからかも...。


テレビCMはお金をかけてやる必要があったのでしょうか?
広告の効果を正確に知るには、広告以外の状況が同じ店舗の売上を比べればわかります。(ざっくりいうとほぼ状況が同じものを比較する)


この場合だと、地域ごとにテレビCMを放送する地域、しない地域で分け、さらに売上状況や天気等、条件を揃えて比較する必要があります。


残念ながらこのような状況を意図的に作り出すのは難しいです。
より多くクリックされるweb広告を比較したり、奨学金の効果など、状況を同じにして効果を実験したい例はたくさんあります。


こうした詳しく原因を分析することを因果推論といいますが、これについては当社の記事「はじめての因果推論」を参考にしてみてください!


アルゴリズムが生むランダム化実験

ここで登場するのが、機械学習のアルゴリズムを利用して得るデータです。
需要と供給によって価格が変わるUberXのデータを使って、利用者がどれくらい価格に反応するか(価格弾力性)を測る分析を紹介します。
ここでネックなのが、価格だけの影響を知りたい場合に、どうやって他の要因を排除するか...
この点は、先程のテレビCMの効果を測る例と共通しています。


ここで役立つのが、機械学習を使ったアルゴリズムで集めたデータです!
Uberはもともと状況に応じて、自動で価格を上げ下げする仕組みです。そのためアルゴリズム内部では、1.249など少数点以下もしっかり計算されています。
しかし、利用者はそこまで細かい金額では払えないので、少数点第二位以下を四捨五入して表示するようプログラムされています。
ここにランダム化実験を見出すことができます。
つまりUberでは、1.249は1.2と表示され、1.251 は1.3と表示されることになります。
しかし値段以外の要因は1.249と1.251では、ほとんど同じです。よってこの2つで比較すれば、価格が利用者にどう影響するかを明らかにできます。


アルゴリズムが生むランダム化実験の応用性

このように、機械学習のアルゴリズムで集めたデータに自然実験が行えるような例は、たくさんあるのではないでしょうか?
例えば、裁判官の判決や奨学金を与えると生徒はどうなるのかなどです。
実際サイバーエージェントでは、こうした手法を使い広告の効果を測定する研究も行われているそうです。


このような手法を使えば、ランダム化実験や人為的なABテストなど、時間やコストが多くかかるプロセスを
回避できるかもしれません。


参考文献

・矢田紘平、成田悠輔「機械学習は自然実験を作り出す」『経済セミナーe-book No.15』、日本評論社、2019年12月、19-20ページ
・Cohen, Peter, Robert Hahn, Jonathan Hall, Steven Levitt and Robert Metcalfe (2016) "Using Big Data to Estimate Consumer Surplus: The Case of Uber,"NBER Working Paper 22627.
・Narita, Yusuke, Shota Yasui and Kohei Yata (2019) "Efficient Counterfactual Learning from Bandit Feedback,"Proceedings of the Thirty-Third AAAI Conference on Artificial Intelligence, pp.4634-4641.


Twitter・Facebookで定期的に情報発信しています!

概要

先日の勉強会にてインターン生の1人が物体検出について発表してくれました。これまで物体検出は学習済みのモデルを使うことが多く、仕組みを知る機会がなかったのでとても良い機会になりました。今回の記事では発表してくれた内容をシェアしていきたいと思います。
あくまで物体検出の入門ということで理論の深堀りや実装までは扱いませんが悪しからず。


物体検出とは

ディープラーニングによる画像タスクといえば画像の分類タスクがよく挙げられます。例としては以下の犬の画像から犬種を識別するタスクなどです。

ディープラーニングで識別してみると

  • コーギー: 75%
  • ポメラニアン: 11%
  • チワワ: 6%
  • ...


のようにどの犬種か、確率としては出てくるものの画像内に犬が2匹以上いた場合は対応できなくなってしまいます。

example of image classification


この問題を解決するために物体検出のアルゴリズムが開発されました。物体検出の技術を使えば画像中の複数の物体の位置を特定して矩形(バウンディングボックス)で囲み、更にそれぞれの矩形について物体の識別を行うことが可能になります。

物体検出の例が以下になります。犬と猫がバウンディングボックスで囲まれ、それぞれ犬か猫か識別されていることがわかります。

example of image detection

物体検出モデルの歴史は深くR-CNNから始まりFast R-CNN、Faster R-CNNと精度と処理速度が改善されてきました。これらの手法は基本的に以下の動画のようにバウンディングボックスを画像内で色々と動かして物体が検出される良い場所を見つけ出そうというものでした。

example of image detection

物体検出についての歴史まとめより引用

その後、精度と処理速度とともにFaster R-CNNを上回るSSD(Single Shot Multibox Detector)が提案されました。
今回の勉強会ではこのSSDを解説してくれましたので、復習がてらこちらで私が解説させていただきます。


SSD (Single Shot Multibox Detector)

R-CNNではバウンディングボックスを色々と動かしてそのたびにCNNによる演算を行っていたので、1枚の画像から物体検出を行うのにかなりの処理時間がかかっていました。一方でSSDでは"Single Shot"という名前が暗示しているように、1度のCNN演算で物体の「領域候補検出」と「クラス分類」の両方を行います。これにより物体検出処理の高速化を可能にしました。


全体の構造

structure of SSD

SSD: Single Shot MultiBox Detectorより引用

SSDのネットワークは最初のレイヤー(ベースネットワーク)に画像分類に使用されるモデルを用いています。論文ではVGG-16をベースネットワークとしています。ベースネットワークの全結合層を切り取り、上のように畳み込み層を追加したものがSSDの構造になります。

予測の際はそれぞれのレイヤーから特徴マップを抽出して物体検出を行います。具体的にはそれぞれの特徴レイヤーに3×3の畳み込みフィルタを適用してクラス特徴と位置特徴を抽出します


検出の仕組み

SSD framework

SSD: Single Shot MultiBox Detectorより引用

(a)が入力画像と各物体の正解ボックスです。(b)と(c)のマス目は特徴マップの位置を表しており、各位置においてデフォルトボックスと呼ばれる異なるアスペクト比の矩形を複数設定します。各位置の各デフォルトボックスについてスコア(confidence)の高いクラスを検出します。

訓練時には各クラスの誤差と、デフォルトボックスと正解ボックスの位置の誤差を元にモデルの学習を行います。

勉強会のスライドがわかりやすかったのでこちらも参考にしていただければと思います。

a slide about how to detect objects using SSD


様々なスケールの物体を検出する仕組み

検出の仕組みを示した上の図で(b)と(c)を見ると4×4の特徴マップの方がデフォルトボックスが大きく、各特徴マップではデフォルトボックスの大きさが異なることがわかります。
SSDでは、サイズの違う畳み込み層をベースネットワークの後に追加することで様々なスケールで物体を検出することができます。

how to detect objects with various size


以下のように各特徴マップにおいてクラス特徴量と位置特徴量を算出します。

feature map at each layer


そして各畳み込み層で違うスケールで物体検出を行います。

result of detection as each layer


これにより各層からの検出結果が得られるので次の図のように重複が生じてしまいます。

result of detection with duplicate


そこで次のような手順を踏んで重複を除去します。

  1. スコアが高いデフォルトボックスのみ抽出。
  2. 各クラスごとにデフォルトボックスの重なり率IoUを計算
  3. IoUが高い場合はスコアの低いデフォルトボックスを除去


この処理の結果、1つの物体に複数のバウンディングボックスが付与されることを回避できます。

result of post-processing


ちなみに重なり率IoUは次のように計算されます。

how to calculate IoU

学習の仕組み

各特徴マップについて各クラスのスコアの誤差と、デフォルトボックスの位置誤差との合成関数から正解データとの誤差を計算します。クラス誤差と位置誤差それぞれの具体的な計算は論文を参照していただきたいですが、最終的な損失関数は2つの損失関数を重み付けしたものになります。

$$ L(x, c, l, g) = \frac{1}{N}(L_{CLS}(x, c) + \alpha L_{LOC}(x, l, g)) $$

この計算結果を元に誤差逆伝播法によりモデルの重みを更新します。

training SSD


まとめ

個人的に勉強会が行われた時期に物体検出の技術を使っていたので非常に勉強になりました。やはり使っている技術の中身を知ることは大切ですので、SSD以前の物体検出の手法についても勉強していきたいですね。次回はSSDと並んでよく利用されるYOLOの解説と実装をしてくれるとのことで楽しみです。


参考文献

  • Liu, W., Anguelov, D., Erhan, D., Szegedy, C., Reed, S., Fu, C. Y., & Berg, A. C. (2016, October). Ssd: Single shot multibox detector. In European conference on computer vision (pp. 21-37). Springer, Cham..
  • その他特に言及のない画像は勉強会のスライドより引用


Twitter・Facebookで定期的に情報発信しています!

はじめに

 ドーナツを買おうと店内を覗くと、大勢の人が並んでいて買う気をなくしてしまうことがよくあります。

行列を解消すると更に多くの人がドーナツを買い、売上げアップはもちろん、新しいお客さんを獲得するチャンスにもなるのでは...。と気づきました。
そのために店頭業務をスピードアップしてお客さんを待たせない仕組みを作ることが必要です。今回はドーナツ屋さん店頭業務の効率化について考えてみました。

現状、時間短縮の要因は

  • お客さんがドーナツを選ぶ時間が長い
  • ドーナツをレジ打ちする時間が長い、またはミスがあり時間がかかっている

    お客さんにより満足してもらうために、2点目に注目し実現方法を検討しました。


レジ打ち自動化にむけての課題

 現在、レジ打ちの自動化を実用しているお店はよく見かけます。例えば、GUではRFIDを用いてカゴを機械の中に入れただけで商品が登録され、お会計に進めます。しかしこれをドーナツに適用するのは難しいです。
なぜならば、ドーナツそのものにタグは付けられません。タグを付けることなく、GUのような無人レジを実現するにはどのようにすればよいでしょうか。
この問題は機械学習を使うことで解決できます。


解決策|機械学習を用いたドーナツの無人レジ


 機械学習を用いてドーナツの検出と判定を行い、名前と金額を表示しました。
精度は95%以上でドーナツが裏返っていても問題なく検出できています。

 このようなドーナツ検出器があれば次のような利点があります。

  • 機械が判別し、レジでの時間短縮
  • 回転率が上がり、多くのお客さん対応ができる
  • 従業員を使わずに会計ができ、人件費削減  - 人の疲れによる見落とし、ミスがなくなる


ドーナツ検出の応用

 機械学習でのドーナツ検出により、RFIDを使うことなく無人で金額の計算をすることができました。
これにより、タグを付けることができない商品にも無人レジで対応することができます。

 また、農作物の最適な収穫時期を知らせる機械にも応用する事ができます。
収穫する予定の農作物の写真を撮り、機械が今収穫することが最適か判断します。人が農作物の最適な収穫時期を判断するには慣れるまで時間がかかりますが、機械が行えばそのような時間は必要ありません。


終わりに

 今回はドーナツの無人レジによってどのようなことが実現可能かを記事にしました。
次回は、ドーナツ検出の技術を紹介します。


Twitter・Facebookで定期的に情報発信しています!

医療・ヘルスケア分野での機械学習検討状況

2019年6月にロンドンで開催されたAIサミットのヘルスケアAIストリームで実際のヘルスケア問題を解決するための魅力的な機械学習活用事例が発表されました。

医療の課題をいくつか考えてみましょう。

  • 圧倒的な量はあるがオフライン上にあり活用できないデータ(紙カルテ等)
  • 病気や健康など、性質上予測が困難なモノ(いつどんな病気にかかるか予測しにくい)


現在は機械学習を活用し、異なるデータの分析と予測、および日常的な作業の自動化について検討しており、成功したときはこれ以上ない程の大きな影響を与えると予想できます。

本記事では現代の課題に即している2つの事例ご紹介します。

  • Cleveland Clinic『病気治療と入院期間の予測』
  • HiveとCarers UK『最適なシニアケアで自立生活支援』


Cleveland Clinic『病気治療と入院期間の予測』

非営利団体のCleveland Clinicは年間540万人の患者の診察を行っている団体です。
Cleveland ClinicロンドンのCEOであるBrian Donley博士は業界最大の課題の1つである『医療従事者の燃え尽き症候群』へのAIを活用した対策を解説しました。

博士によると燃え尽き症候群に罹る人は平均で23%にもかかわらず、医療従事者は54%と多くいます。特に医師は更にストレスにさらされているそうです。 多大な業務負担により燃え尽き症候群が発生していると考えられるため、早急に負担を軽減しなければなりません。

技術の発達は諸刃の剣です。
技術の発達により医師が作成する必要がある情報と読み込む情報(43,000の医学雑誌、810,000の専門記事、患者が入力したデータ、試験など)が増加し、業務量も増加します。しかし、AIにとっては活用できるデータが増えるのでありがたい状態になります。 Cleveland Clinicはこの状況を利用し、医師がより効率的に治療に専念できることを目指し患者への分析と予測にAIを使用しています。

Cleveland Clinicは再入院の有無と滞在期間・個人の生存状態等の10億点ほどのデータから、退院後の患者はかなりの数が再入院していることを発見しました。
また、臨床データ、人口統計データ、および併存疾患データを分析してパターンを理解し、ある病気の治療方法と入院期間の予測モデルを構築しています。その予測結果で再入院の可能性と入院期間の大幅な短縮がされています。
現在は患者の状態を考慮して組織は必要な人員と期間を予測し配置しています。これは患者にとってより良い結果になっただけではなく、病院側もより適切にスタッフを配置できるようになりました。

スクリーンショット 2020-02-21 12.03.38.png

HiveとCarers UK『最適なシニアケアで自立生活支援』

HiveとClarkとCarers UKは「The Changing Face of Care (変化するケアの顔)」のテーマで発表しました。
Nonprofit Carers UKが共有したデータでは以下のことが明らかになっています。

  • イギリスの介護者は650万人ほどいる
  • そのうち介護と仕事の両方をしている人は300万人、高齢者の介護と子どもの世話をしている人は150万人ほどいる
  • 介護者の72%がメンタルヘルスの問題を抱えている
  • 65歳以上の半数が必要な介護について話していない
  • 40〜60歳以上の半数も親にどのような支援ができるかを話していない


これでは介護者の負担が大きいだけでなく、いざ介護が必要になった時にスムーズな介護ができません。


HiveはCarers UKと複数のパートナーと協力し、高齢者が自立して生活できるような監視システムを検討しました。
このシステムには高齢者の自宅での生活をリモートで監視する介護者向けのモバイルアプリも含まれています。
自宅のセンサーは、テレビ・ケトル・トースター・食器棚・ドア・リビングルーム・キッチンなど、様々な物の使用状況を記録するように設定し状況はレポートで介護者に通知されます。レポートは日次や週次で通知パターンを選択できます。

システムが生活パターンを学習すると介護者は、対象が通常寝ている時間・起きる時間・毎日一定の活動がある時間、およびこの時間に使用される特定の機器について設定ができます。 介護者はその場にいなくても家電の使用状況を確認できるため、介護のストレスを軽減できています。

このシステムの課題として、

  • 高齢者がモニターを設置する許可を得ること
  • 24時間年中無休のモニターに対する抵抗を和らげる必要があること が挙げられています。

    さらなる活用のために介護者と介護される人の事前のコミュニケーションとセキュリティー面での安心が必要です。

スクリーンショット 2020-02-21 12.03.54.png

おわりに

1日の会議でこのような2つの実用的な事例が発表され、注目を浴びたことはAIの今後の活用において大きな進歩です。
それは企業がAIの専門家になって技術で解決する問題を見つけるのではなく、実際の課題を考え、それらを解決するためにAIを活用していることを示しています。 つまり技術ありきのAIから脱出し、課題解決の手段としてのAIとなり始めました。


当社でもAI・機械学習を活用した課題解決をご提案しております。

  • 自社にあるデータを2次活用したい
  • 画像データを活用した機械学習を作成したい
  • 既にAI・機械学習システムを利用しているが思うような効果が得られていない
  • 機械学習ではなにが出来るのか興味がある


このようなご相談は画面右上の[お問い合わせ]までご相談ください。


アクセルユニバースの紹介

私達はビジョンに『社会生活を豊かにさせるサービスを提供する。』ことを掲げ、このビジョンを通して世界を笑顔にしようと機械学習・深層学習を提案しています。

  • ミッション(存在意義)
    私達は、情報通信技術を使って万物(全ての社会、生物)の暮らしをよりよくすることに貢献し、 それを加速させることを使命とします。

  • ビジョン(目標とする姿)
    社会生活を豊かにさせるサービスを提供する。

  • バリュー(行動規範)

    1. 変化を求め、変化を好み、変化する
    2. 自分の高みを目指してどんどん挑戦する
    3. お客様と一蓮托生でプロジェクトを進める


会社概要はこちら


Twitter・Facebookで定期的に情報発信しています!

SNS、口コミでの評価と顧客満足度は深い関係があります。
今回は「ネガポジ判定」を用いて、顧客の要望を発掘していきます。


目次

  • ネガポジ判定とは
  • 実装方法
  • 今後の検討方針
  • 参考文献


1.ネガポジ判定とは

自然言語処理分野に関する文章のネガポジ判定とは、AIが文章の内容がネガティブかポジティブか判定するものです。

今回は食べログからスクレイピングによって口コミ(お店の評価)を抽出し、それらを実際にネガポジ判定します。
判定結果、特にネガティブと判定されたものは、顧客満足度向上に役立ちます。この技術は、既存のデータを分析し二次活用していくために有効な手法です。


Sentiment Analysisライブラリ oseti

今回のネガポジ判定には oseti というライブラリを使用しました。
osetiは日本語評価極性辞書を用いて文の評価極性(ネガポジ)のスコアを計算します。このライブラリのリンクは参考文献に載せておきます。
例えば、以下の3つの文章でosetiを使います。


import oseti
analyzer = oseti.Analyzer()
analyzer.analyze('店員の態度は悪かった。')
==>[-1.0]
analyzer.analyze('ここのラーメンは美味しかった。')
==>[1.0]
analyzer.analyze('店員の態度は悪かったが、ここのラーメンは美味しかった。')
==>[0.0]


このように、osetiは極性を判定するキーワードに対しポジなら「+1」、ネガなら「-1」とスコアリングします。キーワードが複数ある場合はそれらのスコアの和の平均を出力します。また、osetiは1文ごとにスコアを出力し、文章を入力した場合は1文ごとにスコアを出していきます。


2.実装方法

事前準備【食べログから口コミのスクレイピング(抽出)】

では本題に入る前に、実際に食べログから口コミをある程度スクレイピングします。
スクレイピングする対象として、今回は東京都の渋谷(恵比寿,代官山含む)と池袋(早稲田,高田馬場含む)にあるラーメン屋を選択しました。

理由は、2つあります。
1.他の店舗間で値段の差がほぼないため、シンプルに味で口コミの評価が二分されると感じた
2.弊社が渋谷にあるのでどういうお店が評価が高いのか興味がある

そこで渋谷と池袋それぞれ、 評価が3.5以上のお店40件、それぞれの店舗から20件ずつ 計1600件(800×2)の口コミをスクレイピングしました。

スクレイピングの結果の一部です。

blog131_5-1.png blog131_6.png


scoreは食べログの評価、reviewcntはその店舗の口コミの件数で、著作権の関係上、店舗の名前storename、評価reviewは消してあります。このような形でそれぞれのデータをcsvファイルとして保存します。

さて、準備は整ったので早速osetiを使ってネガポジ判定していきましょう。


判定

まず、csvファイルのreviewに入っている文章を全てosetiに入力します。


 #ネガポジ判定
 def negaposi(text):
     review = analyzer.analyze(text)
     re_view= np.average(review)
     return re_view
 #ネガポジ判定値追加
 shibuya_ramen_review ['negaposi'] = shibuya_ramen_review['review'].map(negaposi)
 ikebukuro_ramen_review ['negaposi'] = shibuya_ramen_review['review'].map(negaposi)


出力は次のようになります。一番右のnegaposiの欄が判定スコアで、1文ずつのスコアの平均値を出しています。値が1に近ければよりポジティブであると考えられます。

blog131_7.png blog131_9.png


しかし、上の結果を見てみるとスコアは正の値となっていますが、極端に1に近いとは言えません。
例えば渋谷の1番上のスコア0.19444のレビューを見てみると(著作権の関係上載せれませんが)、スコア0.5は超えてもいいかなと思います。

文章全体を見てポジティブな内容であると分かっても、やはり文全体の平均を取っているので1に大きく近づきはしませんでした。なので、BERTなど文脈を読み取れるようなライブラリを用いた方が精度が上がりそうです。
全体としてポジティブに厳しい判定ではあったものの、ネガティブな内容をポジティブと誤判定することはなく、冒頭であげた「ネガティブな評価を見つける」、といった目的は達成できます。


N-gramによる頻出単語の可視化

次に、N-gramによってテキストを単語ごとに分割し、頻出単語を見ていきます。

blog131_10.png blog131_11.png blog131_12.png
今回ポジティブ判定されたラーメン屋の傾向が何となく分かります。

1、2、3の比較

  • 1では、麺などラーメン屋の口コミとしては当たり前に出てくる単語が上位に来てしまっているところは問題だが、味、麺、具材の種類を表す単語からは、池袋と渋谷を比較しても多少傾向が見られるので、ストップワードを工夫することで大まかな傾向は掴めそう。
  • 1は2、3と比べて一単語ずつの出現数が保証できる。
  • 2、3は1より具体的な麺、味の種類が出てくるため、より特徴的なワードを掴める。また、1よりも池袋、渋谷の差を確認しやすい。
  • しかし、一つ一つの出現数は少なくなるので、データの吟味が必要。
  • 2と3で入れ替わるワードもあり、両方のデータを考察する必要がある。


3.今後の検討方針

今回感情分析の手法(ライブラリ)としてosetiを用いましたが、単語の極性だけを見てもかなりの精度でネガポジ判定ができることがわかりました。

しかし、このosetiにはいくつか問題点があります。

  • 日本語評価極性辞書に載っていない単語が出現した際、それらを定量的に評価できない。
  • 極性辞書の単語の評価には作成者の感情が入っているので、客観的な評価が完璧にできない。
  • 1文ごとにネガポジ判定を行うので、文章全体で見たときに文脈を読み取れない。


これらが原因で、ポジティブな口コミをネガティブ寄りと誤判定したり、その逆の判定をしてしまう時もありました。
日々日本語は増えていくし、ニュアンスもそれに伴って変化していきます。人手で作る極性辞書にも限界があるので、今回はそこがボトルネックとなっていました。

3の問題点を改善するために、今後の検討ではBERTを用いて文章の感情分析を行いたいと思います。
また、単語の出現数だけを見て、ある程度の傾向は感覚的に掴めますが、単語同士の繋がりや、その単語がポジティブへ関係しているか明確ではありません。そのため係り受け解析をするなどが必要だと考えています。
全部の文章からだとその店に対する評価をしている文以外も入ってくるので、そこの取捨選択ができれば、評価されている部分と批判されている部分がより明確になると思っています。


4.参考文献

日本語評価極性辞書を利用したPython用Sentiment Analysisライブラリ oseti
【初学者向け】TFIDFについて簡単にまとめてみた


Twitter・Facebookで定期的に情報発信しています!

機械学習を利用して「エントリーシート自己PR分析サービス」を作成しました。

エントリーシートの評価や言いたいことが伝わるか、心配ですよね。
また、企業の採用担当者は膨大な数のエントリーシートを確認することはかなりの業務量かと思います。

「エントリーシート自己PR分析サービス」では、自己PRの内容を入力すると点数や頻出単語を表示します。


[2020年2月21日追記:デモ動画]

機能追加しました!
・自己PRそのものの採点ができるようになりました。


スクリーンショット 2020-01-23 11.53.29.png

サービスのポイント

  • 文章の特徴を可視化する
  • キーワードとの適合度を判定
  • 文章のカテゴリーを判定
  • 過去合格した自己PRと比較して採点


サービス内容を紹介します。


エントリーシート自己PRの例

私は、アルバイトの中で最も時給がアップしたという実績を持っています。

コンビニエンスストアで3年間勤務していますが、ただ働くのではなく、計画性を持って働くことができるという点が時給アップにつながりました。

具体的には、3つのポイントがあります。

お店の繁忙期をプライベートの予定と照合し、あらかじめお店が忙しい時にはいつでも残業できるようにしていたことです。一緒に働くスタッフの性格を把握しておき、一緒にシフトに入る人によって、自分の立ち位置を変えていたことです。集中力が必要となる発注作業がある日の前後には、徹夜するなどの無理なことはせず、身体的にも余裕をもっておくことです。

これら3つをすべて実行することで、他のスタッフは通常1度に30円しか昇給しないところ、前例のない100円の昇給に成功しました。

この計画性を活かし、御社でも先を見据えたスケジューリングと自己管理で、生産性の向上だけではなく、業務のクオリティをあげることにもつなげて参りたいと考えております。

(【例文多数掲載!】自己PRで計画性を伝えるときのポイントをご紹介から引用したものを少し修正)


ワードクラウド


wordcloud


結果を見ると「時給」や「計画」「アップ」などの頻度が高いことがわかります。
ワードクラウドとは与えられた文章を元に、出現頻度が高い単語ほど大きなサイズで表示するものです。文章内使われた単語を視覚的に捉えることで、エントリーシートなどの文章作成でも役立ちます。


キーワードと自己PRの適合度を判定

キーワード: 計画性 昇給
点数:77.7 点

キーワード:真面目 研究
点数:24.9 点

言いたいことを表現しているか採点するために文章内の頻出単語と自分で付けたキーワードを照合します。

就活において自分の強みなどを記述する際は、「計画性」や「行動力」、「部活」や「研究」などキーワードとなる言葉を意識して文章を組み立てますよね。これがどれぼど的確に出来ているかを採点するために、ワードクラウドの結果 (単語の頻度) とキーワードとなる単語との類似度を点数化しました。

例えば先程の自己PRでは、計画性やアルバイトに関するキーワードを選ぶと点数が高くなり、部活や協調性など関係のないキーワードを選ぶと低い点数になります。


単語の分散表現

キーワードとの適合度を判定するために単語の分散表現を用いました。
分散表現とは簡単に言うと単語を200次元などの高次元のベクトルで表現したものです。分散表現では似た単語同士は類似度が高く算出されます。

さらに、単語の意味も捉えることもできるため、
king - man + woman = queen
といった分散表現の足し引きをすることも可能です。
分散表現を使って、入力文章中の上位10個の頻出単語とキーワードを比べ、最大の類似度から点数を算出しています。
より適切に採点するために、類似度は文章中の出現頻度によって重み付けをしています。例えば、最も頻度が高い単語とキーワードの類似度は計算結果の値をそのまま使い、単語の頻度が1位の半分の場合は、類似度も計算結果の半分の値を使います。
キーワードも複数設定できるようにし、ユーザーの意図を汲み取りやすくしています。


自己PRを100点満点で点数化

自然言語処理において強力なBERTを使って自己PRを点数化しました。
ざっくりとしたBERTの解説については以下の記事をご参照ください。

Googleを理解する!文脈を読み取る最新の機械学習(BERT, ELMo)

自己PRを点数化する方針は良い自己PRを1とラベル付けし、悪い自己PRを0とラベル付けした後に2値分類を行います。2値分類の結果は0以上1以下の連続値で得られるので、その値に100をかけて点数化しました。

このときBERTをいちから学習させようと思うと大量のデータが必要になります。しかし、手元にあるデータ量は限られていたため事前に学習されたモデル(BERT日本語Pretrainedモデル)を利用しました。

最終的なモデルの構成は以下のようになりました。
BERTのEncoder-12-FeedForward-Norm層までを取り出しBidirectional層とDropout層を加えた後、全結合層を追加し2値分類できるモデルを作成しました。

BERT model structure


自己PRの点数化

上で例示した自己PRの点数を出してみましょう。

点数:84 点


次に悪い自己PRの例を用いて点数を出してみましょう。

エントリーシート自己PRの悪い例

私の強みは辛いことも諦めずに立ち向かう粘り強さです。わたしは大学の時にコンビニエンスストアでアルバイトをしていました。

コンビニでは担当する業務が思ったより多く、なかなかすべてを覚えることができなかったので、最初は店長やアルバイトの先輩に叱られてばかりでした。何度も辞めてしまいたいと思うことがありましたが、せっかく始めたからには諦めたくないという気持ちが強く、もっと前向きに仕事に取り組もうと考えました。

そこで、家に帰ってからもアルバイト先で学んだことをしっかり復習し、どの仕事も任せてもらえるような知識を身に付けました。また、気持ちよくお客様に接する事を心掛けて、どんなに疲れている時でも、どんなに忙しい時でも笑顔を絶やさないようにしてきました。今では店長や他のアルバイトの人にも認めてもらえるようになり、そのアルバイトを続けていくことができています。

これからもどんな仕事も諦めずに取り組む姿勢を大事にしたいです。

(自己PRの例文【悪い例:400文字、コンビニでのアルバイト①】から引用)

この自己PRはマイナスなことを書いている部分が多かったり、数字や具体的な内容が欠けておい良くない自己PRだと言えます。実際に点数を出すと

点数:52 点

冒頭の自己PRと比べて30点以上も低い点数となりました。

今回は良い自己PRと悪い自己PRの例をそれぞれ約50件ずつしか用意できなかったにも関わらず、2値分類のAccuracyでは75%以上の良い性能を出すことができました。やはり自然言語処理においてBERTは強力ですね。


まとめ

まだデータ量が少ないので精度にバラツキはありますが、大量のデータがあれば更に実用的なサービスになります。
現在はMicrosoft社などが提供するAPIを利用すれば機械学習を用いた様々なサービスを作ることが可能です。今後も多くのサービスがリリースされていくと予想されます。


Twitter・Facebookで定期的に情報発信しています!

概要

物体検知の分野ではCOCOと呼ばれるデータセットを使って、検知手法の精度に関して数値的な評価が行われます。2020年1月現在、トップの正解率を示しているのが、2019年9月に発表されたCBNetを用いた手法です。

今回は物体検知に関して全くの初心者の方でも理解できるように、この論文を解説していきたいと思います。(原著論文はこちら)

目次

前提知識

CBNetを理解する上で必要な物体検知についての知識をまとめます。以下の3つを押さえればCBNetだけでなく、物体検知全体の概要もつかめると思います。

Backbone

CNNの構造は以下のようになっているのでした。
※図はここから引用

cnn.jpg

CNNの特徴は、上の図のFEATURE LEARNINGのように、ConvolutionとPoolingを繰り返して画像から特徴量を抽出することです。ここで得られた特徴量をもとにして、ニューラルネットワークで学習・予測を行うので、これをいかにうまく行うかが認識精度に直結します。その意味で、この特徴抽出の部分を論文に従って「Backbone」と呼ぶことにします。

CNNベースの物体検知

物体検知をするには、位置の検出と、物体の分類という、2つのタスクを行う必要があります。物体検知の手法はたくさんありますが、この2つのタスクを同時に行うか、別々に行うかで大きく2つに分かれます。

今回はこのうちで、後者の方法に注目します。例えば、最初期に使われていたR-CNNという手法では、まず物体がありそうな場所(これをRoIと呼びます)を見つけ、その後各RoIについてCNNを実行し分類を行います。ただ、これではすごく時間がかかってしまうので、これ以降の手法では様々な工夫をしていますが、基本的なアイディアは同じです。

従って、当然ですがCNNの精度を上げることが、物体検知の精度を上げることにつながります。

detection_ex.png

モデルの評価

モデルの性能を評価するには、どの程度正確に物体検知ができているかという精度の面と、どれくらいの早さで物体検知ができるのかというスピードの面の、両方を考慮する必要があります。例えば自動運転に使うモデルでは、いくら精度が高くても処理スピードが遅いと使い物になりませんよね。

スピードの指標は簡単で、1秒当たり何枚の画像を処理できるか、で決まります。例えば、高速で知られるYOLOというモデルは、条件にもよりますが、1秒で30枚ほど処理できますので、スピードは 30 fps ということになります。

では、精度についてはどのように測るかというと、位置の精度と分類の精度に分けて考えます。まず、位置の精度を求めるには以下のように計算します。iou.png

※図はここから引用

モデルが予測した位置と実際の位置の重なり具合を評価するわけです。完全に一致すると IoU = 1、全く違っている場合はIoU = 0 となります。

分類の精度については、AP や mAP といった数値が用いられます。これらを求めるのは少し複雑なのでこちらを参照してください。「単純にいくつ正解したか、じゃダメなの?」と思うかもしれませんが、それは正確ではありません。例えば画像の中に、リンゴが3つと梨が1つあったとします。いくつ正解したか、を精度の指標にしたとすると、全ての物体を「リンゴ」と予測するモデルが仮にあったとしても 0.75 という高い精度が出てしまうからです。

APもmAPも数字が大きいほど分類精度が高いことを意味します。

実際の評価では、位置の精度と分類の精度を組み合わせて、例えば \(AP_{50}\) のように表します。これは IoU が 0.5 以上の場合のみを考える、という意味です。

CBNetの構造

これまでの議論を踏まえた上で、いよいよ最新の手法CBNetについて解説したいと思います。

CBNetは"Composite Backbone Network"の略です。Compositeは「複合された」という意味なので、複数のBackboneを合わせた構造をしている、ということです。CBNetの新しいところはCNNによって得られた特徴マップを用いて物体検知を行う部分ではなく、CNNそれ自体に階層的な構造を導入したことです。(物体検知部分は他のモデルを使います。)

AHLC

CBNetの本質は以下の図に集約されているので、これを説明します。


cbnet.PNG

普通のCNNではBackboneは一つだけです。図でいうと、右端の一列しかありません。一方のCBNetでは複数のBackboneを用意し(通常2つか3つ)、一つのBackboneの出力を次のBackboneへと入力するという方法をとっています。最終的に右端のBackbone(Lead Backbone)に左にあるBackbone(Assistant Backbone)の効果がすべて反映されます。そしてLead Backbone の出力を最終的な特徴マップとして使い、物体検知を行います。

言葉では分かりにくいので数式で表現します。まず、通常のCNNの場合

\[ x^l = F^l \left(x^{l-1}\right),\,l\geq 2 \]

と表現できます。左辺の \(x^l\) は \(l\) 層目の出力を表しています。\(x^l\) はその前層の入力 \(x^{l-1}\) に何らかの処理(畳み込みやプーリング) \(F^l\) を施すことで得られる、ということを意味します。

続いてCBNetの場合は、次のように表現できます。

\[ x_k^l = F_k^l \left(x_k^{l-1} + g\left(x_{k-1}^l\right)\right),\,l\geq 2 \]

となります。\(x\) や \(F\) の右下に新しい添字 \(k\) が付きましたが、これは \(k\) 番目のBackboneであることを表します。また、新たに \(g\left(x_{k-1}^l\right)\) という項が加わりましたが、これは前の( \(k-1\) 番目の)Backboneの \(l\) 番目の出力に、(サイズを変えるなどの)処理 \(g\) を施したものも入力として加味することを意味します。このタイプを論文では AHLC (Adjacent Higher-Level Composition = 隣の上位層との合成)と呼んでいます。

CBNetの本質はこれで尽くされていますが、一つ前のBackboneの出力をどのように次のBackboneに入力するかによっていくつかのパターンがあります。順に見ていきましょう。

SLC (Same Level Composition = 同じ階層同士の合成)

以下の図を見て先程のAHLCと比べると分かりやすいです。

slc.png

数式で表現すると次のようになります。

\[ x_k^l = F_k^l \left(x_k^{l-1} + g\left(x_{k-1}^{l-1}\right)\right),\,l\geq 2 \]

ALLC (Adjacent Lower-Level Composition = 隣の下位層との合成)

allc.png

数式で表現すると、

\[ x_k^l = F_k^l \left(x_k^{l-1} + g(x_{k-1}^{l-2})\right),\,l\geq 2 \]

※論文中では \(g(x_{k-1}^{l+1})\)となっていますが、誤植だと思われます。

DHLC (Dense Higher-Level Composition)

dhlc.png

数式で表現すると、

\[ x_k^l = F_k^l \left(x_k^{l-1} + \sum_{i=l}^L g_i\left(x_{k-1}^i\right)\right),\,l\geq 2 \]

ここで \(L\) は各Backboneの階層数です。

まとめとして、以上の4つのモデルを並べてみます。

cbnet.png

結果

最後に色々なパラメータを変えたときのCBNetの結果について示します。実行環境などの条件は論文を参照してください。

変えるパラメータは以下の3つです。

  1. CBNetの種類

  2. 得られた特徴マップから物体検知を行うモデル

  3. Backboneの数

1. CBNetの種類を変えた場合

compare_cbnet.png

これを見ると、一番最初に示したAHLCが最も高い精度を示しているといえます。

ADLCとAHLC(DHLCと同じです)との比較から、単にパラメータを増やせば精度が上がる、という問題ではないことが言えます。

2. 物体検知を行うモデルを変えた場合

compare_model.png

Singleは普通のCNN、DBは2層のBackbone、TBは3層のBackboneを表しています。これを見ると、どのモデルを使ってもCBNetが有効であることがわかります。これはCBNetによって画像の特徴がより良く抽出されていることを示唆しています。

3. Backboneの数を変えた場合

compare_backbone.png

Backboneの数を増やすほど精度が上がっているのが見て取れます。計算量とのトレードオフも考慮すると、2層か3層にするのが良さそうです。

最後に、CBNetを用いた物体検知モデルと、他の有力な物体検知モデルとの比較です。

compare_all.png

Cascade Mask R-CNNとCBNetを組み合わせたモデルが、精度の面では最高の成績を残しています。とはいっても未だに50%強の成績であり、改善の余地は十二分にあります。また、肝心な点である、なぜこうすると精度が上がるのか、ということは分かりません。現在の機械学習のモデルでありがちですが、よく分からないけどこうすると精度が上がったよ〜、というのが現状です。


Twitter・Facebookで定期的に情報発信しています!

最近扱われるデータ量は膨大です。それに伴いデータの見方を変え、かつては重要度が低かった点からも関係性を見出す必要があります。
そのために確率推論は多くの命題の生起する可能性を確率として記述することから始められ、条件付き確率と結合確率を1つずつ繋ぎ合わせ段階的に構成されています。


ベイジアンネットワーク(Bayesian network)

人工知能(AI)における確率推論の一つのモデルです。
イギリスの確率論研究家トーマス・ベイズが発案したベイズの定理に基づき、因果関係を確率により記述するグラフィカルモデルの1つであり、「原因」と「結果」の関係を複数組み合わせることにより、「原因」「結果」がお互いに影響を及ぼしながら発生する現象をネットワーク図と確率で可視化したものです。これは「原因」から発生する「結果」を、確率をもって予測する推論手法とも表せます。

ベイジアンネットワークの特徴

  • 単純な二方向の計算ではないこと
  • 確率(乗算)で表現できること
  • 視覚的に操作できること
  • チューニングが容易であること
  • 人間の意志決定のプロセスと非常に似ていること
  • AIでは扱いにくい凡例の少ない事象もベイジアンネットワークでは扱える
  • 予測において説明変数の入力に欠損があってもよい
    欠損値に適切な確率分布が割り当てられ、必ずしも予測時に全ての観測値を揃える必要はない。
  • モデルの利用用途が限定されない
    ベイジアンネットワークは矢印の順方向だけでなく、逆方向にも推論が行える。観測を入力する変数と予測対象となる変数がモデルで限定されることなく自由に選択できる。


逆方向の推論?

鍵となるのは、条件付き確率と結合確率の定義です。

結合確率とは事象A、事象Bが同時に起こる確率で、条件付き確率とはどちらかの事象が先に起きた上で他の事象が起こる確率です。
では、以下がそれぞれの定義と逆方向への推論が可能であるかを示したものです。

スクリーンショット 2020-02-14 12.22.33.png

Aが先に起こる確率がわからない場合もBが先に起こる条件付き確率がわかれば推論できます。

Unknown.png


利用シーン

ベイジアンネットワークは様々な事象間の因果関係(厳密には確率的な依存関係)をグラフ構造で表現するモデリング手法の一つで、故障診断、気象予測、医療的意思決定支援、マーケティング、推薦システムなど様々な分野で利用されています。また消費者行動のモデル構築にも応用されています。
今後、ベイジアンネットワークは個人の特徴(行動、性格など)の因果関係を確率として数値化することで、個人の行動パターンや特徴を組み合わせて考えることで新たな可能性を見いだせるはずです。


Twitter・Facebookで定期的に情報発信しています!

車を運転していてヒヤッとした経験はありませんか?

疲れや睡眠不足からついうとうとしてしまい、急ブレーキ...。
起こってはならない事故ですが、死亡事故の4割程度を居眠り運転による事故が占めるそうです。1人で運転していると頼れるのは自分だけ。音楽やガムで気を紛らわせるのも限界があり不安ですよね。
本日はAI・機械学習を活用した、居眠りを検知する仕組みをご紹介します。


実際に使ってみました。うとうとして目が半目になるとアラートを出します。


このAIは動画のように、目が半目になると"Wake up !"と注意を促します。
今回はおこなっていませんが、よそ見時間が長いことで注意することや、音でより強い注意をすることもできます。



作成にあたり、Open CVとDlibというオープンソースのライブラリを活用しました。
Open CV Dlib
Open CVで顔そのものを認識し、Dlibで目の認識、また目が閉じそうな時の認識をしています。



AI・機械学習が身近になり、「こんなところにもAIが!」と気付くシーンが多くなってきていますね。
今後も身近な活用例をご紹介していきます。


Twitter・Facebookで定期的に情報発信しています!

消費者や企業によって発生する廃棄物の処理・管理が課題として挙げられることが増えています。

包装材の削減などで最終的に発生するゴミの量が削減されてはいますが、ゴミの発生は無くなることはなく今後も少なからず発生します。
廃棄物の処理・管理は主に手作業で実施されていて膨大な労力とコストが生じています。これらの課題解決のためにAIが活用され始めています。機械学習、ディープラーニング、コンピュータービジョンなどのテクノロジーで、廃棄物管理の効率と生産性向上のためのソリューションが登場しました。

「ゴミ発生段階 / 収集中 / 廃棄物処理プラント」の3段階に分けて海外サービスを紹介します。


SMART WASTE BIN

ゴミ箱でゴミを識別し、種類ごとに分類します。

SMART WASTE BINはBin.e社によって開発されたシステムで機械学習でゴミ分類のルールを学習し、ゴミ収集前のゴミ箱段階で分類をおこないます。ゴミが捨てられる時に全ての分別がなされので廃棄物処理センターで大量の廃棄物を選別する必要がなくなります。

さらにシステムはゴミ箱がいっぱいになったことも検知し、収集スケジュールを無駄のないように最適化します。事前に決まっているスケジュールで収集トラックを発送する代わりに、ゴミ箱がいっぱいになった場所のみを訪問するように収集ルートを最適化します。これにより、人手不足であった課題が解消され、収集速度が向上し、人件費・燃料費も削減されます。

WASTE


Waste & recycling sorting systems(廃棄物およびリサイクル選別システム)

廃棄場で分類し、適切なゴミ処理をします。

ゴミ収集後に廃棄場で人が分別するのではなく、機械学習を使用して分別ルールを学習し、ゴミの種類に基づいて廃棄物を識別および処理します。様々なタイプの廃棄物の画像を大量に学習させることで、システムは廃棄物の分類を理解し、特定の特徴に基づいて学習したカテゴリーとゴミを一致させます。
人の業務をシステムが代わり、今まで悩まされていた人手不足や見落としを解消し、少ないコストで同じ業務をおこなっています。

2018年のWaste Expo conferenceにも出展した、Machinex社はリサイクルすべきカートン、プラスチックボトルを見つけるためにAIを活用しています。Machinex社によると、このシステムは毎分最大70回ピックします。それは人間の2倍の業務量で、イリノイ州の大手リサイクル会社であるLakeshore Recycling Systems社は同社のSamurAIを設置し、2人分の作業をAIが実施し年間約130,000ドルの削減に成功したと発表しています。

WASTE


GAIN technology

上記のようにゴミは収集の時点で分別されることが理想です。
しかし、全てのゴミを分別し切ることは難しく、収集後のゴミをリサイクル時に分別するAIが開発されています。

TOMRA社は、2019年にGAIN technologyを発表しました。リサイクルする上で廃棄物の純度を確保するにはカートリッジからシリコンを分離する必要があります。GAIN technologyはコンピューターセンサーを使用してポリエチレンストリームからポリエチレンシリコンカートリッジを取り外します。
何千もの廃棄物タイプの画像が与えられ、ディープラーニングを利用し分類する方法を学習しました。そのため、さまざまな種類のシリコンカートリッジ、ダブルカートリッジ、さらには変形または部分的に破壊されたカートリッジを画像を分けて訓練することなく識別できます。
TOMRA社によるとGAIN technologyはカートリッジの99%の排出を達成しています。

WASTE


効率の改善と人件費の削減

課題としてあげた「廃棄物の処理・管理には膨大な労力とコストがかかっている」ことの背景には労働人口の減少が考えられます。今後はエネルギー不足も課題となってくると予想できるため、限られたエネルギーを最適化していく必要が更に高まると想定されます。

今回紹介したゴミ・廃棄物処理方法は発生段階、収集中、更には廃棄物処理プラント...と全ての段階でより効率的な改善策の提案をしています。
機械学習、ディープラーニング、およびコンピュータービジョンテクノロジーの活用により廃棄物の収集・管理を効率的に実施することができ、労働力の削減、様々な人にとって働きやすい環境の構築を実現しています。


Twitter・Facebookで定期的に情報発信しています!

概要

小説を丸ごと理解できるAIとしてReformerモデルが発表され話題になっています。今回はこのReforerモデルが発表された論文の解説を行います。

自然言語や音楽、動画などのSequentialデータを理解するには広範囲における文脈の依存関係を理解する必要があり困難なタスクです。"Attention is all you need"の論文で紹介されたTransformerモデルは広くこれらの分野で用いられ、優秀な結果を出しています。 例えば機械翻訳などで有名なBERTはTransferモデルが基になっており、数千語にも及ぶコンテキストウィンドウが使われLSTMに比べて長い文脈を考慮することができます。しかし、このようにモデルの規模が大きくなってくるとリソースの問題が発生し、大きな研究機関以外はモデルの訓練が行えない状況です。

ReformerはTransferを改良し軽量化することで、1つのアクセラレータ、16GBのメモリで100万ワードに及ぶ文章を扱えるようにしました。

この記事ではTransformerモデルがどう改善されたかを解説していきますので、Transformerモデル自体の解説については過去の記事を参考にして下さい。

【論文】"Attention is all you need"の解説


大規模なTransformerモデルが抱える問題

まずは従来のTransformerモデルを大規模化したときにどういった問題が起こるか説明します。


Attentionの問題

Transformerモデル内のAttentionの計算にはscaled dot-product attentionが使われています。

queryとkeyの次元を\(d_k\)としすべてのqueryをまとめた行列を\(Q\)で表し、keyとvalueも同様に行列\(K\)で\(V\)と表すとAttentionの計算は

$$ \rm{Attention}(Q, K, V) = \rm{softmax}(\frac{QK^T}{\sqrt{d_k}})V $$
トークンの長さを\(L\)とすると内積\(QK^T\)は計算量、メモリ量ともに\(O(L^2)\)となります。

例えば、\(Q\)、\(K\)、\(V\)のサイズがすべて\([batch\_size, length, d_k]\)だと仮定すると、トークンの長さが64Kの場合バッチサイズが1だったとしても

$$ 64\rm{K} \times 64\rm{K} \times 32 \rm{bit} \ \rm{float} \approx 16 GB $$

とメモリ消費が激しくなります。

このように小説のような非常に長い文章をTransformerで扱いたい場合に、Attention層で必要な計算量、メモリ量が問題になります。


Activationを保持しておくためのメモリ量の問題

もう1つの問題が逆伝播に必要な各層のActivationを保持しておくためのメモリ量の問題です。
まずTransformerモデル全体で32-bit floatのパラメータ数0.5B (Billion) を保持するのに約2GB必要です。
これに加えてトークンの長さが64KでEmbeddingのサイズが1024、バッチサイズが8とすると

$$ 64\rm{K} \times 1\rm{K} \times 8 \approx 0.5B \ floats $$


となるので、1つの層についてActivationを保持するためにさらに2GMのメモリが必要になります。
典型的なTransformerモデルが12個以上の層を持つので、Activationを保持しておくだけで24GB以上必要になります。

このようにモデルに与える文章が長くなるとすぐにメモリを使い果たしてしまいます。


Attentionの計算を効率化 (LSH Attention)

Attention層での処理で問題となるのは、内積\(QK^T\)の処理でした。Reformerではこれをlocality-sensitive hashing (LSH)によって解決します。

内積\(QK^T\)の処理が問題ですが、結局のところ知りたいのは\(softmax(QK^T)\)の結果です。

softmaxの結果は内積の値が大きい要素に寄与するため、queryとkeyの内積が大きくなるペアの計算結果だけを用いて近似値を求めることができます。つまりqueryとkeyのすべてのペアについて内積を計算するのではなく、queryに対して類似したkeyだけを考慮すればよいので処理が効率化されます。

このとき、queryと類似したkeyを選ぶのにLSHを使います。詳しい解説はここでは避けますが、LSHは高次元のデータを確立的処理によって次元圧縮する手法です。Reformerではハッシュ値の計算は次のようにして求めます。

以下の画像で示すようにベクトルをランダムに回転させてどの領域に移るかによってどのバケットに入れるかを決定します。画像内の上の例ではRandom Rotation 1 以外、xとyの移る先が異なるためそれぞれ違うバケットに入ります。一方で下の例では、xとyが3回の回転ですべて同じ領域に移るため同じバケットに入ります。

example of hashing function

次にLSHを利用してどのようにAttentionの計算を効率化するか具体的なステップを以下の図とともに説明します。図中の色はどのハッシュに割り当てられたかを示しており、似た単語は同じ色で表されます。

まずLSHによってハッシュを割り当てて、ハッシュ値によって単語を並べ替えます。並べ替えた後、小さな塊に分割することで並列処理を可能にします。そしてAttentionの処理を同じ塊の中および1つ前の塊に対して行うため大幅な計算不可の軽減ができます。

description of LSH attention

LSH Attentionの計算を式で表すと

$$ o_i = \sum_{j \in \mathcal{P}_i} \rm{exp}(q_i \cdot k_j - \mathcal{z}(i, \mathcal{P}_i))v_i \qquad \qquad \rm{where} \ \mathcal{P}_i = \{j:i \geq j \} $$
\(i\) はQの\(i\)番目の要素を表しており、\(\mathcal{P}_i\)はi番目のqueryに近いkeyの集合を表しています。また、\(\mathcal{z}\)はsoftmaxの分母の部分だと考えて下さい。

これらの処理により、計算量を\(O(n^2)\)から\(O(n\log n)\)まで削減することができます。これでAttentionの問題を解決することができました。


Activationを保持しておくためのメモリ量の削減 (Reversible Transformer)

Attentionの問題は解決されましたが、学習時に逆伝播のためにActivationを保持しておかなければならずメモリ消費が大きくなる問題が残っています。Reformerではこの問題を解決するために順伝播時にActivationをメモリ内に保持しておくのではなく、逆伝播時に再計算する方法を取りました。

この方法を実現させるためにGomez et al. (2017)で示されたReversible Residual Network (RevNet)を応用します。RevNetでは出力側から順次1つ先の層の結果を元にActivationを再計算します。

structure of reversible residual network

通常のネットワークでは(a)のようにベクトルが通過するスタックに各層が追加されていきます。一方でRevNetでは各層において2つのActivaltionを持ちます。そして(b)のようにそのうち1つだけが通常のネットワークと同じように更新されます。もう1つのActivationは(c)のようにもう一方のActivationとの差分を捉えるために使われます。

これにより順伝播時にActivationを保持する必要がなくなり、逆伝播時に出力側から順次再計算することでActivationを再現することができます。これでActivationを保持するためのメモリを削減することができました。


実験

最後にReformerのパフォーマンスを見てみましょう。実験には以下の入力のサイズが非常に大きいタスクに対して行われました。

  • enwik (テキストタスク) - 入力トークンの長さ64K
  • imagenet64 (画像生成タスク) - 入力トークンの長さ12K


まず、Reversible Transformerと通常のTransformerの性能を比べてみましょう。

experiment result of reversible transformer

グラフを見て分かるようにテキストと画像どちらのタスクにおいてもReversible Transformerが通常のTransformerとほぼ等しい性能を見せました。
Reversible Transformerによってメモリ消費を抑えても性能が犠牲になることはないとわかります。

次にLSH AttentionがTransformerの性能にどう影響するかみていきましょう。
次のグラフはfull attention (通常のAttention)とLSH Attentionとの比較です。グラフ中のn hashesはLSHでのハッシュの割り当て処理を何回行うか示しています。割り当てを複数回行った後、それぞれのラウンドでqueryと同じバケットに入ったすべてのkeyをAttentionの計算に利用します。なぜこのようなことをするかというと、LSHでは確率的にハッシュを割り当てるので、確率は低いですが類似した要素がちがうバケットに入る可能性があるからです。

グラフを見ると8 hashes以上でfull attentionと同じ性能になっています。

experiment result of LSH attention
最後に、以下のグラフは入力シーケンスの長さに対する学習にかかる時間を示しています。
入力シーケンスが長くなるとfull attentionでは指数関数的にかかる時間が増加する一方で、LSH Attentionはほぼ一定になっていることが見てとれます。

experiment result of attention speed


まとめ

ReformerはTransformerモデルをリソース面で改善することで16GBのメモリ、単一のアクセラレータで最大で100万語の文章の処理を可能にしました。また文章だけでなく画像や動画を扱うタスクへの応用も期待できます。さらに大きな研究機関以外でも非常に長いシーケンスを扱えるようになる可能性も秘めており、AIの民主化という観点でも今後期待が高まりそうです。


参考文献

  • Kitaev, N., Kaiser, Ł., & Levskaya, A. (2020). Reformer: The Efficient Transformer. arXiv preprint arXiv:2001.04451.
  • Gomez, A. N., Ren, M., Urtasun, R., & Grosse, R. B. (2017). The reversible residual network: Backpropagation without storing activations. In Advances in neural information processing systems (pp. 2214-2224).
  • Kitaev, N., Kaiser, Ł. (2020). Reformer: The Efficient Transformer. Retrieved from https://ai.googleblog.com/2020/01/reformer-efficient-transformer.html?m=1



Twitter・Facebookで定期的に情報発信しています!

日々AIに関する技術は発展していき、その中でも自然言語処理に関するトピックには目が離せません。
Apple社のSiri、AmazonのAlexaなど人間と会話できる(対話型)AIを通して、そういった技術が私たちの身近な存在になってきました。
そのような中、2020年1月末にGoogleが凄まじいAIチャットボット「Meena」を発表しました。今回はこのMeenaから今後のチャットボットの可能性について考えていこうと思います。


そもそもチャットボットとは?何ができるのか?

一般にチャットボットとは、「音声やテキストを分析し、自動的に会話を行うロボット」のことを指します。
先ほど述べたSiriは、iPhoneの普及に伴ってその知名度は爆発的に上昇しました。

「明日の天気は?」「朝8時にアラームをセットして」など、話しかけるだけで応答してくれるシステムは確かに便利です。

しかしこのような技術を商業的に用いるとなると、どういったことが考えられるでしょうか?

例えば、「顧客からのメールや電話対応にチャットボットを用いて業務の効率化を図る」ことが挙げられます。 顧客からのサービスや製品についての疑問というものは、Web上のFAQを読めば分かるような事も多いでしょう。

そういった簡単な質問に対してチャットボットを活用すれば、実際の社員はそれ以外のクレーム対応など重要な対応に専念できます。

今後のAIの普及と共に「AIができること」と「人間が行うべきこと」の棲み分けが重要になってきます。


Meenaとは?既存のチャットボットとの違いは?

では本題の「Meena」について見ていきましょう。

SiriやAlexaは一問一答形式の応答には特化しています。しかし実際に"自然な"会話をしようとすると、 AIが答えやすいように人間側がちょっとした調整をしないといけません。

しかし今回紹介する「Meena」ですが、ディープラーニングの技術を用いて人間と"自然な"会話を行うことができます。

GoogleはこのMeenaの能力を定量的に評価するため、SSA(Sensibleness and Specificity Average)[整合度と特異度の平均] という新しい評価尺度を導入しています。

SSAは自然な会話に必要な特性を評価するための指標で、(AIの)応答が文脈において意味をなすか、 そしてそれまでの話に対して特有なものであるか(限定的なものか)を計測します。

一般に前者は既存のチャットボットなら可能ですが、後者を達成するのは難しいとされていました。

つまり、「私はテニスが好きです。」という発話に対して「私もです。」という応答はどんな話題にも当てはまりますが、 「私もです。ロジャー・フェデラーにはなれないけども!」という応答は当てはまる場面が限られてきます。 こういった応答ができるのがこのMeenaというわけです。

Googleはクラウドワーカーを使ってMeenaとの会話のサンプルを生成し、約100の会話で発話を評価しました。 このSSAに対して、Meenaは以下の好成績を叩き出しています。

meena1.png

[✳︎Google AI Blog より引用]

Humansは人間、Mitsuku、Cleverbot、DialoGPT、Xiaoiceは既存のチャットボットを指します。
Mitsukuはチューリングテストコンテストで有名な ローブナー賞 を過去4度受賞するほどのチャットボットでしたが、Meenaはこれに圧倒的差を付け、人間のスコアにかなり近い値を出しています。


Meenaとの会話

実際にMeenaと人間が対話しているテキストがGithub上に上がっているのでそれらの1つを見てみましょう。

まず比較のためにMitsukuと人間の対話を見てみます。

meena2.png

29行目で人間側が「遅刻した」と言っているのに、Mitsukuはその後3回も「あなたは遅刻したの?」と聞き返しています。ちゃんとした会話が成り立っていません。

ではMeenaと人間の対話はどうでしょうか。

meena3.png

論文のトピック(題名)について人間側が迷っているようですが、それに対しMeenaは「水中での呼吸法」とそこそこ的確な返答ができています。


チャットボットの今後の可能性

Meenaについて、今回Googleは「整合度と特異度にのみフォーカスしたが、今後の課題として他の属性(個性や事実性)にも注視していく」と述べています。

他にも、Meenaに安全性があるか、バイアス(偏見)を持たないかといった倫理的側面がチェックされるまで一般向けに公開しないとしています。

数年前 Microsoftが発表したチャットボット「Tay」が人種差別発言をしたことはまだ記憶に新しいです。 こういった差別的発言をしないようなチャットボットができる未来が楽しみです。

MeenaのSSAのスコアの高さには正直驚きを隠せませんでした。AIが人間の会話レベルに到達するのはそう遠くない未来かもしれません。

コールセンターでは、顧客からの製品に関する簡単な質問に答えるチャットボットを導入している企業もあるそうですが、 近い将来はクレーム対応など難しいタスクもこなせるようになるかもしれません。今回のMeenaの発表は、今後の技術発展への期待が止まらないものでした。


チャットボットを用いて改善できる業務

人間と同レベルもしくはそれに近いレベルのチャットボットが誕生したら何ができるようになるでしょうか。

先程述べたことも含め、以下のようなことが考えられます。

  • サービスや製品に関するお客様の疑問は全てチャットボットで対応できる(現時点で一部をAIに任せている企業もある)
  • 音声による感情分析と合わせれば、クレーム処理など高度な対応もできるようになる
  • お客様との会話データを全て残せるため、それらのデータからお客様のニーズをキャッチできる


こういったメリットはたくさんありますが、チャットボットと人間の応答を比較した時、ちょっとしたニュアンスの違いや倫理観のズレが生じる時もあるでしょう。
特にAIが犯したミスに関して、その責任の所在が「AI」にあるのか「AIを作った人間」にあるのかという議論も出てきます。
倫理的側面も含め、こういった問題との向き合い方がこれからの課題となってくるでしょう。


参考文献

Towards a Human-like Open-Domain Chatbot
Towards a Conversational Agent that Can Chat About...Anything


Twitter・Facebookで定期的に情報発信しています!

このアーカイブについて

このページには、2020年2月に書かれた記事が新しい順に公開されています。

前のアーカイブは2020年1月です。

次のアーカイブは2020年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。