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

v1Bot_v0.2

y-wat
March 17, 2020
36

 v1Bot_v0.2

開発終わったので振り返りの資料。
未発表。

y-wat

March 17, 2020
Tweet

Transcript

  1. connpass: y-wat • 本社に自席がない常駐エンジニア5年目 • 昔: OracleDB担当(バッチ処理、DBA), BIツール導入&保守 • 今:

    GCPでログ基盤構築 2018冬から個人的にアプリケーション開発はじめました。 仕事では2019/04から(PLSQLは除く)。
  2. モジュール配置 検索bot (稼働中) View (稼働中) 検索辞書作成(稼働中) Storages (稼働中) Cloud Run

    GCS Cloud Tasks BigQuery Firebase Functions PG GCE 記事仕分け (稼働中) GKE
  3. Storages - メタデータ用/集計用/長期保存用 BigQuery GCS Postgres • メタデータ • 履歴データ

    • heroku • 文書データ • フルスキャン前提 • 直近3ヶ月のみ保持(予定) • 文書データ • 個別アクセス • 長期保存用 ストレージを跨いだデータ整合性管理 • Job_id: 検索ワード+検索オプション => sha256 • Exec_id: searchの起動ごとに => uuid4 • 文書id: テキストのみ抽出した文書 => sha256
  4. 検索辞書作成 - tfidf • tfIdfで特徴語を抽出 • 元の検索条件 + tfidf結果で再検索 =

    今日の深堀り検索 検索bot 再走行 task 追加検索条件リスト
  5. 記事仕分け • やりたいこと ◦ 追加検索結果から絞り込みを行う ◦ ベース検索(n * 5記事) *

    追加検索(tfidf(3ワード) * 5記事) = 75n記事(最大) →多すぎるので選別が必要 • 実装方法 ◦ 文書のベクトル作成 i. bert as service (GKE + GCE) ◦ 記事推薦 i. Cosine類似度 (Bigquery) ここまでの実装と評価を 3月中に
  6. まとめ: 3ヶ月の振り返り - 勢いで作ったGIGO • プロダクト ◦ 簡易的な文書収集 &仕分けエンジンとして使えそう。 英語なら。

    ◦ インプットデータの品質問題 (例: ECサイト、出会い系コミュニティサイト ) • bot開発: 前処理が本番 - 無価値な単語をどうやって弾くか ? ◦ 例 - 名詞,固有名詞: EV(電気自動車),新型コロナウイルス ,12月5日,37ドル ◦ 人間にとっての「有意味な単語」と計算結果での「特徴語」は一致しない ◦ 辞書の品質維持 • アーキテクチャ: 軽量なモジュール単位実装 + 疎結合 ◦ 軽量に作る: 素pythonスクリプト、flaskでの簡易実装優先 (大きいFW/ORM使わない) ◦ 小さいAPIをタスクキューで繋げる : モノリシックを避ける + 並列実行リソースの最適化 ◦ プログラミングの学習としては微妙 (Leetcode等の方が良い)
  7. 最後に つっこみ歓迎。 • 「アーキテクチャおかしくない??」 • 「実装内容もっと良いやり方が・・・」 直近のissue • メンテナンス負荷の低い分析処理 +基盤

    • ストレージレイヤのデータ管理 • テキスト前処理の完成形 • 分かち書きに使う辞書メンテナンス • 自然言語処理なにもわからない
  8. 今後の計画 - bot2号機 • 英語を優先対応 - 日本語対応は作業コストに見合わない ◦ 前処理のテンプレ化したい ◦

    「分かち書き」処理の廃止による辞書問題からの解放 ◦ bert モデル更新への追従を容易に • 取得元を絞る ◦ 特定ソースに絞る方がデータの品質は揃いそう ◦ 候補①: News APIなどニュース記事 ◦ 候補②: 特定サイトの巡回 • 文書ベクトルのデータベース ◦ 現在: 各バッチ処理内での類似文書検索 ◦ これから: 文書テータベース +レコメンド的なものを目指したい • 発信方法の改良 ◦ リンクを飛び回りたくない ◦ サマリを音声配信する的なことは可能なのか ??