コトラーのマーケティング5.0にあるように、マーケティングにおける技術の重要性が増してきた。テクノロジー抜きにマーケティングを語れない時代へ。テクノロジーでマーケティングを差別化することは、他社に対する事業差別化に直結する。
マーケティング部門所属エンジニアの私は、2023年夏よりMarTechの自習を習慣化。。。
最初は費用ゼロで始めるので、何でも一人で全部こなさなければならない。フルスタックエンジニアの世界。実務を通して学ぶことの多さを実感。一つ一つ、習得していく。
職場では中性能のラップトップPCを使い費用ゼロで業務完結させる必要あり、ここで自習するものも普通のPCで動作するもの、かつ、無償で利用できるものに限定する。
毎日、pandasを使って仕事中。。。
NLP自習の第1歩、NLP何たるかを知るためNLTKからNLP始めた。しかし、後で、今はAI使ったNLP(例えばspaCy)が主流だと知った。仕事でNLTK使う機会はないが、NLPの勉強始める時はNLTKから始めた方が良い。
もはや、これ抜きで、私の仕事は成立せず。定量化できない非構造化データに眠っているお宝を拾い上げるための手段。
私の趣味の世界でつくったアプリ
学習済み感情分析モデルがHugging Faceのサイトに沢山あり。
- ChatGPTへネガポジコメント生成させChatGPTへネガポジ分析させる。精度がよくないので、他の手法でネガポジ分析させるため、ネガポジコメント文章を出力
- Tranformersでネガポジ分析など基本処理
2024年の3月から仕事で盛んに使うようになった。SQLiteは埋め込み型のローカルデータベースなので、データの更新も検索もかなり高速。PandasとSQLiteの親和性も高く、中〜小規模なデータサイエンス活動にはうってつけ。
マーケティング部門にある非構造化データといえば、エクセルの顧客コメント資料、パワポやPDFの資料、そして、画像や動画コンテンツ。これらをAIで分析すれば有用な何かが得られるはず。
- PowerPointとPDFからデータ抽出 ... スライドがある程度構造化されていれば関係抽出しやすいが。。。
注意:この自習活動はpdf-searchレポジトリへスピンアウト。これ以上、こちらは更新しない。
2024年GW自習活動はPDF全文検索とテキストハイライトに決めた。
処理したデータを職場の同僚へウエブブラウザを介して見せたいとする。Streamlitも気になるが、JavaScript系のライブラリを使いたいのでFlaskでAPIサーバ作ることにした。その方が、後々、Salesforce等へソースコードの一部を再利用することが出来て良い(Salesforce, OutSystems, Mendixなど、ローコード開発基盤は、全て、HTML5(=JavaScript)でアプリをつくる)。
FlaskでMVCつくるときの参考:https://qiita.com/hiro_hiro_0425/items/e0a7a777f2772c3ac0ec
Salesforce独自フレームワークや独自言語を覚えなければならない。SaaSの特性上、一度に処理できるデータ量の制約あり。。。
一時期Salesforce SEだったので、Salesforceを技術的に勉強するためにつくったアプリ。今でも使っている。
メタバースってCRMで儲かるのだが、誰も理解してくれない。。。メタバース語るなら、フルスタックで勉強してね!最近はChatGPT流行ってきたし。。。
- 言語認識 ... 文章が短いと誤認識が起こる。
- Image Captioning ... 認識性能の高さに驚いた!生成されたキャプションをNLPにかけて利用してみたい。
- Matplotlib color map を HTML color listへ変換 ... Networkのcommunity色分け用
- Webスクレイピング ... マーケティング部門所属エンジニアに必須なスキル。今回は Project Gutenberg の本(web版)からパラグラフ抽出を試みる。
- YAML Database ... 大量のドキュメントへNLP処理を行う際、その処理結果を保存するための簡易データベースを開発。
仕事では、自分がつくったものを他のメンバーへ使ってもらう手段として、ブラウザから操作できるインタフェースを提供。
Pythonで処理したnetworkxデータをvis.jsへ取り込みたい。しかし、vis.jsは可視化はできるがグラフ理論実装されておらず、実践上では不都合が出てきた。ブラウザ上の操作でサブグラフをつくれるようなライブラリが必要。
Cytoscape.jsにはグラフ理論とビジュアリゼーションの両方が含まれていて良いが、少し評価してみたところビジュアリゼーションが弱い。vis.jsの方がインパクトあり。
よって、以下の組み合わせにした:
- graphology.jsでグラフ理論の処理
- vis.jsでビジュアリゼーション処理
ナレッジグラフ生成に必要となる関係抽出、以下のモデルを試してみたが、性能がかなり良い。
問題は、特定ドメイン固有の専門用語では関係抽出がうまく行かないこと。専用モデルの学習が必要になる。また、学習に必要十分なデータを揃えられない。
また、ここでは、ナレッジグラフ連動の検索エンジンを開発しているわけではなく、情報の整理やグルーピングをやりたいだけ。spaCyの範囲で出来る手法はないか?
最低限、ノード間依存関係とエッジのweightが必要。Weightの方、感情分析結果も反映させたい(ネットワークルーティングでいうコストに相当)。その程度ならspaCyのDependencyMatcherで実現出来ないか?探究中。。。
Betweennessを尺度にして、グラフからサブグラフを抽出したい。
Named Entityのネットワークを生成してみると、ある単語の頻度がやたら多くて目立つ場合がある。例えば自社名。自社名は重要だが、betweennessが突出して大きくなってしまうのを避けたい。TF-IDF(Term Frequency - Inverse Document Frequency)でうまく調整出来ないか?検討してみたい。
NLP関連では無償でも営利目的での利用を禁じるものが多い。
非営利の意味が解説されている:
データ整理などの業務効率化に使う分には問題なさそう。利益を得るための活動をしてはならない。
NLP開発環境 & NLPライブラリ
NLP開発環境 & NLPライブラリ
https://huggingface.co/docs/transformers
Transformersのモデル保存場所
Macの場合
/Users/<username>/.cache/huggingface/hub
モデルのサイズが大きいので、用済み後は必要に応じ削除する。
spaCy及びTransformers上で動作する日本語NLP。日本語TokenizerであるSudachiPy採用。 https://megagonlabs.github.io/ginza/
私は仕事でGiNZAを使っていない。英語と日本語両方扱う必要あるので。
日本語LLMの参考として
NLP教科書
マーケティングの教科書