Save 37% off PRO during our Black Friday Sale! »

LT_20200215

15964b9c62aafd1e9220e61d128afb10?s=47 y-wat
February 15, 2020
160

 LT_20200215

開発中の資料です

15964b9c62aafd1e9220e61d128afb10?s=128

y-wat

February 15, 2020
Tweet

Transcript

  1. 面倒な検索はpythonにやらせよう -開発記録 v0.1- y-wat

  2. お願い スクレイピング・クローリングは用法・容量を守って実行しましょう

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

    GCPでログ基盤構築 2018冬から個人的にコーディングはじめました。 仕事では2019/04から(PLSQLは除く)。
  4. 今日の目的 • 3ヶ月開発の中間強制LT • 個人開発中の検索botを紹介する(画面ありませんごめんなさい) • デザインパターンの共有枠です • 違和感のある設計・実装を見かけたら指摘してください •

    面白そうな追加機能ネタは歓迎
  5. 「気になった単語」を覚えてますか?? →無理。 →継続フォローつらい。 →周辺情報も欲しい。

  6. 検索botの目指すところ • 定期web検索 • 自律追加検索 • 記事推薦 気になるネタのウォッチ + 知らないサイトへの到達

  7. モジュール配置 検索bot (稼働中) View (稼働中) 検索辞書作成(稼働中) Storages (稼働中) Cloud Run

    GCS Cloud Tasks BigQuery Firebase Functions PG GCE 記事推薦 (調査中) ??
  8. 検索bot - 新着ページを集める Web Site 検索 task task task task

    task task 検索条件リスト
  9. Storages - メタデータ用/集計用/長期保存用 BigQuery GCS Postgres • メタデータ • 履歴データ

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

    今日の深堀り検索 検索bot 再走行 task 追加検索条件リスト
  11. 記事推薦 - 2月中の実装目標 • やりたいこと ◦ 追加検索結果から絞り込みを行う ◦ ベース検索(n *

    5記事) * 追加検索(tfidf(3ワード) * 5記事) = 75n記事(最大) →多すぎるので選別が必要 • 実装方法 ◦ 文書のベクトル作成: bert as service (試し中) ◦ 記事推薦 i. Cosine類似度 <- とりあえず単純なコレが有力 ii. Elastic search iii. ほか調査中
  12. まとめ: 前半の振り返り • プロダクトとしての評価 ◦ 新着記事の自動配信としては使えそう。 英語なら。 ◦ 不要な記事への対処が悩み (例:

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

    • ストレージレイヤのデータ管理 • テキスト前処理の完成形 • 分かち書きに使う辞書メンテナンス (最終手段: Natural Language API) • 自然言語処理なにもわからない