本記事執筆時点の2023年4月時点で、ChatGPTのニュースを見ない日はないほど、世の中にChatGPTの記事が溢れています。「こんなことに使える」「あんなことに使える」と応用範囲が広いChatGPTですが、「あたかも当然のように嘘をつく」ように決して万能なわけではなく得手不得手があります。そんなChatGPTに対して、プロダクト開発側に立つ方にとって気になるのは「実際にプロダクトに組み込めるのだろうか?」という点でしょう。 そこで、本記事ではストックマークのプロダクトで実現している「記事中にあるノイズ削除」にフォーカスして、自社で利用するモデルとChatGPTとを比較していきます。なお、プロダクトに組み込む場合は、ChatGPTではなくAPIを利用するケースが自然ですが、GPT-4ベースのAPIを執筆時点で利用できなかったことから、ChatGPT Plus(GPT-4)を利用しています。 本記事は以下の3点を中心に紹介します。 ストックマークの自社プロダクトでは、Web上にあるニュース記事からの「意味のあるテキストの抽出」を実現しています。Webに溢れるコンテンツはさまざまな理由からノイズ(広告、記事のメタデータ)を含んでいます。 たとえば、次の画像では段落の間に外部へのリンクが挿入されており、これは記事の本旨からするとやや外れた内容になっています。 そのまま活用すると、必ずしも読み手にとって最適な情報を提供できるわけではありません。そのため、ユーザーにとってより価値のある情報提供するために、記事中にあるノイズを削除する必要があります。 特定のWebサイトに限れば、HTMLのスタイリング情報(CSS)やセマンティックタグの活用によるノイズを含まない情報抽出は可能です。しかし、膨大なニュースサイトに対して統一的なルールセットを用意・適用するのは現実的ではありません。Webサイトの構造は変化しますし、なにより誤ってHTMLタグが利用されていると、記事中の重要コンテンツを落としてしまうことすらあります。 そこで別の方法として、HTMLから文字列を抽出して、その文字列に対してノイズを削除する方法があります。ストックマークではこちらの方法を活用しています。なお、単にテキストを抽出というと、完全に構造情報が失われるように思われますが、ここは一工夫を加えています。具体的には、異なる対象から抽出されたテキストは、2つの連続する改行である 上記で抽出されたテキストを入力として、自社で開発したモデルを利用してノイズを除去しています。具体的に言えば、2つのモデルを活用しています。1つはSklearn MLPClassifierです。もう1つの言語モデルには、日本語のBERTモデルである BERT base Japanese (IPA dictionary) をファインチューニングしたものを利用しています。 これらのモデルを活用して、さまざまな区切り文字列を活用して「この文はノイズかどうか?」を0から1の間でスコアリングして、ノイズ度を出力します。文章の階層構造などの文字列以外のより上位の情報の活用により、文脈を考慮した精度向上も狙えますが、たいていは文脈を考慮せずとも判断できるため、ここでは文そのものに着目しています。 ChatGPT の効果的な活用方法として、プロンプトエンジニアリングガイドなども公開されていますが、ここでは Zero-shot 方式でノイズ削除を試みた例を紹介します。プロンプトはシンプルに 試行例は複数ありますが、わかりやすいものを1つキャプチャにて紹介します。 赤枠①で明示したように、不要な情報が削除しきれていません。また赤枠②の箇所から分かるようにChatGPTの制約から、出力トークン数に制限があり文が途中で終わっています。さらに、キャプチャでは明示していませんが、実行ごとに出力結果が変わることがあります。 その他の点も含めてまとめると次のようになります。 本記事では、プロダクトの応用に向けてChatGPTと自社モデルとの比較を紹介しました。ChatGPTは非常に強力なサービスですが、適用範囲に得手不得手があります。そのため、実際の本番プロダクトに組み込む場合には、スコープを限定したより効率的なモデル作成が効果的です。
前提: 記事中のノイズ削除がなぜ必要なのか?
どのようにストックマークでノイズ削減を実現しているか?
\n\n
で区切りを設けるなどいくつかの区切りを設けています。ChatGPT Plus(GPT-4) との比較
本文の箇所だけを、文字を変更せずに出力してください。
としています。
項目
ストックマークのモデル
ChatGPT
正確さ
常に元の記事を維持したままノイズ削除可能
元の記事が失われ、短い要約になることがある
速度とコスト
10億パラメータのBERTであり高速で実行可能。また文レベルの推論であり効率的
より長い処理時間および高いコストがかかる
ロバスト性
複数回の同じ入力に対して常に同じ結果が得られる
厳密なプロンプト調整が必要であり、応答が一定せずプロダクション環境での利用に難しさがある
まとめ