Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ElasticsearchとKibelaを活用した SlackでのCSお問い合わせ対応業務の改善

tawamura1224
October 02, 2021

ElasticsearchとKibelaを活用した SlackでのCSお問い合わせ対応業務の改善

ユーザからのお問い合わせに対して適切な回答を行うことは、様々なサービスを提供する上でとても重要です。弊社ではその中でも技術的なお問い合わせについて、Slack上で問い合わせ担当エンジニアへ調査を依頼する業務フローが存在します。現在、問い合わせ担当エンジニアは当番性であり、担当領域以外の問い合わせについても対応しています。この業務フローに関して、新しいお問い合せのうち、一部は過去に対応したお問い合わせと類似したものや一致するものが存在し、回答の参考になることがあります。
本セッションでは、新しいお問い合わせについて、過去のお問い合わせから類似するものをAmazon Elasticsearch Serviceを使用して自動で抽出し、同時にKibela Web APIを使用して関連するドキュメントを検索した上で、Slackのスレッドに投稿するシステムについて導入した話を紹介します。

tawamura1224

October 02, 2021
Tweet

Other Decks in Programming

Transcript

  1. © 2012-2021 BASE, Inc. BASE株式会社 Data Strategy Section 粟村 誉

    @tawamura1224 ElasticsearchとKibelaを活用した SlackでのCSお問い合わせ対応業務の改善
  2. © 2012-2021 BASE, Inc. 自己紹介 3 2010〜 大学・大学院で自然言語処理の研究 2016〜 ヤフー株式会社       Entity Linkingパッケージの基礎開発など

    2018〜 ITベンチャー企業       不正行動の検知モデル作成など 2019〜 BASE株式会社       不正決済対策など検知系全般 粟村 誉 (Awamura Takashi)
  3. © 2012-2021 BASE, Inc. 5 Confidential ネットショップ作成サービス「BASE」 ショップ開設数 (個人・法人・行政を含む) 160万ショップ以上

    BASEかんたん決済利用料 3.6%+40円 サービス利用料 3% 初期費用・月額費用 0円 ショップオーナーのサポート機能が充実!(BASE Apps) コンセプト:「誰でも簡単に使えるネットショップ作成サービス」 個人でも決済機能をかんたん導入。審査もスピーディー! クレジットカード 銀行振込 コンビニ決済・Pay-easy 後払い キャリア決済 PayPal Amazon Pay
  4. © 2012-2021 BASE, Inc. 背景: ユーザからのお問い合わせへの調査業務 7 CS担当の人から、主に技術的な 内容に関してエンジニアに ヘルプを求める仕組み

    経緯や結果はSlackのスレッドと Kibelaという社内Wikiツールに 残している https://devblog.thebase.in/entry/2020/12/10/113000
  5. © 2012-2021 BASE, Inc. こういうものを作りたい 10 新規のお問い合わせ 過去のお問い合わせ群 過去の対応結果・仕様書 ドキュメント群

    類似のお問い合わせ 自動返信 関連するドキュメント 自動返信 自動返信内容などを 見て対応 担当エンジニア
  6. © 2012-2021 BASE, Inc. システム概略図 (AWS環境下で作成) 11 Slack投稿イベントを取得 Slack Amazon

    API Gateway AWS Lambda クエリ検索 (VPCなどについての説明は省く) 投稿に取得結果を自動返信 Amazon Elasticsearch Service 類似投稿を全文検索、 新規お問い合わせをESへ追加 検索結果 検索結果
  7. © 2012-2021 BASE, Inc. TFIDFとは 単語の重要度の様なもの。対象文書中に登場する頻度(TF)と、登場する文書頻度の逆数 (IDF)によって計算されるスコア。その文書でよく出てくる特徴ある単語は高スコアにな る傾向がある。 例.文書A「私はラーメンが好きだ。特に味噌ラーメンは味噌の旨味がたまらない。」   文書B「私は焼きそばが好きだが、ラーメンもよく食べる。」

    文書Aには「ラーメン」が2回も出ているが、文書Bにも出ているので単語としてありふれている 文書Aの「味噌」は他の文書では出ていないので、この文書特有の単語と言える。しかも2回も出ている →文書Aは「味噌」という単語が特徴的である Slack投稿文の解析、処理: TFIDF 17 文書A 味噌: 0.64 文書B 焼きそば: 0.58 ラーメン: 0.46 ラーメン: 0.41  : :
  8. © 2012-2021 BASE, Inc. お問い合わせ投稿を、以下のような形でElasticsearchのインデックスに追加 日本語全文検索用にtextとkeywordにはkuromoji_analyzerを使う 'orig_text': {'type': 'text'}, #

    元投稿本文 'text': {'type': 'text', 'analyzer': 'kuromoji_analyzer'}, # 処理済本文 'keyword': {'type': 'text', 'analyzer': 'kuromoji_analyzer'}, # 形態素解析結果 'ts': {'type': 'text'}, 'thread_ts': {'type': 'text'}, 'link': {'type': 'text'}, # 投稿リンク ElasticsearchへのSlack投稿文保存 18
  9. © 2012-2021 BASE, Inc. リクエスト処理Lambdaの実装 LambdaはAWSのサーバーレスコンピューティングサービス 新規お問い合わせのEventを受けて、 - お問い合わせ投稿のテキスト処理 -

    TFIDFによる特徴語抽出 - ESからの投稿検索 - Kibela記事検索 - 結果のSlack投稿 - ESへの投稿保存 を一挙に行う 19 詳しくは同ブログで!
  10. © 2012-2021 BASE, Inc. システム概略図 (再掲) 20 Slack投稿イベントを取得 Slack Amazon

    API Gateway AWS Lambda クエリ検索 (VPCなどについての説明は省く) 投稿に取得結果を自動返信 Amazon Elasticsearch Service 類似投稿を全文検索、 新規お問い合わせをESへ追加 検索結果 検索結果
  11. © 2012-2021 BASE, Inc. 過去の類似お問い合わせ記事の取得でElasticsearchの 日本語全文検索を使う 新規お問い合わせについてテキスト処理と形態素解析、 TFIDFスコアの計算を行う TFIDFで得られるスコアは名詞形態素ごとだが、連続す る名詞は名詞句として結合し、TFIDFスコアも合算値

    とする 例.「非公開(0.4)/商品(0.2)」とあった場合は、 「非公開商品(0.6)」とする Elasticsearch検索に関しての調整① 21 NEW ・テキスト処理 ・形態素解析 ・TFIDFスコア TFIDF計算済 名詞句合算済 ・名詞句作成 非公開: 0.4 商品: 0.2  : 非公開商品: 0.6 カウント: 0.1  :
  12. © 2012-2021 BASE, Inc. Elasticsearch検索に関しての調整② 22 TFIDFスコアの高い名詞句20件をスペースで結合した ものを、ESに保存されたタグなど削除済み本文(text) に対して全文検索で検索をかける 例.

    「非公開商品 カウント 閲覧 非公開 ショップデータ    商品 表示...」をmatchクエリに使用 (他にもいい方法があるかもしれませんが、あまり  精査できていません😖) 名詞句合算済 お問い合わせ投稿 ・上位名詞句で  検索 類似お問い合わせGET
  13. © 2012-2021 BASE, Inc. システム概略図 (再掲) 23 Slack投稿イベントを取得 Slack Amazon

    API Gateway AWS Lambda クエリ検索 (VPCなどについての説明は省く) 投稿に取得結果を自動返信 Amazon Elasticsearch Service 類似投稿を全文検索、 新規お問い合わせをESへ追加 検索結果 検索結果
  14. © 2012-2021 BASE, Inc. ・上位名詞句 Kibela検索に関しての調整① Kibela検索では、シンプルなクエリ検索によって行われる 多くの単語を指定するとカバレッジの問題で検索結果が 0件になってしまう、など調整必要 TFIDFで得られるスコアは名詞形態素ごとだが、連続する

    名詞は名詞句として結合し、TFIDFスコアも合算値とする 例.「非公開(0.4)/商品(0.2)」とあった場合は、 「非公開商品(0.6)」とする 上記で得られた名詞・名詞句についてスコア上位2件の スペース区切りクエリで検索 24 名詞句合算済 非公開商品: 0.6 カウント: 0.1  : 非公開商品 カウント
  15. © 2012-2021 BASE, Inc. 動きそう! 26 新規のお問い合わせ 過去のお問い合わせ群 過去の対応結果・仕様書 ドキュメント群

    類似のお問い合わせ 自動返信 関連するドキュメント 自動返信 自動返信内容などを 見て対応 担当エンジニア 👍
  16. © 2012-2021 BASE, Inc. 非公開商品が閲覧されてしまうという お問い合わせ TFIDFスコア高い順 - 非公開商品 -

    カウント - 閲覧 - 非公開 - ショップデータ - 商品  : 実際のレスポンス例(お問い合わせ再掲) 27
  17. © 2012-2021 BASE, Inc. TFは新規お問い合わせについて計算できるが、IDFは事前に計算が必要 チャンネル全投稿を形態素解析で名詞のみにし、IDF値を計算 全投稿を使用するのは、問い合わせ投稿のみだとデータ量が少ないため 単品 9.973116006811027 匿名

    9.839584614186505 カーソル 9.21097595476413 ショップ 3.3278392845417772 : このスコア表は今後新規お問い合わせがきた時のTFIDFスコア計算に使用する Slack投稿文の解析、処理: IDF値の事前計算 35